このトピックでは、ポップアップ処理を取り上げて、そのプログラミング方法を説明します。
Confirmation Dialog
Confirmation DialogはWDJ標準ライブラリに組み込まれていますので、そのまま利用可能です。
プログラムの構造は主にいかのようになります。
- Yes, Noに該当するevent handler処理を記述しておく
- Confirmation Dialogを作成
- Yes, Noに該当するevent handlerを定義す
- Confirmation Dialogを表示
サンプルソースは以下です。
// 追加されたイベント(Yesボタンがクリックされたときの動き) public void Yes(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent ) { //@@begin Yes(ServerEvent) logger.infoT("Yes button is clicked."); //@@end } //@@begin createConfDialogWindow() IWDWindowManager winMan = wdComponentAPI.getWindowManager(); IWDControllerInfo viewCtrlInfo = wdComponentAPI.getComponentInfo(). findInViews("WelcomeView").getViewController(); IWDEventHandlerInfo evtHndlr = viewCtrlInfo.findInEventHandlers("Yes"); IWDConfirmationDialog confDialog = winMan.createConfirmationWindow( "本当にいいですか?", evtHndlr, "はい"); evtHndlr = viewCtrlInfo.findInEventHandlers("No"); confDialog.addChoice(evtHndlr, "いいえ"); confDialog.show(); //@@end
画面付きモーダルダイアログ
画面付きポップアップウィンドウとはWDJ部品の中でウィンドウをポップアップとして表示することを指します。
ポップアップウィンドウの制御はコンポーネントコントローラーまたはカスタムコントローラーのに定義すします。
サンプルソースは以下です。
public void openPopup( ) { //@@begin openPopup() if (popup == null) { // ウィンドウ取得 IWDWindowInfo windowInfo = wdComponentAPI.getComponentInfo().findInWindows("PopupWin"); // モダルウィンドウ生成 popup = wdComponentAPI.getWindowManager().createModalWindow(windowInfo); } // ポップアップウィンドウを開く popup.show(); //@@end } ... public void closePopup( ) { //@@begin closePopup() // ポップアップウィンドウを閉じる popup.hide(); //@@end } ... //@@begin others // ローカルウィンドウオブジェクト private IWDWindow popup; //@@end
別画面表示
別画面表示はURLを元に別ブラウザーを開くことを指します。
他のWDJアプリケーションを起動する「IWDDeployableObject」と「WDURLGenerator」を利用して実装します。
サンプルソースは以下です。
// アプリケーションからIWDDeployableObjectを取得 IWDDeployableObject dObject = wdComponentAPI.getApplication().getDeployableObjectPart().getDeployableObject(); // 実行するWDJアプリケーション名を指定 String url = WDURLGenerator.getApplicationURL(dObject.getApplication("Contract00601App")); // 外部ブラウザーで開く IWDWindow window = wdComponentAPI.getWindowManager().createNonModalExternalWindow(url); window.show();
他のWEBアプリケーション起動
同一サーバで存在するServlet等の場合、相対パースでURLを指定し、対象URLにPOST/GETでパラメータを渡す必要がある場合は「WDURLGenerator」を利用してパラメータを渡します。
サンプルソースは以下です。
// Mapでパラメータ値設定 Map<String, Object> urlParameters = new HashMap<String, Object>(); urlParamaters.put("id","1234");// パラメータ生成、文字コードがnullの場合、UTF-8変換
String query = WDURLGenerator.getQueryString(urlParamaters, "Shift-JIS");
// 外部ブラウザーで開く, URL, パラメータ, POST(true)/GET(false)をパラメータ設定
// 想定パースは「/【DCのVendor名】~【DC名】/実行対象」で構成され、DC名に「/」が存在する場合、「~」に変換する。
IWDWindow window = wdComponentAPI.getWindowManager().createNonModalExternalWindow(
"/jp.co.asahikasei~yvw~jee~wm_excel_0001/download", query, true);
window.show();
// 別ウィンドウで開く
IWDWindow window = wdComponentAPI.getWindowManager()
.createNonModalExternalWindow(urlToTargetApp);
// ウィンドウプロパティの設定
window.setWindowSize(800, 480);
window.setWindowPosition(100, 50);
// アドレスバーの削除
window.removeWindowFeature(WDWindowFeature.ADDRESS_BAR);
window.show();
(このトピックは編集中です)
ファイルアップロード
Resource attributeを定義
Contextにタイプcom.sap.ide.webdynpro.uielementdefinitions.ResourceのValue Attributeを追加します。
FileUpload UIを追加する
アップロード後の情報を取得
IWDResource iwdr = (IWDResource)wdContext.getCurrentElement().getAttributeValue("Resource"); logger.infoT(iwdr.getResourceName()); logger.infoT(iwdr.getResourceType().getFileExtension()); logger.infoT(iwdr.getResourceType().getHtmlMime());
ファイルダウンロード
Resource attributeを定義
Contextにタイプcom.sap.ide.webdynpro.uielementdefinitions.ResourceのValue Attributeを追加します。
FileDownload UIを追加
FileDownload UIを追加し、resourceプロパティにResource attribute valueを指定すす
入力補助機能として検索ヘルプまたは入力値提案を実装することができます。
単純型検索ヘルプ
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」に設定してマッピングしたコンテキストアトリビュートには「単純型検索ヘルプ」と同一のコディングまたはシンプルタイプマッピングを行います。
このトピックでは、WDJ開発における各基本UIエレメントを取り上げて説明します。(このトピックは編集中です。)
Label
用途
他のUIエレメントのラベルとして表示される。
関連付けのUIエレメントのプロパティ「state」が「required」になっている場合、必須マークが表示される。
主要プロパティ
プロパティ | 設定可能値 | 説明 |
---|---|---|
labelFor | UIエレメントID | 関連付けUIエレメントのIDを設定 |
design | emphasized light standard | 強調表示に設定 「:」なしに設定 基本表示 |
text | テキスト | 関連付けUIエレメントのIDを設定 |
Value Help
Web DynproのValue Help
① Simple Value Selector(SVS)
② Extended Value Selector(EVS)
③ Object Value Selector(OVS)
help.sap.com - Value Help Tutorials
外部リンク
このトピックでは、例を取り上げて手順に従ってポータルロールの作成方法を説明します。
ポータルロールの作成
1.ロールを新規作成
2.ロールの属性を入力
3.ロールの作成を完了
ポータルロールの編集
4.ロールを編集
5.ワークセットをロールに追加
6.もう一つのワークセットを追加しておく
7.EntryPointをTrueにしておく
ポータルロールの割当
ポータルロールの表示
このトピックでは、例を取り上げて手順に従ってiViewの作成方法を説明します。
1.iViewを新規作成
2.iViewの作成方法を選択
3.アプリケーションサーバを指定
4.アプリケーションを指定
4.iViewの属性を入力
5.iViewの作成を完了
6.その他のiViewを作成しておく
このトピックでは、 UWLサービスのアクセス方法を取り上げて説明します。
UWLサービスの取得
Portal利用
IUWLService uwlService = (IUWLService) WDPortalUtils.getServiceReference(IUWLService.ALIAS_KEY); PortalRuntime.getRuntimeResources().getService(IUWLService.ALIAS_KEY);
JNDI利用
// look up UWL service private IUWLService findService() throws NamingException { Properties env = new Properties(); env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.sapportals.portal.prt.registry.PortalRegistryFactory"); // create initial context InitialContext ctx = new InitialContext(env); // retrieve UWL service IUWLService uwlService = (IUWLService) ctx.lookup("/broker/services/" + IUWLService.ALIAS_KEY); return uwlService; }
ワークアイテムの走査
public void retriveItems() {try {
// look up UWL service
IUWLService uwlService = findService();
// define session timeout period
final int sessionIdleTimeout = 60;
// create context
UWLContext uwlContext = new UWLContext();
// find logged in user.
IUser user = //TODO Get the user for whom the items are to be retrieved.
uwlContext.setUser(user);
uwlContext.setLocale(Locale.getDefault());
// begin session IUWLSession uwlSession;
uwlSession = uwlService.beginSession(uwlContext, sessionIdleTimeout);
uwlContext.setSession(uwlSession);
IUWLItemManager itemManager = uwlService.getItemManager(uwlContext);
QueryResult result = itemManager.getItems(uwlContext, null, null);
ItemCollection items = result.getItems();
Item item = null;
for (int i = 0; i < items.size(); i++) {
item = items.get(i);
// item.getSubject() can give you Task's Subject string
// item.getAttribute("taskId").getStringValue() gives you taskId
// (a check for null should be added also to avoid NullPointerException).
Map params = new HashMap();
params.put("taskId", item.getExternalId());
String executionURL = WDURLGenerator.getApplicationURL("sap.com/tc~bpem~wdui~taskinstance", "ATaskExecution", params);
//TODO Add code send mail which contains above URL.
}
} catch (UWLException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
}
}