ナビゲート結果のリンクにステータスを表示する¶
ナビゲート結果のリンクにステータスを表示することができます。このプロバイダが1つ以上設定されている場合、「ナビゲート結果」画面のリンク一覧のカラムに「状態」が表示されます。以下の例は、イベントナビゲータ IM-Workflow アドオンにサンプルとして提供されている内容を記載しています。
IM-Workflow 連携されたリンクに対して、ログインしているユーザが申請中である場合に、申請済のステータスを返却しています。
プロバイダクラスを作成します。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; } }WEB-INF/plugin フォルダに任意のディレクトリを作成します。
作成したディレクトリにplugin.xmlを作成します。
作成した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による設定順序ルールに基づき、上位のプロバイダから処理を行い最初にステータスが取得できたプロバイダの値を利用します。