イベントハンドラについて

イベントハンドラはアクティビティにおいて文書データを判定して分岐、または文書に記入するなどの独自の処理を自動で実行させたい場合に利用します。
イベントハンドラは、実行させたいタイミング毎に定義することができます。

表 イベントハンドラのタイミングと用途

タイミング用途
アクティビティ開始時アクティビティ開始時に実行させたい処理がある場合
実施ボタンクリック時ボタンごとに実行させたい処理を分けたい場合
アクティビティ終了時どのボタンが押下されても実行させたい処理がある場合
イベントハンドラからアクティビティを終了させる場合
複数人の実施が必要になるが一度だけ実行させたい処理がある場合

イベントハンドラの処理は以下の順序で実行されます。

① アクティビティ開始時
② 実施ボタンクリック時
③ アクティビティ終了時

※文書を使用する汎用アクティビティにおけるイベントハンドラ実施のタイミングについて
文書の更新を伴うアクティビティ実施の場合、文書更新後に「ボタンクリック時」と「アクティビティ終了時」のイベントハンドラが実行されますが、このことによって文書更新のメール通知とイベントハンドラ実行のタイミングが重なることになります。そのため、メールで通知される部品データがイベントハンドラ実施前と実施後のいずれになるか制御できず、内容が不確かなものになってしまいます。
確実にイベントハンドラによる文書更新との前後関係を保持したい場合は 【イベントハンドラのメッセージ送信機能】 を使用して、イベントハンドラ処理フローの中にメール通知処理を盛り込む必要があります。

表 各アクティビティでイベントハンドラが設定可能な箇所(サブプロセスを除く)

アクティビティ名 アクティビティ開始時 実施ボタンクリック時 アクティビティ終了時
汎用アクティビティ
承認アクティビティ
汎用ロボット
文書作成ロボット

サブプロセス起動ロボットでは、「開始時のイベントハンドラ」「完了時のイベントハンドラ」「サブプロセス完了時の共通イベントハンドラ」を定義することができます。

サブプロセス起動ロボットも含めた処理タイミングは、
① アクティビティ開始時
② サブプロセス開始時
③ サブプロセス側アクティビティのイベントハンドラ実行・・・
④ サブプロセス完了時
⑤ サブプロセス完了時の共通イベントハンドラ
⑥ アクティビティ終了時
の順番で実行されます。

※ステータスの更新はアクティビティ開始時と同時に実行されます。

イベントハンドラ画面

業務プロセス編集画面を開き、プロセスフロー画面にある各アクティビティのプロパティ画面にイベントハンドラの設定画面が表示されます。
下記の各タイミングに合わせてイベントハンドラを設定できます。

  • アクティビティ開始時
  • アクティビティ終了時
  • 実施ボタンクリック時

表 イベントハンドラ設定画面の項目表

番号 項目名 説明
1 直接入力する イベントハンドラを直接入力するテキストエリアを開閉できます。
2 ダウンロード イベントハンドラが記述されたXMLファイルエクスポートできます。
3 アップロード イベントハンドラが記述されたXMLファイルをインポートできます。

イベントハンドラの構成

イベントハンドラの構成は自動処理に合わせたタグを処理順序に合わせて記述する形式です。使用できるタグは複数あり、種類は以下のように分類されます。
イベントハンドラで使用できるアクションの種類およびその詳細については別資料【イベントハンドラ一覧】を参照してください。

■ イベントハンドラで使用するタグ
イベントハンドラは、以下の3種類のタグを使用します。

  1. イベントハンドラタグ
    イベントハンドラタグはイベントハンドラを記述する際に、最上位階層に記述するタグです。開始タグ<イベントハンドラ>、終了タグ</イベントハンドラ>で構成され、イベントハンドラの設定ではイベントハンドラタグで全体を囲む必要があります。特に、複数のノード(タグで括られたまとまり)を設定する場合には必須です。
<イベントハンドラ>

</イベントハンドラ>
  1. アクションを指定するタグ
    自動処理する際のアクションを指定するタグです。文書系、コマンド系、制御系、関数系に分類され、用途に合わせて利用します。アクションタグは配下にその他のタグや別のアクションタグなど複数のタグを合わせて配置することも可能であり、処理の順を追って配置します。

    ① 文書系
    SmartDB文書に対して操作を行うタグです。文書からの引用や文書への代入、文書に定義された自動更新部品の再計算が可能です。

    ex. <文書部品代入>, <再計算>
    

    ② コマンド系
    指定された処理を実行するタグです。

    ex. <変数代入>, <遷移先>, <プロセス強制終了>, <担当者変更>
    

    ③ 制御系
    条件分岐や担当者の追加・変更など業務プロセスの制御を行う際に使用するタグです。配下に制御を判断するため値として関数系タグやその他のタグを配置する必要があります。

    ex. <条件判定>
    

    ④ 関数系
    任意の値を設定し、上位階層のアクションタグに値を返すタグです。コマンド系・文書系・制御系のタグなどの配下に配置され、関数系タグ単体を最上位階層に指定することはできません。

    ex. <文字列連結>, <和AB>, <アカウントセット>, <数値AはBより大きい>
    
    また、アクションを指定するタグには2通りの表記があります。
    
    - 配下に別のタグを配置する必要のあるタグ
        ```
        <...>            <--アクションを指定するタグの開始タグ
         ...             <--別のタグを配置する箇所
        </...>           <--アクションを指定するタグの終了タグ
        ```
    - 単体で使用できるタグ
        ```
        <.../>
        ```
    
  2. その他のタグ
    特定のアクションタグを使用する際に必須となる付随タグです。

    ex. <A>, <条件>

イベントハンドラ実施時の権限

イベントハンドラの文書系タグで文書を更新する場合、文書やレイアウトブロックの権限は無視して更新を行います。

イベントハンドラの入力方法

手順
イベントハンドラの入力方法は2通りあります。

■ イベントハンドラの直接入力

イベントハンドラを開き、イベントハンドラを設定する箇所の「直接入力する」ボタンを押下します。

「直接入力する」ボタンを押下すると、イベントハンドラを直接入力するテキストエリアが表示されます。
※「イベントハンドラ一覧(SmartDBドキュメント)」をクリックすると、利用可能な「イベントハンドラ一覧」のページが開きます。

イベントハンドラをテキストエリアに入力後、「適用」ボタンを押下します。

■ XMLファイル入力による設定

ローカルでXMLファイルを作成/編集します。
※ ローカルで編集する場合はテキストエディタでも可能ですが、XML エディタの使用を推奨します。

アクティビティのプロパティ画面にあるイベントハンドラ設定枠の「アップロード」ボタンを押下します。

「添付ファイルの選択」画面がポップアップします。

「参照」ボタンをクリックしてインポートするXMLファイルを選択し、「設定」ボタンを押下すると、XMLファイルに記述されているイベントハンドラが適用されます。

イベントハンドラの記述

まず、イベントハンドラタグを配置します。

<イベントハンドラ>

</イベントハンドラ>

イベントハンドラタグ配置後、タグ内に自動処理する内容に合わせたアクションタグを配置します。
処理ごとに利用できるイベントハンドラについては、【イベントハンドラ一覧】を参照してください。

自動処理① SmartDBの文書に値を代入する

自動処理② SmartDBの文書に値を代入する

自動処理③ 条件判定を行う

■ イベントハンドラ記述時の注意事項

記述するタグの書式は原則として、【イベントハンドラ一覧】を利用してください。タグ内に、文言以外の言葉、全角スペース、改行などを用いるとエラーの原因になります。

○ <文書部品代入 ....> ... </文書部品代入>

× <文書部品 代入 ....> ... </文書部品代入>

■ イベントハンドラ適用時の表示メッセージ

入力したイベントハンドラが正常に適用されると、以下のように表示されます。
※ 記述内容によって表示される内容は異なります。

  • イベントハンドラで複数の自動処理を記述した例
    自動処理する順序に合わせて処理内容が表示されます。

また、イベントハンドラの記述にミスがある場合はエラーメッセージが表示されます。

  • イベントハンドラのエラーサンプル1

イベントハンドラの記述に関して文法が間違っている場合

  • イベントハンドラのエラーサンプル2

イベントハンドラの記述に関して文法的には正しいが、関連する項目(部品)についての整合性が取れていない場合

イベントハンドラサンプル

サンプルを元にイベントハンドラの定義構成について触れます。

■ イベントハンドラサンプル1

<文書部品代入 document="doc01" item-id="10004">
    <文字列 value="あいうえお"/>
</文書部品代入>

上記サンプル1 は単純なイベントハンドラ定義のサンプルです。

最上位階層のアクションの文書系タグ<文書部品代入 document="doc01" item-id="10004">で文書部品へデータを代入するように設定しており、その代入するデータを子アクションの関数系タグ<文字列 value="あいうえお"/>で指定しています。結果としてこのサンプル全体では「document="doc01" item-id="10004"」で指定された文書部品へ”あいうえお”を文字列として代入します。

  • イベントハンドラサンプル1を適用した画像

■イベントハンドラサンプル2

<文書部品代入 document="doc01" item-id="10032">
  <和AB>
    <A><文書部品 document="doc01" item-id="10032"/></A>
    <B><数値 value="1"/></B>
  </和AB>
</文書部品代入>

上記のサンプル2では最上位階層がの文書系タグ<文書部品代入>になっています。
その代入先の文書と部品がdocument="doc01" item-id="10032"と指定されており、代入するデータが アクションの関数系タグ<和AB>で指定されています。

<和AB>で使用するデータはその他タグ<A>とその他タグ<B>で指定されています。
<A>は「文書部品document="doc01" item-id="10032"」に格納されているデータを引用して返し、
<B>は“1”を数値として返します。

サンプル2全体の実行結果としては 「文書部品document="doc01" item-id="10032"」に格納されていたデータ」と「数値”1”」を 「<和AB>で加算した」結果を 「文書部品document="doc01" item-id="10032"」に代入するカウントアップの動作を行います。

  • イベントハンドラサンプル2を適用した画像

■ イベントハンドラサンプル3

<条件判定>
 <条件>
  <アカウントAとBが同じである>
    <A>
      <実施者/>
    </A>
    <B>
      <業務開始者/>
    </B>
  </アカウントAとBが同じである>
 </条件>
 <真>
   <遷移先 key="muko"/>
 </真>
 <偽>
   <遷移先 key="yuko"/>
 </偽>
</条件判定>

上記サンプル3は条件判定を行うイベントハンドラです。

そのため最上位階層はアクションの制御系タグ<条件判定>が設定されています。<条件判定>は直下に判定の条件を指定するその他のタグ<条件>と、判定の結果ごとに予定される動作を指定するその他のタグ<真>と<偽>が必要となりますが、ここでは条件として、アクションの関数系タグ<アカウントAとBが同じである>が指定されており、結果が真の場合は<遷移先 key="muko"/>が、偽の場合は<遷移先 key="yuko"/>
が指定されています。<アカウントAとBが同じである>で比較を行うアカウントA,Bとしては<実施者/>と<業務開始者/>が設定されています。

結果としてこのサンプル全体としては、当該アクティビティの実施者と当該プロセスの開始者が同一であった場合は遷移先を”muko”に設定し、両者が異なっていた場合は遷移先を”yuko”に設定するという動作になります。

  • イベントハンドラサンプル3を適用した画像