Accel-Mart Quick チュートリアルガイド 第14版 2023-02-08

9.3. ワークフローの処理時に特定のSlackチャンネルに通知する

ワークフローの案件開始、承認や差戻しによるノード移動、案件終了の際にSlackに通知する業務ロジックを作成する方法を解説します。
この業務ロジックを作成することにより、特定のワークフローの状況をSlackでモニタリングできます。
  • このチュートリアルでは、到達処理と案件終了処理の2種類の業務ロジックを作成します。

  • 以下の画像のように、ワークフローの案件番号・案件名、および、どのユーザが何の処理を行ったかがSlackに通知されます。

    ../../_images/send_message_to_slack_1.png
    図:Slackに送信されるメッセージ(到達処理)
    ../../_images/send_message_to_slack_13.png
    図:Slackに送信されるメッセージ(案件終了処理)

9.3.1. 事前準備

Accel-Mart QuickからSlackにメッセージを送信する」の手順に従って「Bot User OAuth Token」を発行してください。

9.3.2. ワークフローの作成

「Accel-Mart Quick ワークフロー管理者」ロールを持つユーザでSlackと連携するワークフローを作成します。
作成済みのワークフローと連携する場合は、そのワークフローの「IM-BIS-フロー編集」画面を表示してください。
このチュートリアルでは、「簡単なワークフローを作成する」で作成するフローを例に解説します。

9.3.3. 業務ロジック(到達処理)の作成

Slackへメッセージを送信する業務ロジックを作成します。

コラム

業務ロジックの作成は「Accel-Mart Quick アプリケーション管理者」ロールを持つユーザで行ってください。
作成する業務ロジックでは、以下の処理を行います。
  • テンプレートユーザ定義を用いて、Slackに通知するメッセージ文を作成します。

  • 「メッセージ送信」タスクを使用し、作成したメッセージをSlackに送信します。

    ../../_images/send_message_to_slack_2.png
    図:作成する業務ロジック
また、作成する業務ロジックは、以下のタイミングで実行されます。案件が終了するタイミングでは、この次に作成する案件終了処理が実行されます。
  • 申請
  • 再申請
  • 引戻し
  • 承認(案件が終了する場合を除く)
  • 差戻し
  • 案件操作(案件が終了する場合を除く)

9.3.3.1. 到達処理の業務ロジックを新規作成する

  1. 「IM-BIS-フロー編集」画面の「業務ロジック」をクリックします。

    ../../_images/send_message_to_slack_3.png
    図:「IM-BIS-フロー編集」

    コラム

    「業務ロジック」が表示されない場合は、「定義の反映」をクリックしてください。
    また、フォームを編集した場合も必ず「定義の反映」を実行してください。
  2. 「業務ロジック」画面が表示されます。

  3. 「到達処理」の「新規作成」ボタンをクリックし、「業務ロジック登録 - 到達処理」画面を開きます。

    ../../_images/send_message_to_slack_4.png
    図:「基本設定 - 到達処理」
  4. 業務ロジック名を入力し、対象ノードを選択します。
    今回は、「終了」以外のノードに到達した際に業務ロジックを実行するようにしたいので、「終了」以外にチェックを入れます。
    ../../_images/send_message_to_slack_5.png
    図:「業務ロジック登録 - 到達処理」

    コラム

    「終了」ノードに到達する際の処理は、この次に作成する案件終了処理で実装します。
    案件終了処理と重複して処理が実行されてしまわないように、「終了」ノードは到達処理の対象外にします。
  5. 「登録」ボタンをクリックします。

  6. 「ロジックフロー定義編集」画面が表示されます。

9.3.3.2. 定数を追加する

業務ロジックで使用する定数を追加します。
  1. 「ロジックフロー定義編集」画面上部、ヘッダ内の「定数設定」をクリックします。

    ../../_images/send_contract_using_cloudsign_10.png
    図:「ロジックフロー定義編集」
  2. 「定数設定」ダイアログが表示されます。「定数を追加」をクリックします。

    ../../_images/send_contract_using_cloudsign_11.png
    図:「定数設定」
  3. 下記の定数を追加します。

    定数ID 定数値 説明
    channel
    (メッセージを送信するSlackチャンネル)
    Accel-Mart QuickからSlackにメッセージを送信する」でアプリを追加したチャンネルのチャンネルID、または、チャンネル名を指定します。
    token
    (Bot User OAuth Token)
    Accel-Mart QuickからSlackにメッセージを送信する」で発行した「Bot User OAuth Token」を指定します。
    authUserName
    ${$input.mailReplaceMap.Auth_User_Nm}
    前ノードを処理したユーザの名前を取得するために使用します。
    beforeProcessName
    ${$input.mailReplaceMap.Before_Proc_Nm}
    前ノードの処理名を取得するために使用します。

9.3.3.3. ユーザ定義タスクを作成する

Slackに送信するメッセージ文を作成するユーザ定義タスクを作成します。
  1. 画面左側のパレットの「ユーザ定義追加」→「テンプレート定義新規作成」をクリックします。

    ../../_images/send_message_to_slack_6.png
    図:テンプレート定義新規作成
  2. ユーザ定義ID、ユーザ定義名を入力します。本チュートリアルでは次のように設定します。

    • ユーザ定義ID:slack_message_template
    • ユーザ定義名:Slack通知メッセージ作成
  3. 任意のユーザカテゴリを「検索」から選択、または、「新規作成」します。

  4. 入力値に初期設定されている値を全削除し、 data<object> の配下に次の値を追加します。

    • authUserName<string>
    • resultStatusName<string>
    • matterName<string>
    • matterNumber<string>
    • total<integer>

    コラム

    total はワークフローで申請された内容をSlackに送信するメッセージに表示する方法を解説するために使用します。
    このチュートリアルでは、例としてフォームの「合計額」という項目をメッセージに表示します。
    total という項目は連携するワークフローに合わせて適宜変更、または、削除してください。
    ../../_images/send_message_to_slack_7.png
    図:作成するテンプレート定義の入力値
  5. 「標準」欄に以下の内容を入力します。初期入力されているテンプレートを上書きしてください。

    <#setting url_escaping_charset="UTF-8">
    ${authUserName}さんが次のワークフロー案件を${resultStatusName}しました。
    案件番号:${matterNumber}
    案件名: ${matterName}
    合計額:${total}円
    

    コラム

    ${XXX} の部分が入力値として渡ってきた値で置換されます。
    テンプレート定義の詳しい説明は「初期サンプルから見るユーザ定義(テンプレート)の詳細」を参照してください。
  6. 「登録」ボタンをクリックします。

  7. テンプレート定義を作成できました。

9.3.3.4. タスクを配置する

業務ロジックで使用するタスクを配置します。
以下の図のように、タスクをつなぎ合わせてください。
「業務データ取得」タスクは初期配置されているものをそのまま使用します。
../../_images/send_message_to_slack_2.png
図:タスクの配置
使用するタスクは以下の通りです。

コラム

タスクを配置する詳しい操作方法は「エレメントを配置する」を参照してください。

コラム

作成したユーザタスクは、作成する際に選択したユーザカテゴリに追加されています。
また、ユーザ定義タスクを含む各タスクはパレット上部の「パレット内検索」を利用して検索できます。
../../_images/send_message_to_slack_8.png
図:パレット内検索

9.3.3.5. タスクのマッピング設定をする

各タスクに入力値として渡す値を設定するため、マッピング設定を行います。

コラム

マッピング設定の詳しい操作方法は「マッピング設定を行う」を参照してください。

  1. 作成したテンプレートユーザ定義を用いて、Slackに送信するメッセージ文を作成します。
    ユーザ定義タスク「Slack通知メッセージ作成(slack_message_template1)」のマッピング設定を以下の通り行います。
    Slack通知メッセージ作成(slack_message_template1)
    始点 終点
    (※コラムに記載) slack_message_template1<object> - data<object> - authUserName<string>
    (※コラムに記載) slack_message_template1<object> - data<object> - resultStatusName<string>
    入力<object> - matterName<string> slack_message_template1<object> - data<object> - matterName<string>
    入力<object> - matterNumber<string> slack_message_template1<object> - data<object> - matterNumber<string>
    business_data_select<object> - formaItemInfo<object> - total<bigdecimal> slack_message_template1<object> - data<object> - total<integer>

    コラム

    authUserName<string> 、および、 resultStatusName<string> は、入力の mailReplaceMap<map> (メール置換文字情報)から取得します。
    mailReplaceMap には、ワークフロー関連のメール(処理依頼メールなど)に使用される置換文字情報が格納されています。
    slack_message_template1 の入力値には、それぞれ以下のEL式を解決した値をマッピングします。
    • ${$input.mailReplaceMap.Auth_User_Nm}authUserName<string>
    • ${$input.mailReplaceMap.Before_Proc_Nm}resultStatusName<string>
    定数を追加する」で定数 authUserNamebeforeProcessName に上記内容を設定しています。
    ただし、そのままマッピングしてもEL式を解決できないため、マッピング関数「 el 」を使用します。
    • EL式の詳細は「EL式」を参照してください。
    • マッピング関数の使い方については「マッピング関数の利用」を参照してください。
    ../../_images/send_message_to_slack_9.png
    図:Slack通知メッセージ作成(slack_message_template1)のマッピング設定

    コラム

    business_data_select<object> は初期状態ではマッピング設定の入力値に設定されていません。
    様々な入力情報の利用」を参考に、マッピング設定の入力値に追加してください。

    コラム

    total には、ワークフローの申請内容から「合計額」の項目を取得してマッピングします。
    このように、到達処理でワークフローの申請内容を取得するには、初期配置されている「業務データ取得」タスクを利用します。
    「業務データ取得」タスクの詳細は、以下を参照してください。
  2. 作成したメッセージ文をSlackに送信します。
    「メッセージ送信(im_slackPostMessage1)」のマッピング設定を以下の通り行います。
    メッセージ送信(im_slackPostMessage1)
    始点 終点
    定数<object> - channel<string> im_slackPostMessage1 - channel<string>
    slack_message_template1<object> - output<string> im_slackPostMessage1 - text<string>
    定数<object> - token<string> im_slackPostMessage1 - token<string>
  3. 以上で到達処理の業務ロジックの設定は完了です。業務ロジックを保存してください。

    コラム

    この段階で業務ロジックをデバッグ実行することをおすすめします。
    デバッグ機能の使い方は「ロジックフローのデバッグ」を参照してください。
    なお、デバッグ実行の際にもSlackにメッセージが送信されますので、注意してください。

9.3.4. 業務ロジック(案件終了処理)の作成

以下に挙げる、案件が終了する操作を行ったタイミングで実行される業務ロジックを作成します。
  • 最終承認

  • 取止め

  • 否認

  • 案件操作(終了ノードへの移動)

    コラム

    「取止め」「否認」が行われた場合、到達処理は実行されません。
    「取止め」「否認」の場合にもSlackに通知するために、案件終了処理を使用します。
作成する業務ロジックは、到達処理とほぼ同様の内容です。
../../_images/send_message_to_slack_10.png
図:作成する業務ロジック

9.3.4.1. 案件終了処理の業務ロジックを新規作成する

  1. 「業務ロジック」画面を表示します。

  2. 「案件終了処理」の「新規作成」ボタンをクリックし、「業務ロジック登録 - 案件終了処理」画面を開きます。

    ../../_images/send_message_to_slack_11.png
    図:「基本設定 - 案件終了処理」
  3. 業務ロジック名を入力し、「登録」ボタンをクリックします。
  4. 「ロジックフロー定義編集」画面が表示されます。

9.3.4.2. 定数を追加する

業務ロジックで使用する定数を追加します。下記の定数を追加してください。
定数ID 定数値 説明
channel
(メッセージを送信するSlackチャンネル)
Accel-Mart QuickからSlackにメッセージを送信する」でアプリを追加したチャンネルのチャンネルID、または、チャンネル名を指定します。
token
(Bot User OAuth Token)
Accel-Mart QuickからSlackにメッセージを送信する」で発行した「Bot User OAuth Token」を指定します。
authUserName
${$input.imwMatterEndProcess.mailReplaceMap.Auth_User_Nm}
前ノードを処理したユーザの名前を取得するために使用します。
lastResult
${$input.imwMatterEndProcess.mailReplaceMap.Last_Result}
最終処理結果を取得するために使用します。

9.3.4.3. ユーザ定義タスクを作成する

Slackに送信するメッセージの内容を到達処理と異なるものにするため、テンプレート定義を新規作成します。
メッセージの内容が共通でも問題ない場合は、到達処理で作成したテンプレート定義をそのまま使用してください。
  1. ユーザ定義タスクを作成する」の手順を参考に、テンプレート定義を作成します。

    コラム

    「ユーザ定義編集」で「ユーザ定義IDを新しく割り当てて複製する」にチェックを入れると、既存のユーザ定義をコピーしたユーザ定義が作成できます。
  2. ユーザ定義ID、ユーザ定義名を入力します。本チュートリアルでは次のように設定します。

    • ユーザ定義ID:slack_message_template_matter_end
    • ユーザ定義名:Slack通知メッセージ作成【案件終了】
  3. ユーザカテゴリ・入力値は到達処理で作成したテンプレート定義と同様に設定してください。

  4. 「標準」欄に以下の内容を入力します。初期入力されているテンプレートを上書きしてください。

    <#setting url_escaping_charset="UTF-8">
    ${authUserName}さんが次のワークフロー案件を${resultStatusName}したため、案件が終了しました。
    案件番号:${matterNumber}
    案件名: ${matterName}
    合計額:${total}円
    
  5. 「登録」ボタンをクリックします。

  6. テンプレート定義を作成できました。

9.3.4.4. タスクを配置する

業務ロジックで使用するタスクを配置します。
到達処理の「タスクを配置する」と同様にタスクを配置してください。
「Slack通知メッセージ作成」タスクのみ、「Slack通知メッセージ作成【案件終了】(slack_message_template_matter_end1)」に置き換えてください。

9.3.4.5. タスクのマッピング設定をする

各タスクに入力値として渡す値を設定するため、マッピング設定を行います。
基本的には到達処理の「タスクのマッピング設定をする」と同様ですが、入力の変数名が異なります。
  1. ユーザ定義タスク「Slack通知メッセージ作成【案件終了】(slack_message_template_matter_end1)」のマッピング設定を以下の通り行います。
    Slack通知メッセージ作成(slack_message_template_matter_end1)
    始点 終点
    (※コラムに記載) slack_message_template_matter_end1<object> - data<object> - authUserName<string>
    (※コラムに記載) slack_message_template_matter_end1<object> - data<object> - resultStatusName<string>
    入力<object> - imwMatterEndProcess<object> - matterName<string> slack_message_template_matter_end1<object> - data<object> - matterName<string>
    入力<object> - imwMatterEndProcess<object> - matterNumber<string> slack_message_template_matter_end1<object> - data<object> - matterNumber<string>
    business_data_select<object> - formaItemInfo<object> - total<bigdecimal> slack_message_template_matter_end1<object> - data<object> - total<integer>

    コラム

    authUserName<string> 、および、 resultStatusName<string> は、入力の mailReplaceMap<map> (メール置換文字情報)から取得します。
    到達処理と同様に、定数に設定した以下のEL式を解決した値を slack_message_template_matter_end1 の入力値にマッピングします。
    • ${$input.imwMatterEndProcess.mailReplaceMap.Auth_User_Nm}authUserName<string>
    • ${$input.imwMatterEndProcess.mailReplaceMap.Last_Result}resultStatusName<string>
    ../../_images/send_message_to_slack_12.png
    図:Slack通知メッセージ作成【案件終了】(slack_message_template_matter_end1)のマッピング設定
  2. 「メッセージ送信(im_slackPostMessage1)」のマッピング設定を以下の通り行います。
    メッセージ送信(im_slackPostMessage1)
    始点 終点
    定数<object> - channel<string> im_slackPostMessage1 - channel<string>
    slack_message_template_matter_end1<object> - output<string> im_slackPostMessage1 - text<string>
    定数<object> - token<string> im_slackPostMessage1 - token<string>
  3. 以上で案件終了処理の業務ロジックの設定は完了です。業務ロジックを保存してください。

    コラム

    この段階で業務ロジックをデバッグ実行することをおすすめします。
    デバッグ機能の使い方は「ロジックフローのデバッグ」を参照してください。
    なお、デバッグ実行の際にもSlackにメッセージが送信されますので、注意してください。

9.3.5. 作成したワークフローを申請・承認する

作成したワークフローを申請してみましょう。
  1. メニューの「申請」から、「申請一覧」画面を表示します。

  2. 作成したワークフローを選択します。

  3. 必要項目を入力して、申請します。

  4. Slackにメッセージが送信されていることを確認します。
    実行されるのは到達処理のため、到達処理で使用したテンプレート定義の文章で送信されています。
    ../../_images/send_message_to_slack_1.png
    図:Slackに送信されたメッセージ(到達処理)
  5. Accel-Mart Quickに戻り、メニューの「承認」から「案件一覧」画面を表示します。

  6. 申請した案件にマウスカーソルを重ねて、「処理」アイコンをクリックします。

  7. 「承認」ボタンをクリックして、承認します。
    このチュートリアルのワークフローには承認ノードが1つしかないため、この時点で案件が終了します。
  8. Slackにメッセージが送信されていることを確認します。
    実行されるのは案件終了処理のため、案件終了処理で使用したテンプレート定義の文章で送信されています。
    ../../_images/send_message_to_slack_13.png
    図:Slackに送信されたメッセージ(案件終了処理)