ダイアログボックスで自動化スクリプトを実行する方法
Maximoのアプリケーションではメインのフォームの他にダイアログボックスを作成することができます。しかし、ダイアログボックスで何らかのコードを実行させるにはJavaカスタマイズが必要でした。JavaカスタマイズはMaximoで最も自由度の高いツールですが、EARの再デプロイなど開発の複雑さが難点となります。Maximo V7.6.1以降では、自動化スクリプトの機能拡張によりダイアログボックスでのコード実行がより簡単になりました。
ダイアログボックスとはメインの画面とは別にユーザーの入力を促すウィンドウのことを指します。Maximoでダイアログボックスを作成するにはアプリケーションXMLを直接編集する必要があります。XMLをインポートした後には、アプリケーション・デザイナーによりGUIから変更可能です。アプリケーションXMLをダウンロードし以下のようなダイアログボックスを追加します。
<dialog id="dialog_sample" label="Sample dialog box" datasrc="MAINRECORD" savemode="ONUNLOAD"> <section id="dialog_sample_section" /> <buttongroup id="dialog_sample_btngrp"> <pushbutton default="true" id="dialog_sample_btn1" label="OK" mxevent="dialogok"/> <pushbutton id="dialog_sample_btn2" label="Cancel" mxevent="dialogcancel"/> </buttongroup> </dialog>
インポート後にアプリケーション・デザイナーで上記のダイアログボックスを開くと、以下のように表示されるはずです。
XMLのdialog要素に使用される属性を簡単に説明します。ダイアログボックスの範囲で指定されるオブジェクト(レコード)はdatasrc、relationshipのどちらかに入力します。
属性名 説明 id ダイアログのID。すべての要素でユニークにする必要があります。 label ダイアログのタイトル。 datasrc 値にMAINRECORDと指定することでアプリケーションで選択中のレコードがダイアログに指定されます。 relationship 値に関係名を指定することで、呼び出し元から関係を元にレコードが検索されダイアログに指定される。関係名はデータベースの構成アプリケーションで追加可能です。 savemode ダイアログを開くとき閉じるときにレコードを保存します。ONLOADの場合開いたときに、UNLOADの場合閉じたときに、ONUNLOADの場合、両方のときに保存されます。 beanclass Javaカスタマイズのみ有効です。psdi.webclient.system.beans.DataBeanを継承してexecute()をオーバーライドしたクラスを指定します。
ボタングループのmxeventにdialogokとdialogcancelがそれぞれ指定されていることに気づくかと思います。dialogokの場合はsavemodeやBeanクラスのexecute()などが実行されますが、dialogcancelの場合は実行されずにダイアログが閉じます。dialogcloseとdialogcancelは多少の差はあれど、効果は同じです。
作成したダイアログボックスをアプリケーションで表示するためには、プッシュボタンか署名オプションの設定が必要です。プッシュボタンの場合、アプリケーションの任意の場所にmxevent="dialogboxのID"を設定したボタンを作成するだけで呼び出すことができます。
署名オプションを設定すれば、アクションの選択メニューまたはツールバーから呼び出すことが可能です。以下のようにダイアログボックスのIDと同じ署名オプションをアプリケーション・デザイナーから追加します。アクションの選択メニューに表示したい場合は、同じくアプリケーション・デザイナーより追加できます。署名オプションを有効化するには、セキュリティ・グループより行うことができます。
非永続オブジェクトを使用してダイアログの実行時に自動化スクリプトを実行する方法
非永続オブジェクトにオブジェクト起動の自動化スクリプトを作成することで、ダイアログを開いたときまたは閉じたときにスクリプトを実行させることができます。ダイアログを開いたときにスクリプトを実行するにはオブジェクト起動で値の初期化イベントを指定します。閉じるときは同様にオブジェクト起動の保存時を指定します。それぞれBeanクラスでは前者がsetup()、後者がexecute()に相当します。
では例として、作業指示書の複数の資産、ロケーション、CIにある進捗のマーク付けをすべて一括でチェックするダイアログを作成したいと思います。まずは以下のようにデータベースの構成アプリケーションより、非永続のオブジェクトを作成します。こちらが自動化スクリプトの対象となります。
属性の例はこちらです。CLEARがtrueのときは進捗マーク付けをすべてクリアします。
自動化スクリプトを作成します。自動化スクリプト・アプリケーションのアクションの選択メニューから作成 > オブジェクト起動ポイントを選択します。
スクリプト名とスクリプト言語をjython(python)に指定して次へ進みます。
スクリプトの内容を以下のように作成し、保存します。
mbo = mboset.getMbo(0) value = not mbo.getBoolean('clear') malcset = mbo.getOwner().getMboSet('MULTIASSETLOCCI') malc = malcset.moveFirst() while malc is not None: malc.setValue('progress', value) malc = malcset.moveNext()
最後にダイアログボックスをアプリケーションに追加します。以下のXMLをWOTRACKアプリケーションに追加してインポートします。
<dialog id="dialogactnp" label="Dialog action NP" relationship="DIALOGACTNP" savemode="ONUNLOAD"> <section id="dialogactnp_sec"> <statictext align="left" id="dialogactnp_1" label="Update all progress in MULTIASSETLOCCI"/> <checkbox dataattribute="clear" id="dialogactnp_2"/> </section> <buttongroup id="dialogactnp_btngrp"> <pushbutton default="true" id="dialogactnp_btn1" label="OK" mxevent="dialogok"/> <pushbutton id="dialogactnp_btn2" label="Cancel" mxevent="dialogcancel"/> </buttongroup> </dialog>
最後に署名オプション等の追加を行い、正しく設定できた場合、以下のように実行可能になります。
アクションを使用してダイアログの実行時に自動化スクリプトを実行する方法
永続オブジェクトが対象になる場合や、CLEARなどのオプションが不要な場合はアクション起動ポイントからスクリプトを実行することができます。こちらの方法はアクション起動ポイントの自動化スクリプトを作成し、アクションをプッシュボタンに割り当てます。スクリプト内でservice.closeDialog()を実行することによってダイアログを閉じます。これで上記で行った方法と同様に自動化スクリプトを実行することができます。
上記の例と同様に進捗のマーク付けを一括チェックするスクリプトを作成します。今回は非永続オブジェクトの作成は不要です。その代わり値は常にtrueで埋めることになります。自動化スクリプトを、自動化スクリプト・アプリケーションのアクションの選択メニューから作成 > アクション起動ポイントを選択します。
スクリプト名とスクリプト言語をjython(python)に指定して次へ進みます。スクリプトの内容を以下のように作成し、保存します。
malcset = mbo.getMboSet('MULTIASSETLOCCI') malc = malcset.moveFist() while malc is not None: malc.setValue('progress', 1) malc = malcset.moveNext() service.closeDialog()
最後にダイアログボックスをアプリケーションに追加します。以下のXMLをWOTRACKアプリケーションに追加してインポートします。
<dialog id="dialogact1" label="Dialog action" datasrc="MAINRECORD" savemode="ONUNLOAD"> <section id="dialogact1_sec"> <statictext align="left" id="dialogact1_1" label="Update all progress in MULTIASSETLOCCI"/> </section> <buttongroup id="dialogact1_btngrp"> <pushbutton default="true" id="dialogact1_btn1" label="OK" mxevent="DIALOGACT"/> <pushbutton id="dialogact1_btn2" label="Cancel" mxevent="dialogcancel"/> </buttongroup> </dialog>
次にプッシュボタンに割り当てたアクションを有効にするために署名オプションを追加します。アクション名と同じオプション名を指定し、高度な署名オプションで以下のように選択することでこのアプリケーション内でアクションが有効になります。
最後にアクションの選択メニュー等の追加を行い、正しく設定できた場合、以下のように実行可能になります。
ダイアログボックスでのコード実行は最後までJavaカスタマイズが必要とされる部分でしたが、V7.6.1からは自動化スクリプトの大幅な機能拡張により実現が可能になりました。自動化スクリプトのservice.webclientsession()ではより高度なUI操作も可能です。自動化スクリプトで実装することで、すべての構成をデータベースに一元化することもでき、ロジック変更時の可用性も上がります。今までダイアログを実装してこなかった方にもおすすめです。