メールテンプレートに RICH TEXTAREA ウィジェットを使用する方法

休暇申請管理プロセスの例を使用して、フォームにメールテンプレートを使用する方法を学習します。


不在メッセージ処理

休暇で不在になる際に、特定の日付まで不在であることを送信者に通知する不在メッセージとメールアカウントを設定します。

Bonita BPMを使用してプロセスを設計します:
まず、Bonita BPM Studioのプロセスのワイヤフレームを描きます。
プロセスの構成は次のとおりです。

  • 開始イベント
  • その休暇の日数を送信し、メールの内容を確認するため、メールサーバーに送信する前にそのメールをテストしたいかどうかをユーザーに確認を求めるヒューマン タスク
  • ユーザーにメールを送信するサービス タスク
  • 不在メッセージをメールサーバーに送信するサービスタスク
  • 終了イベント

プロセスは次のようになります。

不在メッセージ処理

メールの内容をチェックする」のタスクからの遷移(複数)に条件を設定し、進む経路を分かるようにします。

ユーザー情報を保持するビジネス データモデルをします:

  • startDate:休暇の開始日 DATE ONLY
  • endDate:休暇の終了日 DATE ONLY
  • title:メールのタイトル STRING
  • body:メール本文  TEXT 最大長は 2048文字とする。STRING 型の最大長 512文字を超える可能性があるため、ここでは TEXT 型にします)

不在メッセージのビジネスモデル

プールレベルで outOfOfficeMessage の名前のビジネスオブジェクト変数を作成します。次の Groovy スクリプトを介して、この変数に不在メッセージのメールテンプレートを初期化します。
このテンプレートには、起案者の情報とそのマネージャの連絡先が入ります:

import org.bonitasoft.engine.identity.ContactData;
import org.bonitasoft.engine.identity.User;
import java.time.LocalDate;

def ooom = new com.company.model.OutOfOfficeMessage();

User u = BonitaUsers.getProcessInstanceInitiator(apiAccessor,processInstanceId); // 起案者の情報を取得する
User manager = BonitaUsers.getProcessInstanceInitiatorManager(apiAccessor,processInstanceId); // 起案者のマネージャ情報を取得する

ContactData managerData = BonitaUsers.getProcessInstanceInitiatorManagerProfessionalContactInfo(apiAccessor,processInstanceId); // マネージャのメールアドレスを取得する
ContactData userData = BonitaUsers.getProcessInstanceInitiatorProfessionalContactInfo(apiAccessor,processInstanceId); // 起案者のメールアドレスを取得する

ooom.setTitle("不在メッセージ");
ooom.setBody("""
<p>こんにちは、<br>
<br>
私は、%休暇期間%は不在のため、メールにアクセスできません。<br>
<br>
至急のご要件でしたら、お手数ですが、<a href="mailto:${managerData.email}">${manager.firstName} ${manager.lastName}</a> 宛にメールをお願いします。<br>
<br>
よろしくお願いします。<br>
${u.firstName} ${u.lastName}
</p>
<div dir="ltr">
// ...
// メールのシグニチャーを挿入する
// ...
</div>

""");
ooom.setStartDate(LocalDate.now()); // 7.5.x 以降、DATA ONLY 型の属性に今日の日付を設定する場合、new Date() ではなく、LocalDate.now() にします。
ooom.setEndDate(LocalDate.now());

return ooom;

このプロセスのインスタンスは、フォームを持ちません(「実行」 > 「起案フォーム 」タブで「フォームなし」にする)。ビジネス オブジェクトは、メールテンプレートを設定する Groovy スクリプトで作成します。

メールの内容をチェックする」タスク

メールの内容をチェックするヒューマン タスクは、コントラクトの出力にマップするため、ビジネス オブジェクト outOfOfficeMessage と一致するコントラクトで構成されます。また、メールをテストしたいかどうかを知るためには、コントラクトには、test を、そしてその test の値をこのタスクのローカル変数として保存するためにローカル変数に gotoTest を追加します。

コントラクト」ペインは、次のようになります:

メールの内容をチェックする - - 不在メッセージのコントラクト

そして「データ操作」ペインは、次のようになります:

メールの内容をチェックする - - 不在メッセージのデータ操作

遷移の条件

このタスクには、2つの可能な遷移があります。

  • 「テストメールを送信する」へ遷移させるには、「ローカル変数の gotoTest が true であること」が条件になります
  • 「メールサーバーにメールを送信する」へ遷移させるには、「デフォルト・シーケンスフロー(ローカル変数の gotoTest  true 以外であること意味する)」が条件になります

テストメールを送信する」タスク

このタスクは、メールのレンダリングが正しいかどうかを確認するため、プロセスの起案者にテストメールを送信することができます。

したがって、タスクの終了段階に「 Eメール (SMTP) 」コネクタを使用します。
コネクタのプロパティは次のようになります:

  • 「認証」には、メールホストの送信者メールアドレスとパスワードを設定します。
  • コネクタの宛先(to)と差出人(from)には、適切なアドレスを取得するため、次の Groovy スクリプトを使用します:
    BonitaUsers.getProcessInstanceInitiatorProfessionalContactInfo(apiAccessor,processInstanceId).email
    
  • 件名(Subject)にはビジネス変数の title 属性値を取得するため、次の Groovy スクリプトを使用します:
    outOfOfficeMessage.title
    
  • メッセージには、ビジネス変数の body 属性値を取得し、その値のテンプレート内にあらかじめ設定した文字列 “%休暇期間%” をユーザーが入力した開始日と終了日をもとに編集した文字列に置き換えるため、次のGroovy スクリプトを設定します。このスクリプトを設定するためには、「メッセージ 」フィールド枠の下にある「エディタを切り替える…」のリンクをクリックします:
    // メールテンプレート内のプレースホルダー: %休暇期間% をユーザーが指定した休暇期間に置き換える
    
    String placeHolder;
    String startDate = outOfOfficeMessage.startDate.toString().replaceAll("-", "/")
    String endDate = outOfOfficeMessage.endDate.toString().replaceAll("-", "/")
    
    if (startDate == endDate) {
    	placeHolder = startDate + " "
    }
    else {
    	placeHolder = startDate + " から " + endDate + " まで"
    }
    return outOfOfficeMessage.body.replace("%休暇期間%", placeHolder);
    

このタスクが完了すると、新しい「メールの内容をチェックする」ヒューマン タスクが利用可能になります。

メールサーバーにメールを送信する」タスク

ここでは、不在メールメッセージにエラーがなく、メールサーバーには、メールサーバープロバイダ所定のユーザーに不在メールの構成設定がなされている前提とし、その処理方法は使用するメールシステムによって異なるため割愛します。実際には、当該メールシステムで用意されている外部 APIを介し不在メッセージ情報を送信します。そのためには、コネクタ(REST API or Java)を使用します。

「メールの内容をチェックする」タスクのフォーム

「メールの内容をチェックする」タスクの「実行」>「フォーム」ペインで「鉛筆」アイコンをクリックしてコントラクトからデフォルトのフォームを生成します。
生成結果は、次のようになります;

電子メールの内容を確認してください - - フォーム不在メッセージ

より使いやすくするために、次の変更を行います。

  • Out Of Office Message Input のラベルを「不在メッセージの入力」に変更します
  • Start Date のラベルを「開始日」に変更します
  • End Date のラベルを「終了日」に変更します
  • 両方の DATE PICKER ウィジェットを同じ行に配置します
  • Title のラベルを「件名」に変更します
  • Body のラベルを「本文」に変更します
  • Test の CHECKBOX を次のステップで SELECT に変更します:
    • CHECKBOX の下に SELECT ウィジェットを追加します
    • nextStepChoice の JSON 変数を作成し、次の選択肢を定義します:
      [
          {"name": "自分のメールボックスでテストメールを受信する", "value": true},
          {"name": "メールサーバーにメールメッセージを送信する", "value": false}
      ]
      
    • SELECT ウィジェットに次のプロパティを設定します:
      • ラベルを非表示」を「はい」にします
      • 使用可能な値」に nextStepChoices をバインドします
      • 表示するキー」に name を設定します
      • 返されるキー」に value を設定します
      • 」に formInput.test をバインドします
      •  結果は次のようになります。

      電子メールの内容を確認してください - - 不在メッセージ選択プロパティ

  • Test の CHECKBOX ウィジェットを削除します

RICH TEXTAREA ウィジェットにテンプレートを表示するためには、メールテンプレートの内容が含まれているビジネス オブジェクト outOfOfficeMessage を取得する必要があります。
そのためには、outOfOfficeMessage と命名したExternal API の変数を追加し、次のビジネスオブジェクトの参照リンクをそのコンテンツに設定します:

../{{context.outOfOfficeMessage_ref.link}}

すでに入力にバインドされている formInput 変数の値を初期設定するために、outOfOfficeMessage 属性をバインドします。
そのためには、formInput のタイプを JSON から Javascript expression に変更し、次の値を設定します:

return {
  "outOfOfficeMessageInput" : {
    "title" : $data.outOfOfficeMessage.title,
    "body" : $data.outOfOfficeMessage.body,
    "startDate" : $data.outOfOfficeMessage.startDate,
    "endDate" : $data.outOfOfficeMessage.endDate
  },
  "test" : false
};

変数ペインは、次のようになります。

不在メッセージ - 電子メールの内容を確認してください - メール変数を

私たちはメール本文を可視化する良い方法を持っている RICH TEXTAREA ウィジェットを利用します。(community エディションの場合は TEXTAREA ウィジェットを代わりに使用します)

件名の INPUT ウィジェットの下に  RICH TEXTAREA ウィジェットを追加します:

  • formInput.outOfOfficeMessageInput.body を値に設定します(本文の INPUT ウィジェットと同じ)
  • 「必須」のプロパティを「はい」を設定します
  • ラベル」のプロパティに「本文」を設定します
  • 値の最大文字数」に 2048 を設定します
  • スタイル ツールバー」のプロパティに p, ul, ol を設定します
  • その他のツールバー」のプロパティに html, insertImage, insertLink, undo, redo, clear を設定します

プレビューをクリックします。フォームは次のようになります:

 

不在メッセージ - 電子メールの内容を確認してください - フォームのプレビューを

プロセスを実行します

すべてが準備ができました。プロセスを開始することができます。

Studio で、「実行」をクリックします。

プロセスのインスタンスが開始され、タスクが可能です。
タスクを実行すると、以下のフォームが表示されます。

電子メールの内容を確認してください - - フォーム不在メッセージ

「自分のメールボックスでテストメールを受信する」を選択すると、次のメールが受信されます。
自分は デフォルトで ユーザー「Walter Bates」になっていますから、Studio の組織メニューから ACME の組織を選択し、ユーザー「Walter Bates」のメールアドレスに自分のメールアドレスを設定しておく必要があります。

テストメールの送信が完了すると「メールの内容をチェックする」タスクがマイタスクリストに再度、出現しますので、納得が行くまで繰り返しテストすることができます。