はじめに
システム開発部所属のO.Yです。
本日はintra-martのワークフローとintra-mart Accel Collaboration(以下iAC)の機能連携について紹介します。
intra-martではIM-LogicDesignerで作成したロジックフローを、ワークフローの拡張機能として使用することができます。
document.intra-mart.jp
今回はユーザプログラムに属するリソースの【案件終了処理】を使用して、案件の最終承認をトリガーとして自動でスケジュール登録を行うフローを作成します。
1.ワークフローの作成
intra-martでワークフローを作成する手段はいくつかありますが、 今回はAccelStudioのベーステンプレート「シンプルなワークフロー」を使用して作成します。
AccelStudioでのワークフローの作成方法について本記事では割愛しますので、必要であれば以下のチュートリアルガイドを参考にしてください。
document.intra-mart.jp
以下のキャプチャの通り、最低限の入力項目がある申請画面を作ります。
後述するロジックフローのスケジュール登録タスクで必要となる項目を、入力項目として用意しています。

2.案件終了処理用ロジックフローの作成
次にIM-LogicDesignerを使用してロジックフローを作成します。
1で作成したAccelStudioのアプリの詳細画面で「リソースを追加」-「ロジックを新規作成」-「ロジックフロー」の順で選択して新規ロジックフローを作成します。
2-1. 入出力設定
まずは入出力設定を行います。
以下のドキュメントを参考に案件終了処理に対応した入力変数を定義し、案件情報を受け取れるようにします。
document.intra-mart.jp
処理に必要な変数のみ定義すれば問題ありませんが、この際にオブジェクトの構造は変更しないようにしてください。
出力設定も同様に上記のドキュメントを参考に設定します。
2-2. 最終処理結果ステータスによる分岐
ここからロジックフロー本体の作成に入りますが、1つポイントがあります。
【案件終了処理】は最終承認の完了だけでなく、否認や取止めなどで処理が終了した場合にも実行されます。
今回は最終承認が完了した場合のみ処理を実行したいため、ロジックフロー内で最終処理結果ステータスによる分岐を行います。
ここで先ほど設定した入力変数のimwMatterEndProcessオブジェクト配下のlastResultStatusの値を使用します。
分岐タスクの条件式に以下のEL式を設定します。
${$input.imwMatterEndProcess.lastResultStatus=="mattercomplete"}
2-3. 案件情報の取得
次に案件情報を取得します。
今回はIM-Repositoryのエンティティを用いてワークフローを作成しているため、【エンティティデータの取得】タスクを使用して案件情報を取得します。
入力値となるuserDataIdには2-1.入出力設定で入力値に設定したimwProcessCommonオブジェクト配下のuserDataIdを使用します。
2-4. 開始日と終了日の取得
次にスケジュール登録タスクの入力値として必要な開始日と終了日を取得する処理を実装します。
今回の申請フォームの構成上、有給取得日と開始時刻、終了時刻を別々に扱っているため、時刻情報を含めた有給取得開始日と有給取得終了日を取得する必要があります。
JavaScript定義を新規作成して、以下の入出力設定とスクリプトで処理を行います。

function run(input) { const startTime = input.start_time; const endTime = input.end_time; const holidayAcquisitionDate = input.holiday_acquisition_date; function combineDateAndTime(date, time) { const [hours, minutes] = time.split(':'); const newDate = new Date(date); newDate.setHours(Number(hours)); newDate.setMinutes(Number(minutes)); return newDate; } return { startDate: combineDateAndTime(holidayAcquisitionDate,startTime), endDate: combineDateAndTime(holidayAcquisitionDate,endTime) }; }
2-5. スケジュール登録タスク
iACの【スケジュール登録タスク】を配置し、必要なパラメータの設定を行います。
以下に記載されているスケジュール登録タスクで設定可能な入力値に対してマッピングを行います。
document.intra-mart.jp
必須項目であるtitle(スケジュールのタイトル)については、今回は定数で設定したものを一律で使用します。
また、selectedLocaleId(選択ロケールID)とtimezoneId(タイムゾーンID)については、アカウントコンテキストの値を使用します。
スケジュール登録タスクのマッピングのポイントは、targetUserCd(実行ユーザコード)に、画面で入力された申請者本人のユーザコードを設定している点です。
これは、iACのスケジュールアクセス権についての考慮を省略するためです。
代案としては、スケジュールアクセス権除外ユーザのロールが付与された専用ユーザを実行ユーザとして設定する方法も考えられます。
2-6. 終了タスク
最後に、2-1.入出力設定で設定した出力値のerrorに、定数で定義したfalse値を設定します。
これは、ロジックの処理が正常に終了したことを示すために必要な設定です。

3.案件終了処理に登録
ここでは、AccelStudioを使用してワークフローを作成していることを前提とします。
IM-BISなどで作成した場合は、別途フロー設定のコンテンツ詳細から設定してください。
1の手順で作成されたアプリ内の「ワークフロー定義」を押下してワークフロー管理画面を開きます。
「フロー設定」-「基本設定」の処理タブにある案件終了処理の歯車ボタンを押下して処理設定画面を開き、「処理を追加」-「ロジックフローを追加」の順で押下して作成したロジックフローを設定します。
以上で、案件の最終承認をトリガーとしてスケジュール登録を実行するワークフローの作成が完了です。
おわりに
案件の最終承認をトリガーとしたスケジュール自動登録フローの作成方法について紹介しました。
ワークフローのリソースには、案件終了処理以外にも案件開始処理や到達処理などがあり、フローの任意のタイミングで処理を実行するように設定できます。
また、IM-LogicDesignerには今回使用したiACタスク以外にも多数のタスクが用意されているため、これらを使用してより機能的なワークフローを作成しましょう!