入力補助機能として検索ヘルプまたは入力値提案を実装することができます。
単純型検索ヘルプ
UIエレメント「DropDownByKey」を利用して実装する。標準設定によって項目数が50を超える場合、ポップアップ検索ヘルプとして表示されます。
該当設定方法は「RadioButtonGroupByKey」も同一です。
静的設定
固定値で項目一覧を設定する場合のみ使用します。
UIエレメント「DropDownByKey」のプロパティ「selectedKey」にマッピングされているコンテキストアトリビュートのタイプにシンプルタイプを設定して、「Enumeration」項目に項目一覧を追加する。
動的設定
値を動的に設定する場合、使用する。
UIエレメント「DropDownByKey」のプロパティ「selectedKey」にマッピングされているコンテキストアトリビュートに対してコーディング処理を行う。
該当ロジックはコンテキストを定義したコントローラーに実装する。
※コンテキストを参照しているコントローラーに実装した場合、「must not modify the datatype of a mapped attribute」エラーが発生する。
// コンテキストからModifiableSimpleValueSet オブジェクトを取得
com.sap.typeservices.IModifiableSimpleValueSet<String> valueSet =
wdContext.currentHeader01Element().getAttributePointer(IPublicContract006Comp.IHeaderElement.CATEGORY).
getAttributeInfo().getModifiableSimpleType().getSVServices().getModifiableSimpleValueSet();
// ESまたはBAPIのドロップダウンを設定
List<Category> list = zprocessInit.getT_Category();
for(Category category : list ) {
valueSet.put(category.getKey(), category.getText());
}
// ドロップダウンの初期値を設定する場合
wdContext.currentHeaderElement().setCATEGORY(list.get(0)); 複合機能型検索ヘルプ
検索条件付きの検索機能を表す。複合機能型検索ヘルプはWDJのObject Value Selector(OVS)機能を利用した共通部品として実装され、
各業務画面から利用します。
検索用のヘルプ標準部品を利用
OVSは検索で使用するノードと処理ロジックだけ追加することで簡単に検索ヘルプを追加することができます。
自動生成されるOVSで使用する検索条件用ノードと検索結果用ノードは用意する必要があります。
・OVS設定処理ロジック
OVS用のノードとOVSリスナーを利用してOVSを設定します。
// 検索ヘルプを設定するコンテキスト
com.sap.tc.webdynpro.progmodel.api.IWDAttributeInfo[] ovsStartUpAttributes
= {wdContext.nodeHead().getNodeInfo().getAttribute(IPrivateOVSView.IHeadElement.PROCESS_TYPE)};
// OVSの処理リスナー (クラス定義必要)
com.sap.tc.webdynpro.progmodel.api.IWDOVSContextNotificationListener listener
= new TestOVSContextNotificationListener ();
// OVSの設定処理
com.sap.tc.webdynpro.progmodel.api.WDValueServices.addOVSExtension(
"TestOVS", // OVS名称ー任意
ovsStartUpAttributes, // 検索ヘルプ設定対象
wdContext.nodeInput(), // 検索条件ノード
wdContext.nodeOutput(), // 検索結果ノード
listener // リスナーオブジェクト
);
・OVSリスナークラス定義
インタフェースIWDOVSContextNotificationListenerを実装してOVSの実行時呼び出されるクラスを定義し、OVSの設定で利用される。
private class TestOVSContextNotificationListener implements
com.sap.tc.webdynpro.progmodel.api.IWDOVSContextNotificationListener{
// OVSの初期検索条件の値設定ロジック
public void applyInputValues(com.sap.tc.webdynpro.progmodel.api.IWDNodeElement applicationNodeElement,
com.sap.tc.webdynpro.progmodel.api.IWDNodeElement queryInputNodeElement) {
queryInputNodeElement.setAttributeValue(
IPublicTest04Comp.IInputElement.PROCESS_TYPE,
applicationNodeElement.getAttributeValue(IPrivateOVSView.IHeadElement.PROCESS_TYPE));
}
// 検索処理の実装
public void onQuery(com.sap.tc.webdynpro.progmodel.api.IWDNodeElement queryInputNodeElement,
com.sap.tc.webdynpro.progmodel.api.IWDNode queryOutputNode) {
// 検索ロジック
for(int i = 10; i < 20; i++) {
IWDNodeElement element = queryOutputNode.createAndAddElement();
element.setAttributeValue(
IPublicTest04Comp.IOutputElement.PROCESS_TYPE, "11" + i);
element.setAttributeValue(
IPublicTest04Comp.IOutputElement.PROCESS_TYPE_NAME, "テストタイプ1111" + i);
}
}
// 検索結果の行を選択した後の処理
public void applyResult(com.sap.tc.webdynpro.progmodel.api.IWDNodeElement applicationNodeElement,
com.sap.tc.webdynpro.progmodel.api.IWDNodeElement queryOutputNodeElement) {
// start copying the attributes
applicationNodeElement.setAttributeValue(
IPrivateOVSView.IHeadElement.PROCESS_TYPE,
queryOutputNodeElement.getAttributeValue(IPublicTest04Comp.IInputElement.PROCESS_TYPE));
}
検索用のヘルプカスタム部品を作成
IWDOVSProviderとIWDOVSDialogを実装したクラスを利用して別ウィンドウとビューを持つOVS画面を作成できます。
・OVS設定処理ロジック
カスタム部品は別のウィンドウとビューを保持するので、OVS用のノードとOVSリスナーの代わりにOVSプロバイダ及びOVSダイアログを利用する。
設定ロジックは一般的にコンポーネントコントローラーまたはカスタムコントローラーのwdDoInitに実装します。
// 検索ヘルプを設定するコンテキスト
com.sap.tc.webdynpro.progmodel.api.IWDAttributeInfo[] ovsStartUpAttributes
= {wdContext.nodeHead().getNodeInfo().getAttribute(IPrivateOVSView.IHeadElement.PROCESS_TYPE)};
// OVSプロバイダ (クラス定義必要)
com.sap.tc.webdynpro.progmodel.api.IWDOVSProvider provider = new TestOVSProvider();
// OVSの設定処理
com.sap.tc.webdynpro.progmodel.api.WDValueServices.addOVSExtension(
"TestOVS", // OVS名称ー任意
ovsStartUpAttributes, // 検索ヘルプ設定対象
provider, // OVSプロバイダ
null
);
・OVSプロバイダ及びOVSダイアログクラス定義
インタフェースIWDOVSProviderを実装したOVSプロバイダはOVSダイアログ情報を保持しています。
private class TestOVSProvider implements IWDOVSProvider {
OVSDialg dialog;
IWDOVSControl ovsControl;
// OVSウィンドウを生成して返す
@Override
public IWDOVSDialog createOVSDialog(IWDOVSControl ovsControl) {
dialog = new OVSDialg();
this.ovsControl = ovsControl;
return dialog;
}
// 明示的にウィンドウを閉じる場合、使用
public void closeWindow() {
dialog.closeWindow();
}
// OVSコントロール情報が必要な場合、使用
// OVSを呼び出したアトリビュート情報等
public IWDOVSControl getControl() {
return this.ovsControl;
}
}
インタフェースIWDOVSDialogを実装したOVSダイアログはOVSウィンドウのオブジェクトを持っている。
private class OVSDialg implements IWDOVSDialog {
IWDWindow window;
// ウィンドウを「閉じる」ボタンを押すタイミングで呼び出される
@Override
public void exit() {
// TODO Auto-generated method stub
}
// OVSヘルプとして使用するウィンドウを返す
@Override
public IWDWindow getWindow() {
IWDWindowInfo windowInfo =
(IWDWindowInfo)wdComponentAPI.getComponentInfo().findInWindows("TestCompWindow");
window = wdComponentAPI.getWindowManager().createModalWindow(windowInfo);
return window;
}
// ウィンドウを閉じる処理として明示的にウィンドウを閉じる場合、使用
public void closeWindow() {
window.destroyInstance();
}
} 入力値提案
データの一部を入力すると入力値にヒットするデータが一覧として表示されます。
UIエレメント「InputField」の「suggestValues」を「true」に設定してマッピングしたコンテキストアトリビュートには「単純型検索ヘルプ」と同一のコディングまたはシンプルタイプマッピングを行います。