intra-mart Accel Platform イベントナビゲータ 開発ガイド 初版 2013-07-01

ナビゲート結果のリンクにステータスを表示する

ナビゲート結果のリンクにステータスを表示することができます。

このプロバイダが1つ以上設定されている場合、「ナビゲート結果」画面のリンク一覧のカラムに「状態」が表示されます。

以下の例は、イベントナビゲータ IM-Workflow アドオンにサンプルとして提供されている内容を記載しています。
  • IM-Workflow 連携されたリンクに対して、ログインしているユーザが申請中である場合に、申請済のステータスを返却しています。

  1. プロバイダクラスを作成します。

    jp.co.intra_mart.foundation.navigator.LinkPageStatusProviderを実装したクラスを作成します。

    ステータスの判定を行わない場合は、nullを返却します。
    ステータスに設定する値は、多言語を意識してコーディングする必要があります。
    package jp.co.intra_mart.foundation.navigator.workflow;
    
    import jp.co.intra_mart.foundation.navigator.EventNavigatorException;
    import jp.co.intra_mart.foundation.navigator.LinkPageInfo;
    import jp.co.intra_mart.foundation.navigator.LinkPageStatus;
    import jp.co.intra_mart.foundation.navigator.LinkPageStatusProvider;
    import jp.co.intra_mart.foundation.workflow.application.general.ProcessedActvMatterList;
    import jp.co.intra_mart.foundation.workflow.application.general.condition.ListSearchCondition;
    import jp.co.intra_mart.foundation.workflow.application.general.condition.OperatorType;
    import jp.co.intra_mart.foundation.workflow.application.model.column.ActvMatterPullBackType;
    import jp.co.intra_mart.foundation.workflow.application.model.condition.ProcessedAuthCondition;
    import jp.co.intra_mart.foundation.workflow.exception.WorkflowException;
    import jp.co.intra_mart.system.navigator.workflow.message.NaviCaption;
    
    /**
     * ワークフロー申請状態チェック(サンプル)
     * @author INTRAMART
     * @version 8.0.0
     * @since 8.0.0
     */
    public class SampleWorkflowLinkPageStatusProvider implements LinkPageStatusProvider {
    
        /**
         * ワークフロー申請が申請済みかどうか判定します。
         * @param userCd ユーザコード
         * @param linkPageInfo リンクページ情報
         * @return 申請状態
         * @throws EventNavigatorException エラーが発生した場合にスローされます。
         */
        public LinkPageStatus getStatus(final String userCd, final LinkPageInfo linkPageInfo) throws EventNavigatorException {
    
            if (WorkflowLinkPageConst.WORKFLOW_URL.equals(linkPageInfo.getUrl())) {
    
                // 申請されているか判定
                try {
    
                    // フローIDを取得
                    final String flowId = linkPageInfo.getParamValue(WorkflowLinkPageConst.PARAM_NAME_FLOW_ID);
    
                    // 検索条件
                    final ProcessedAuthCondition condition = new ProcessedAuthCondition();
                    condition.setApplyFlg("1");
    
                    final ListSearchCondition<ActvMatterPullBackType> condition2 = new ListSearchCondition<ActvMatterPullBackType>();
                    condition2.addCondition(ActvMatterPullBackType.FLOW_ID, flowId, OperatorType.EQ);
    
                    // 判定
                    final ProcessedActvMatterList processedActvMatterList = new ProcessedActvMatterList(userCd);
    
                    // 1件以上あれば、
                    if (processedActvMatterList.getProcessedListCount(condition, condition2) > 0) {
                        return new LinkPageStatus(NaviCaption.CAP_Z_NAVIGATOR_WORKFLOW_LINK_PAGE_STATUS_APPLIED.get(), "green");
                    } else {
                        return new LinkPageStatus(NaviCaption.CAP_Z_NAVIGATOR_WORKFLOW_LINK_PAGE_STATUS_UNAPPLY.get(), "red");
                    }
                } catch (final WorkflowException e) {
                    throw new EventNavigatorException(e);
                }
            }
            return null;
        }
    
    }

  2. WEB-INF/plugin フォルダに任意のディレクトリを作成します。

  3. 作成したディレクトリにplugin.xmlを作成します。

  4. 作成したplugin.xmlを以下のように定義します。

    <?xml version="1.0" encoding="UTF-8"?>
    <plugin>
       <extension point="jp.co.intra_mart.foundation.navigator.provider">
          <providers
             name="Sample Provider"
             id="jp.co.intra_mart.foundation.navigator.provider.sample"
             version="8.0"
             rank="100">
             <link-page-status-provider class="jp.co.intra_mart.foundation.navigator.workflow.SampleWorkflowLinkPageStatusProvider"/>
          </providers>
       </extension>
    </plugin>

コラム

プロバイダは複数設定することが可能です。
PluginManagerによる設定順序ルールに基づき、上位のプロバイダから処理を行い
最初にステータスが取得できたプロバイダの値を利用します。