Maximo ワークフローには、作業指示書が開始日をチェックして条件ノードに到達するスキーマがいくつかあります。現在の日付が開始日より前の場合、作業指示書は「maximo.workorder.update」条件で待機ノードに移動します。そのため、WO の予定日が来ると、WO 追跡に移動して、この WO を手動で保存する必要があります。その後、ワークフローを続行します。それ以外の場合、WO は時間の終わりまでその待機ノードに留まります。
私がやりたいことは、毎日 crontask によってこの更新イベントをトリガーして、適切な日付が来ると WO が自動的に起動するようにすることです。
WO トラッキング アプリケーションの [保存] ボタンのソース コードを調べたところ、MboRemoteSet.save() メソッド呼び出しが何であってもそれがわかりました。いくつかの変更を行ってから、適切な MboSet で save() を呼び出す必要があると想定しました。また、DB には、ワークフローの待機ノードにある WO を追跡する EVENTRESPONSE というテーブルがあることも知っています。私のcrontaskクラスには次のコードが含まれています:
MXServer mxServer = MXServer.getMXServer();
UserInfo userInfo = mxServer.getUserInfo("maxadmin");
woSet = mxServer.getMboSet("WORKORDER", userInfo);
...
String query = "select sourceid as WORKORDERID from EVENTRESPONSE"
+ " where eventname = 'maximo.workorder.update'"
+ " and sourcetable = 'WORKORDER'";
SqlFormat sqf = new SqlFormat("workorderid IN (" + query + ")");
woSet.setWhere(sqf.format());
MboRemote wo;
Date currentDate = new Date();
for (int i = 0; (wo = woSet.getMbo(i)) != null; i++) {
System.err.println(wo.getString("description"));
wo.setValue("CHANGEDATE", currentDate);
}
woSet.save();
workorder.changedate は正常に更新されますが、「maximo.workorder.update」イベントは処理されず、WO は待機ノードにとどまります。
では、maximo.workorder.update を起動するにはどうすればよいでしょうか?