...
Table of Contents | ||
---|---|---|
|
ウィジェットAPIの概要
こちらで説明されている関数は、コードウィジェットを扱う際に使用され、Yellowfinの機能と柔軟性をさらに拡張します。これらはプラグインマネージャを通してインポートすることで、ダッシュボードに追加でき、ダッシュボード構築プロセスの中で選択するコードウィジェットの一覧に表示されます。より詳細な情報やリソースについては、コードウィジェット作成ガイドを参照してください。
WidgetAPI.serverRequest および doRequest を使用してデータを渡す
コードウィジェットの開発中には、Yellowfin サーバにデータを渡す必要がある場合があります。これは、WidgetAPI.serverRequest関数を使用することで実現できます。これは、コードウィジェットに関連するJava classの呼び出しを行います。
myWidget.js
Code Block | ||||
---|---|---|---|---|
| ||||
let widgetAPI = options.api.widget;
widgetAPI.serverRequest('hello').then(result => {
alert(result.hello);
}); |
MyWidgetImplementation.java
Code Block | ||||
---|---|---|---|---|
| ||||
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が返されます。
または、
Code Block | ||||
---|---|---|---|---|
| ||||
WidgetAPI.serverRequest(‘example’, {
counter: 1,
myClass: {
‘one’: ‘one’,
‘two’: ‘two’
}
}); |
フロントエンドから上記のリクエストが実行されると、これらはJavaで次のように実行することで、オブジェクトとして直接取得することができます。
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() {
return one;
}
public String getTwo() {
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)
この関数は、渡された型のパラメーターを使用して、渡されたパラメーターキーの解析を試行します。
この関数は、<T> getParameterAsObject(String parameterName, Class<T> clazz)と似たように機能しますが、型オブジェクトを定義できるため、ジェネリックをサポートしているclassを使用することができるので、ジェネリックを使用する場合により適してします。
Code Block | ||||
---|---|---|---|---|
| ||||
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
...
language | java |
---|---|
theme | Eclipse |
...
Anchor | ||||
---|---|---|---|---|
|
Table of Contents | ||
---|---|---|
|
概要
JS APIには、ガイド付きNLQを設定するために2つの方法があります。
- 高度なAPI経由
- 組み込みリンク経由
一番柔軟性が高いのは高度なAPIで、表示内容やトリガーイベントから返される詳細情報の使用方法を自由に設定できます。例えば、ユーザーが質問の回答をレポートとして保存した場合、 レポートAPIに関連するすべての機能が、そのレポートで利用可能になります。
一方、組み込みリンクは、NLQを組み込むにはシンプルですが柔軟性は低くなります。組み込みリンクは、URLの一部として渡されたときに表示オプションを提供するパラメータを持つクエリ文字列です。組み込みリンクのツールセットには、イベントベースのオプションはありません。
組み込みリンク経由でガイド付きNLQを設定する
組み込みリンクは、ガイド付きNLQ 高度なAPIを大幅に簡素化したものです。開発者はイベントを使うことができません。URLに追加されたパラメータに基づいて、シンプルにレンダリングされます。
ガイド付きNLQ組み込みリンクの基本構造は以下の通りです。
Code Block | ||
---|---|---|
| ||
<script src=”http://localhost:8080/JsAPI/v3?nlq=true”></script> |
これにより、NLQコンテナがページに配置されます。(Scriptタグ自体が追加されたのと同じ場所)
組み込みURLに追加できるパラメーターがいくつかあります。それぞれの詳細については、高度なAPIページをご確認ください。これらのオプションはすべて、高度なAPIのパススルー設定となっています。
popup
このパラメーターの文字列は、ガイド付きNLQ UIがライトボックスで表示されるかを決定します。パラメーターがクエリから除外されている場合、デフォルトの動作はFalseとなります。
Code Block | ||
---|---|---|
| ||
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 |