PanelCollection APIは、いくつかのヘルパーオブジェクトを使用します。これは、オプションの受け渡し、検証、または依存関係設定に使用することができます。詳細を以下に示します。
GeneralPanelOptions classは、パラメーターパネルとセクションレベルで、一般的なユーザーインターフェイスの表示オプション定義するために使用します。重要なメソッドを以下に示します。
メソッド | 説明 |
public void setSaveButton(boolean saveButton) public void setSaveButtonOptions(Map<String, Object> opts) public void setSaveText(String saveText) | setSaveButtonオプションをtrueに設定することで、パネルやセクションに保存ボタンを表示します。表示オプションは、setSaveButtonOptionsを使用して設定することもできます。利用可能なオプションの一覧は、インプットタイプ項目のtype BUTTON配下に示されています。ボタン上のテキストは、setSaveTextを使用してカスタマイズすることができます。 |
public void setExpandable(boolean expandable) public void setExpanded(boolean expandable) | これらは、セクションを展開可能にし、展開表示をするために使用します。 |
public void setShowName(boolean showTitle) | こちらをtrueに設定した場合、パネルやセクションの名前は、コンテナのトップに表示されます。 |
public void setCssRules(Set<CssRule> cssRules) | こちらのメソッドは、セクションやパネル、そのhtmlコンテナ内のすべてをスタイリングするカスタムCSSルールを設定するために使用します。 |
こちらのインターフェイスは、PanelCollection APIの様々なレベルのスタイリングルールを定義するために使用します。これをサポートするレベルは、CssRuleオブジェクトのセットを受け付けます。Yellowfinには、CssRulelmplという実装があり、以下のような単一のCSSルールを定義します。
div.styleExampleCell { border: none; color: #666666; } |
インスタンスはひとつのセレクターと、ひとつ以上のCSS宣言を持ちます。セレクターが定義されていない場合、Yellowfinは自動的にこれを生成します。
CssDeclarationインターフィスは、以下のような、単一の宣言を記述します。
border: none; |
Yellowfinには、CssDeclarationlmplという実装があり、プロパティと値を受け付けます。
Parameter inputField = new ParameterImpl(); inputField.setName("Example Param"); inputField.setProperty("PARAM_PROPERTY"); inputField.setInputType(InputType.TEXTBOX); CssRule cssRule = new CssRuleImpl("input", false); cssRule.addDeclaration(new CssDeclarationImpl("height", "21px")); cssRule.addDeclaration(new CssDeclarationImpl("padding", "5px")); cssRule.addDeclaration(new CssDeclarationImpl("font-size", "16px")); cssRule.addDeclaration(new CssDeclarationImpl("resize", "none")); cssRule.addDeclaration(new CssDeclarationImpl("color", "#666666")); cssRule.addDeclaration(new CssDeclarationImpl("border", "1px solid #e4e4e4")); Set<CssRule> cssRules = new HashSet<>(); cssRules.add(cssRule); inputField.setCssRules(cssRules); |
これにより、以下のCSSルールが作成されます。
input { height: 21px; padding: 5px; font-size: 16px; resize: none; color: #666666; border: 1px solid #e4e4e4; } |
こちらのclassは、パラメーターが一覧として表示される場合のユーザーインターフェイスオプションを定義するために使用します。例えば、TEXTBOXパラメーターは、いくつかのテキスト値を受け付けることができ、テキストボックスの一覧を表示します。
利用可能なすべてのオプションは、javadocを参照してください。
こちらのclassは、基礎的なユーザーインターフェイス検証ルールを定義するために使用します。最も便利なルールは、パラメーター値が空であるかどうかを確認するものです。その他のルールは、数値パラメーターに対して関係演算を実行します。
利用可能なすべてのオプションは、javadocを参照してください。
ユーザーインプットに基づき、パラメーターの表示/非表示を判断する場合があります。これは、パラメーターがリッスンする必要のあるパラメーターを定義し、値を指定して表示/非表示にする、ParameterDisplayRuleのインスタンスを使用して実行することができます。以下の例を参照してください。
以下は、SOURCEに0、またはnull以外の値が設定されている場合に、TABLE_NAMEを表示します。
Parameter p = new ParameterImpl(); p.setName("Table Name"); p.setProperty("TABLE_NAME"); p.InputType(InputType.SELECT); p.addDisplayRule(new ParameterDisplayRule("AND", "SOURCE", new Object[] { null, 0 }, true, null)); |
この表示ルールは基本的に、以下のコード行を作成します。
if(SOURCE != null && SOURCE != 0) showParameter(); |
SOURCEがnull、または0の時に、TABLE_NAMEを表示するためには、負のbooleanをfalseに変更しなくてはいけません。
p.addDisplayRule(new ParameterDisplayRule("AND", "SOURCE", new Object[] { null, 0 }, false, null)); |
これは、以下のようなものを作成します。
if(SOURCE == null || SOURCE == 0) showParameter(); |
これらの表示ルールは、すべてのレベルのパネルコレクションに適用することが可能で、パネルやセクション全体を非表示にすることもできます。
このclassは、便宜のためにオーバーロードされたコンストラクターを、各プロパティにセッターを提供します。最も記述的なコンスタクラーは、以下の通りです。
public ParameterDisplayRule(String logic, String property, Object[] vals, boolean negative, PropertyLocation location)
以下は、その属性の説明です。
negativeは、valsを「その他」のパラメーターと比較した後に得られる結果を反転します。
If vals = {null, 0}
negative | 結果 |
true | property != null && property != 0 |
false | property == null || property == 0 |
ParameterValueLoaderは、抽象classであり、イベントに基づき動的に値を読み込むために実装することができます。値ローダーは、セクションへ接続されます。パラメーターは、値ローダーを使用するように設定しなくてはいけません。以下に、いくつかの重要点を示します。
値ローダーのイベントへの応答はgetUpdatedPossibleValues()、またはgenerateDynamicParameterメソッドを使用して返すことができます。これらは、以下に示すメンバー変数を使用して、イベントへの応答方法を決定することができます。Yellowfinはこれらのメソッドを、以下の手順で実行します。
pvl.getDynamicParameterOptions.setValues(pvl.getUpdatedPossibleValues());
pvl.generateDynamicParameters();
注意:このgenerateDynamicParameters()は何も返しません。メソッドの実装は、「応答」メンバーの設定を想定しています。 |
パラメーター作成時に、パラメーターが依存する「ValueDependencies」の一覧を作成することができます。これらは、パネルコレクション内の他の場所に存在するパラメーターを指している必要があります。こちらを設定すると、値の依存関係で参照されるパラメーターのひとつが変更されると、必要なすべての情報を含むリクエストがサーバへ送信されることになります。
ビューのパラメーターがあり、データソースのパラメーターに依存させることで、データソースが変更される度にビューの一覧が再読み込みされるようにします。
datasourceParam.setProperty("datasource"); datasourceParam.setEvent("datasourceChanged"); viewParam.setProperty("view"); // Make view dependent on the data source viewParam.addValueDependency("datasource"); |
データソースパラメーターのセクションの値ローダーは、dataSourceChangedイベントを受け取る度に、選択されたデータソースに利用可能なビューを配置することができます。応答オブジェクトはフロントエンドに送信され、Yellowfinは利用可能なビューの一覧を配置します。
イベント関数は値の依存関係に類似しており、今回の場合を除き、変更するパラメーターは、どのパラメーターを再読み込みするかを判断します。実際のところ、今回の場合、依存関係の方向性が反転しています。値の依存関係は、パラメーター内の変更をリッスンする「その他」のパラメーターである一方で、イベントは、「その他」のパラメーターを変更するためにそのパラメーターに使用されます。これは、ボタンクリックが要求される場合に、ボタンに接続することもできます。
イベントトリガーの作成には、以下の3つの部分があります。
イベントデータと、イベントパラメーター内で指定されたパラメーターの現在の値は、単一のEventDataオブジェクトに結合されます。
cityParam.setProperty("city"); cityParam.setEvent("cityChanged"); cityParam.addEventData("fieldUUIDS", fieldUuids); p.addEventParameter("country", new PropertyLocation("MyPanel", "addressSection")); p.addEventParameter("region", new PropertyLocation("MyPanel", "addressSection")); |
値ローダーclassは、イベントに関する情報を保持する数多くの重要メンバー変数を持ちます。
メンバー変数 | 説明 | ||
protected Map<String, Object> changedValues | メンバーchangedValuesは、パラメーターと変更された値を持ちます。マップ内のキーは、トリガーされた変更イベントであるパラメーターの「プロパティ」属性である必要があります。 | ||
protected Map<String, Object> eventData | こちらのメンバーは、他のパラメーターの変更イベントをリッスンするパラメーターの「プロパティ」属性によりキーに設定されます。値は、開発者が変更イベントを受け取ったときに返信する必要があるデータです。 ビューがデータソースに依存する、データソースとビューのパラメーターを作成したとしましょう。データソースの値を1に変更した場合、changedValuesは以下のようになります。
そして、今回の例に基づき、eventDataは以下のようになります。
| ||
protected List<String> events | これは、値ローダーから受け取られたすべてのイベントを保持します。
| ||
protected DynamicParameterOptions response | 動的パラメーターオプションは、ParameterValueLoaderの応答オブジェクトです。これは、開発者がフロントエンドに表示したいすべてが含まれていなくてはいけません。DynamicParameterOptionsの詳細は、以下で紹介します。 |
実装可能なメソッドは、以下の2つです。しかし、開発者の要望に応じて、実装に必要になるのは、以下のいずれか一方のみです。両者は、ほぼ同様の目的を果たします。
メソッド | 説明 |
public void generateDynamicParameters() | こちらのメソッドは、応答メンバー変数に値を設定します。より詳細な情報は、DynamicParameterOptionsの項目を参照してください。 こちらが推奨されるメソッドであり、より柔軟性があります。 |
public Map<String, List<CustomValue<?>>> getUpdatedPossibleValues() | 影響するすべてのパラメーターの「可能な値」のマップを返すメソッドです。マップ内の各入力では、キーはパラメーターの「プロパティ」属性である必要があります。値は、「可能な」値を含む、CustomValueオブジェクトの一覧でなくてはいけません。 こちらのメソッドは、将来的に廃止される可能性があります。 |
ファイルや大きなテキストを読み取るための、その他のヘルパーメソッドを以下に示します。
ヘルパーメソッド | 説明 |
public final byte[] getFile(Integer fileId) | こちらのメソッドは、FileUploadParameterにより記述されたファイルの読み取りに使用することができます。イベントは、パラメーター内に設定する必要があります。FileUploaderParameterのコンストラクターを使用して設定することも可能です。ファイルがアップロードされ、Yellowfinのリポジトリデータベースに保存された後、このイベントで値ローダーがトリガーされます。これは、ファイル内のデータに基づくパラメーターを読み込み/削除をするために使用することができます。 |
public final String getText(Integer textId) | これは、Yellowfinリポジトリデータベースに保存されているCLOBsを読み取る以外、getFileと類似しています。 |
動的パラメーターオプションは、ParameterValueLoaderの応答オブジェクトです。これは、開発者がフロントエンドに表示したいすべてが含まれていなくてはいけません。これには、6つの項目を追加することができます。
動的パラメーターオプション | 説明 |
public void addPanel(String dynamicKey, ParameterPanel panelObject) | トリガーされたイベントのひとつが、メニューに新しいパネルの追加を要求する場合は、こちらに追加することができます。フロントエンドは、パネル定義をユーザーインターフェイスに変換します。 dynamickeyは、現在そのキーを使用している任意のオブジェクトを削除するために使用されるとともに、このパネルをキーとタグ付けすることで、将来的に削除することができます。 |
public void addSection(String dKey, String panelKey, ParameterSection sec) | クライアントサイドパネルコレクションの一部として既に存在するパネルにセクションを追加することができます。dKeyは動的キーであり、現在そのキーを使用している任意のオブジェクトを削除するために使用されるとともに、このセクションをキーとタグ付けすることで、将来的に削除することができます。panelKeyは、こちらのセクションに追加されるキーでなくてはいけません。 |
public void addParameter(String dKey, String panelKey, String secKey, Parameter parameter) | 既存のセクション/パネルの組み合わせにパラメーターを追加することができます。dKeyは動的キーであり、現在そのキーを使用している任意のオブジェクトを削除するために使用されるとともに、このパラメーターをキーとタグ付けすることで、将来的に削除することができます。panelKeyとsecKeyは、こちらのパラメーターに追加するパネルとセクションのキーでなくてはいけません。 |
public void addValue(String property, CustomValue<?> value) | ユーザーが選択することのできる単一のオプションを、DynamicParameterOptionsに追加します。プロパティは、値を表示するパラメーターに対応します。 |
public void setValues(Map<String, List<CustomValue<?>>) | DynamicParameterOptionsに現在設定されている値を上書きます。 |
public void addKeyToRemove(String key) | クライアントサイドパネルコレクションから削除するために、パラメーター/セクション/パネルのキーを追加します。対応するメソッドを使用して追加された任意のパラメーター、セクション、パネルは、削除されるキーも追加します。 |
フィールドを表すclassです。このclassのインスタンスは、フィールドのマッチングのために、ユーザーインターフェイスウィジェットで使用されます。
public FieldObject(String id, String keyType, String name, FieldObjectDataType dataType)