ウィジェットAPIの概要
こちらで説明されている関数は、コードウィジェットを扱う際に使用され、Yellowfinの機能と柔軟性をさらに拡張します。これらはプラグインマネージャを通してインポートすることで、ダッシュボードに追加でき、ダッシュボード構築プロセスの中で選択するコードウィジェットの一覧に表示されます。より詳細な情報やリソースについては、コードウィジェット作成ガイドを参照してください。
WidgetAPI.serverRequest および doRequest を使用してデータを渡す
コードウィジェットの開発中には、Yellowfin サーバにデータを渡す必要がある場合があります。これは、WidgetAPI.serverRequest関数を使用することで実現できます。これは、コードウィジェットに関連するJava classの呼び出しを行います。
...
概要
JS APIには、ガイド付きNLQを設定するために2つの方法があります。
一番柔軟性が高いのは高度なAPIで、表示内容やトリガーイベントから返される詳細情報の使用方法を自由に設定できます。例えば、ユーザーが質問の回答をレポートとして保存した場合、 レポートAPIに関連するすべての機能が、そのレポートで利用可能になります。
一方、組み込みリンクは、NLQを組み込むにはシンプルですが柔軟性は低くなります。組み込みリンクは、URLの一部として渡されたときに表示オプションを提供するパラメータを持つクエリ文字列です。組み込みリンクのツールセットには、イベントベースのオプションはありません。
組み込みリンク経由でガイド付きNLQを設定する
組み込みリンクは、ガイド付きNLQ 高度なAPIを大幅に簡素化したものです。開発者はイベントを使うことができません。URLに追加されたパラメータに基づいて、シンプルにレンダリングされます。
ガイド付きNLQ組み込みリンクの基本構造は以下の通りです。
Code Block |
---|
|
let widgetAPI = options.api.widget;
widgetAPI.serverRequest('hello').then(result => {
alert(result.hello);
}); |
...
|
<script src=”http://localhost:8080/JsAPI/v3?nlq=true”></script> |
これにより、NLQコンテナがページに配置されます。(Scriptタグ自体が追加されたのと同じ場所)
組み込みURLに追加できるパラメーターがいくつかあります。それぞれの詳細については、高度なAPIページをご確認ください。これらのオプションはすべて、高度なAPIのパススルー設定となっています。
このパラメーターの文字列は、ガイド付きNLQ UIがライトボックスで表示されるかを決定します。パラメーターがクエリから除外されている場合、デフォルトの動作はFalseとなります。
Code Block |
---|
Code Block |
---|
|
WidgetAPI.serverRequest(‘example’, {
counter: 1,
myClass: |
public void doRequest(CodeWidgetActionRequest request, CodeWidgetActionResponse response) {
if("hello".equals(request.getAction())) {
response.addData("hello", "Hello JavaScript!");
}
} |
CodeWidgetActionRequest
コードウィジェットのフロントエンドコンポーネントからリクエストが実行されると、CodeWidgetActionRequestオブジェクトが作成されます。このオブジェクトには、そのリクエストに追加されたデータが含まれています。
関数
String getAction()
このメソッドは、WidgetAPI.serverRequest関数に渡された文字列と一致します。これは、コードウィジェットが実行すべきアクションを特定するために使用されます。
例えば、フロントエンドからのリクエストが次のように行われた場合:
Code Block |
---|
|
widgetAPI.serverRequest(“hello”); |
getAction()は、文字列「hello」を返します。
String getParameter(String parameterName)
このメソッドは、JavaScript actionDataオブジェクトに含まれるパラメーターの文字列バージョンを返します。渡されたparameterNameがリクエスト内のパラメーターと一致しない場合は、nullが返されます。
Code Block |
---|
|
widgetAPI.serverRequest(“hello”, { name: “Code Widget” }); |
request.getParameter(“name”) が呼び出されると、「Code Widget」を返します。
<T> getParameterAsObject(String parameterName, Class<T> clazz)
この関数は、渡されたparameterNameの値を、渡されたClass型として返します。
例:
Code Block |
---|
|
Integer counter = getParameterAsObject(“counter”, Integer.class); |
上記のコードを呼び出すことで、整数が返されます。値を解析できない場合は、nullが返されます。
または、
|
http://localhost:8080/JsAPI/v3?nlq=true&popup=true |
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&popup=false |
viewUUID
viewUUIDパラメーターがクエリ文字列に含まれている場合、ビューを選択するステップが省かれ、すぐに「質問する」となります。パラメーターがクエリから除外されている場合、通常のデータビューを選択するダイアログボックスが表示されます。
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&viewUUID=8862563a-02a5-4caf-9352-237b9e40c0de |
showWelcome
このクエリ文字列のパラメーターは、ガイド付きNLQのウェルカムスプラッシュ画面を表示するかどうかを決定します。
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=ALWAYS |
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=NEVER |
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=NORMAL |
showSave
このクエリ文字列のパラメーターは、ユーザーがコンテンツを保存する権限を持っている場合、NLQ UIの保存ボタンを表示するか隠すかを決定します。ユーザーが保存する権限を持っていない場合、パラメーターが設定されていたとしてもボタンは表示されません。パラメーターがクエリ文字列から除外されている場合、デフォルトの動作はtrueとなります。
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&showSave=true |
これは、高度なAPIで行うのと事実上同じです。
Code Block |
---|
yellowfin.loadNLQ({
contentIntegrationOptions: {
‘one’controls: ‘one’,[‘SAVE’]
‘two’: ‘two’
}
}); |
フロントエンドから上記のリクエストが実行されると、これらはJavaで次のように実行することで、オブジェクトとして直接取得することができます。Falseが渡された場合、次のようになります。
Code Block |
---|
| class MyClass {
private String one = null;
private String two = null;
public MyClass(String one, String two) {
this.one = one;
this.two = two;
}
public String getOne() |
yellowfin.loadNLQ({
return one;
}
public String getTwo() contentIntegrationOptions: {
controls: []
return two; }
}
Integer counter = request.getParameterAsObject(‘counter’, Integer.class);
MyClass myClass = request.getParameterAsObject(‘myClass’, MyClass.class);
System.out.println(myClass.getTwo()); //Prints “two” |
こちらの例では、変数カウンターは整数として解析され、MyClassはJSONから対応するプライベートメンバー変数に値がマッピングされます。
このメソッドを使用すると型の安全性が保証されないため、ジェネリックを使用する場合には制限があります。ジェネリックを使用してオブジェクトの解析を試行する場合は、代わりにgetParameterAsObject(String, Type)を使用することを推奨します。
<T> getParameterAsObject(String parameter, Type type)
この関数は、渡された型のパラメーターを使用して、渡されたパラメーターキーの解析を試行します。
...
showAddTo
このクエリ文字列のパラメータは、ユーザーが権限を持っている場合、ガイド付きNLQ UIに「追加」ボタン(レポートを他のコンテンツに追加)を表示するか隠すかを決定します。ユーザーがレポートを他のコンテンツに追加する権限を持っていない場合、パラメーターが設定されていたとしてもボタンは表示されません。
パラメーターがクエリ文字列から除外されている場合、デフォルトの動作はFalseとなります。パラメーターがTrueに設定されている場合、showSaveパラメータがクエリ文字列から除外されているか、trueに設定されている必要があります。
Code Block |
---|
Code Block |
---|
|
public void doRequest(CodeWidgetActionRequest request, CodeWidgetActionResponse response) {
if("hello".equals(request.getAction())) {
response.addData("hello", "Hello JavaScript!");
}
} |
List<String> myList = getParameterAsObject(“myList”, new TypeToken<List<String>>() {}.getType()); |
Note |
---|
この関数を使用すると、Yellowfinに同梱されているgsonへの依存が導入されますが、それはこのwikiでは説明していません。 gsonに馴染みがなく使用を避けたい場合は、文字列バージョンを取得してから解析をする代替案があります。 |
CodeWidgetResponse
このオブジェクトは、コードウィジェットのJavaScript コンポーネントに送信される応答を表します。
JavaScriptへ返したい任意のデータをこちらに追加することができ、JavaScritpはこの応答をシンプルJSONオブジェクトとして受信します。
関数
addData(String parameter, Object data)
この関数は、渡されたパラメーターと値をオブジェクトに追加し、JavaScriptに返します。
例:
Code Block |
---|
|
response.addData(‘greeting’, ‘Hello World’); |
上記のJava テキストを使用した場合、JavaScriptを使用することで、パラメーターと値にアクセスすることができます。
Code Block |
---|
|
widget.serverRequest(‘greeting’).then(result => {
alert(result.greeting);
}) |
渡されるオブジェクトは、単純な文字列よりもさらに複雑になることがあります。任意のJava classをこちらに追加することができます。getPropertyやis Propertyのように、公開されているゲッターにJava classの実装を追加すると、それらはJSONデータに追加されます。これが起きると、「get」の後の最初の文字は、生成されたJSON内で小文字に変更されます。
例:
getPropertyはpropertyになります。
isAPropertyはaPropertyになります。
次のclassの場合:
Code Block |
---|
|
public Class MyExampleClass {
public String getSayHello() {
Return "Hello"
}
public String helloWorld() {
return "Hello World";
}
public boolean isCodeWidget() {
return true;
}
} |
応答に追加された場合:
Code Block |
---|
|
response.addData("exampleClass", new MyExampleClass()); |
次のオブジェクトを生成します。
Code Block |
---|
|
{
sayHello: "Hello",
codeWidget: true
} |
WidgetAPI
ウィジェットAPIは、コードウィジェットのJavaScript コンポーネントが、バックエンドコンポーネントにメッセージを送信できるようにする機能を提供します。
WidgetAPI.serverRequest(action, actionData)
リターン
Promise - コードウィジェットリクエストが完了すると解決されるPromiseです。
Promiseは、バックエンドコンポーネントにより生成される14421519のJSON表現を含むオブジェクトに渡されます。
パラメーター
action - 文字列 - サーバに実行してほしいアクション
actionData - オブジェクト - リクエストとともに渡してほしい任意のデータを含むオブジェクト
例
myWidget.js
Code Block |
---|
|
define(function() {
function MyWidget(options) {
let widgetAPI = options.apis.widgetAPI;
//Trigger a "hello" request to the backend of the widget
widgetAPI.serverRequest('hello').then(result => {
alert(result.hello);
});
}
return MyWidget;
} |
MyWidgetImplementation.java
|
http://localhost:8080/JsAPI/v3?nlq=true&showSave=true&showAddTo=true |
または
Code Block |
---|
|
http://localhost:8080/JsAPI/v3?nlq=true&showAddTo=true |
事実上、これは以下の高度なAPIコールと同じです。
Code Block |
---|
|
yellowfin.loadNLQ({
contentIntegrationOptions: {
controls: [‘SAVE’, ‘ADD_TO’]
}
}); |