参加
最後オンライン
最近の投稿
WDJに投稿されました 続きを読む

このトピックでは、ポップアップ処理を取り上げて、そのプログラミング方法を説明します。

Confirmation DialogはWDJ標準ライブラリに組み込まれていますので、そのまま利用可能です。

プログラムの構造は主にいかのようになります。

  1. Yes, Noに該当するevent handler処理を記述しておく
  2. Confirmation Dialogを作成
  3. Yes, Noに該当するevent handlerを定義す
  4. 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();

WDJに投稿されました 続きを読む

このトピックは編集中です)

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を指定すす

 

WDJに投稿されました 続きを読む

入力補助機能として検索ヘルプまたは入力値提案を実装することができます。

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に投稿されました 続きを読む

このトピックでは、WDJ開発における各基本UIエレメントを取り上げて説明します。(このトピックは編集中です。)

用途 
他のUIエレメントのラベルとして表示される。
関連付けのUIエレメントのプロパティ「state」が「required」になっている場合、必須マークが表示される。
主要プロパティ

プロパティ設定可能値説明
labelForUIエレメントID関連付けUIエレメントのIDを設定
designemphasized light standard強調表示に設定 「:」なしに設定 基本表示
textテキスト関連付けUIエレメントのIDを設定

Web DynproのValue Help
① Simple Value Selector(SVS)
② Extended Value Selector(EVS)
③ Object Value Selector(OVS)
help.sap.com - Value Help Tutorials

EPに投稿されました 続きを読む

このトピックでは、例を取り上げて手順に従ってポータルロールの作成方法を説明します。

1.ロールを新規作成

コンテキストメニューで「New」-「Role」を選択

2.ロールの属性を入力

ロールの名前、IDなどの属性を入力します。

3.ロールの作成を完了

4.ロールを編集

5.ワークセットをロールに追加

対象のワークセットをロールにコピーします。ロールは階層構造をもてるため、なかに自由にサブフォルダを作成することができます。

6.もう一つのワークセットを追加しておく

7.EntryPointをTrueにしておく

テストのため、上記に作製したロールをAdministratorに割り当てておきます。

Administratorでログインして、割り当てられたロールの表示を確認します。

EPに投稿されました 続きを読む

このトピックでは、例を取り上げて手順に従ってワークセットの作成方法を説明します。

1.ワークセットを新規作成

コンテキストメニューで「New」-「Workset」を選択

2.ワークセットの属性を入力

ワークセットの名前、IDなどの属性を入力します。

3.ワークセットの作成を完了

4.ワークセットを編集

5.ページをワークセットに追加

ページやiViewをワークセットに追加します、ワークセットは階層構造を取れますので、必要に応じて中にフォルダを作成することができます。

6.ワークセットの編集を完了

もう一つのワークセットを作成しておきます。

EPに投稿されました 続きを読む

このトピックでは、例を取り上げて手順に従ってページの作成方法を説明します。

1.ページを新規作成

コンテキストメニューで「New」-「Page」を選択

2.ページの属性を入力

ページの名前、IDなどの属性を入力します。

3.ページのテンプレートを選択

例では「WebDynpro Proxy Page」にします。

4.ページのレイアウトを選択

例では「T-Layout」にします。

5.ページの作成を完了

5.ページのコンテンツを編集

6.iViewをページにコピー

 

EPに投稿されました 続きを読む

このトピックでは、例を取り上げて手順に従ってiViewの作成方法を説明します。

コンテキストメニューで「New」-「iView」を選択

例では「Web Dynpro Java Applicaiton」から作成するようにします。

ポータルが動くアプリケーションサーバと別のアプリケーションサーバ上のアプリケーションを組み込むことも可能ですが、例では「Local」にします。

対象のWeb Dynpro Javaアプリケーションを選択します。例では統合ワークリストの一覧表示画面の「UWL」を指定します。

iViewの名前、IDなどの属性を入力します。

「UWL」のほかに、統合ワークリストの個人表示設定画面とユーザ情報表示画面のアプリをそれぞれiViewとして作成しておきます。

EPに投稿されました 続きを読む

このトピックでは、 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();
          }
  }

 

EPに投稿されました 続きを読む


(このトピックは編集中です)

委譲のアクション

委譲ユーザの選択

UMEのSimpleSearch機能が使用されているため、動きが以下のようになります。

  • アクティブでないユーザも検索されます
  • 会社による制限は機能しません

代理ルールの設定

代理ルールに関するメニューが表示されるには、下記の二つのことが発生することが必要です。

  • 代理ルールが存在すること
  • UWL Cacheに代理されたアイテムがあること

代理ユーザの検索

アクティブなユーザのみが検索されます。