Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Anchor
top
top

Table of Contents
classcontents

ウィジェット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
languagejava
themeEclipse
let widgetAPI = options.api.widget;
widgetAPI.serverRequest('hello').then(result => {
    alert(result.hello);
});

...

actionscript3
<script src=”http://localhost:8080/JsAPI/v3?nlq=true”></script>

これにより、NLQコンテナがページに配置されます。(Scriptタグ自体が追加されたのと同じ場所)

組み込みURLに追加できるパラメーターがいくつかあります。それぞれの詳細については、高度なAPIページをご確認ください。これらのオプションはすべて、高度なAPIのパススルー設定となっています。

popup

このパラメーターの文字列は、ガイド付きNLQ UIがライトボックスで表示されるかを決定します。パラメーターがクエリから除外されている場合、デフォルトの動作はFalseとなります。

WidgetAPI.serverRequest(‘example’, { counter: 1, myClass:
Code Block
Code Block
languagejava
themeEclipse
languagejava
themeEclipse
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
languagejava
themeEclipse
widgetAPI.serverRequest(“hello”);

getAction()は、文字列「hello」を返します。

String getParameter(String parameterName)

このメソッドは、JavaScript actionDataオブジェクトに含まれるパラメーターの文字列バージョンを返します。渡されたparameterNameがリクエスト内のパラメーターと一致しない場合は、nullが返されます。

Code Block
languagejava
themeEclipse
widgetAPI.serverRequest(“hello”, { name: “Code Widget” });

request.getParameter(“name”) が呼び出されると、「Code Widget」を返します。

<T> getParameterAsObject(String parameterName, Class<T> clazz)

この関数は、渡されたparameterNameの値を、渡されたClass型として返します。

例:

Code Block
languagejava
themeEclipse
Integer counter = getParameterAsObject(“counter”, Integer.class);

上記のコードを呼び出すことで、整数が返されます。値を解析できない場合は、nullが返されます。

または、

actionscript3
http://localhost:8080/JsAPI/v3?nlq=true&popup=true


Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&popup=false

viewUUID

viewUUIDパラメーターがクエリ文字列に含まれている場合、ビューを選択するステップが省かれ、すぐに「質問する」となります。パラメーターがクエリから除外されている場合、通常のデータビューを選択するダイアログボックスが表示されます。

Code Block
languagejava
http://localhost:8080/JsAPI/v3?nlq=true&viewUUID=8862563a-02a5-4caf-9352-237b9e40c0de

showWelcome

このクエリ文字列のパラメーターは、ガイド付きNLQのウェルカムスプラッシュ画面を表示するかどうかを決定します。

Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=ALWAYS


Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=NEVER


Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showWelcome=NORMAL

showSave

このクエリ文字列のパラメーターは、ユーザーがコンテンツを保存する権限を持っている場合、NLQ UIの保存ボタンを表示するか隠すかを決定します。ユーザーが保存する権限を持っていない場合、パラメーターが設定されていたとしてもボタンは表示されません。パラメーターがクエリ文字列から除外されている場合、デフォルトの動作はtrueとなります。

Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showSave=true

これは、高度なAPIで行うのと事実上同じです。

Code Block
yellowfin.loadNLQ({
    contentIntegrationOptions: {
        ‘one’controls: ‘one’,[‘SAVE’]
        ‘two’: ‘two’
    }
});


フロントエンドから上記のリクエストが実行されると、これらはJavaで次のように実行することで、オブジェクトとして直接取得することができます。Falseが渡された場合、次のようになります。

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()
Code Block
languagejava
themeEclipse
actionscript3
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に設定されている必要があります。

public void doRequest(CodeWidgetActionRequest request, CodeWidgetActionResponse response) { if("hello".equals(request.getAction())) { response.addData("hello", "Hello JavaScript!"); } }
Code Block
Code Block
languagejava
themeEclipse
languagejava
themeEclipse
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
languagejava
themeEclipse
response.addData(‘greeting’, ‘Hello World’);

上記のJava テキストを使用した場合、JavaScriptを使用することで、パラメーターと値にアクセスすることができます。

Code Block
languagejs
themeEclipse
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
languagejava
themeEclipse
public Class MyExampleClass {
    public String getSayHello() {
        Return "Hello"
    }
    public String helloWorld() {
        return "Hello World";
    }   
    public boolean isCodeWidget() {
        return true;
    }
} 

応答に追加された場合:

Code Block
languagejava
themeEclipse
response.addData("exampleClass", new MyExampleClass());

次のオブジェクトを生成します。

Code Block
languagejava
themeEclipse
{
    sayHello: "Hello",
    codeWidget: true
}

WidgetAPI

ウィジェットAPIは、コードウィジェットのJavaScript コンポーネントが、バックエンドコンポーネントにメッセージを送信できるようにする機能を提供します。

WidgetAPI.serverRequest(action, actionData)

リターン

Promise - コードウィジェットリクエストが完了すると解決されるPromiseです。

Promiseは、バックエンドコンポーネントにより生成される14421519のJSON表現を含むオブジェクトに渡されます。

パラメーター

action - 文字列 - サーバに実行してほしいアクション

actionData - オブジェクト - リクエストとともに渡してほしい任意のデータを含むオブジェクト

myWidget.js

Code Block
languagejava
themeEclipse
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

actionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showSave=true&showAddTo=true

または

Code Block
languageactionscript3
http://localhost:8080/JsAPI/v3?nlq=true&showAddTo=true

事実上、これは以下の高度なAPIコールと同じです。

Code Block
languageactionscript3
yellowfin.loadNLQ({
contentIntegrationOptions: {
controls: [‘SAVE’, ‘ADD_TO’]
}
});