Show Menu
トピック×

Forms JEE ワークフロー | ユーザーデータの処理

AEM Forms JEEワークフローは、ビジネスプロセスを設計、作成、管理するためのツールを提供します。 ワークフロープロセスは、特定の順序で実行される一連のステップで構成されます。各ステップで、ユーザーへのタスクの割り当てや電子メールメッセージの送信など、特定の処理が実行されます。プロセスは、アセット、ユーザーアカウントおよびサービスとインタラクティブに動作し、次のいずれかの方法でトリガーすることができます。
  • AEM Forms Workspace からのプロセスの開始
  • SOAP または RESTful サービスの使用
  • アダプティブフォームの送信
  • 監視フォルダーの使用
  • 電子メールの使用
For more information about creating AEM Forms JEE workflow process, see Workbench Help .

ユーザーデータとデータストア

プロセスがトリガーされて進行すると、プロセスの参加者に関するデータ、プロセスに関連付られたフォームに参加者が入力したデータ、およびフォームに追加された添付ファイルが取得されます。これらのデータは AEM Forms JEE サーバーのデータベースに格納され、添付ファイルのような一部のデータは Global Document Storage(GDS)ディレクトリに格納されます(設定が行われている場合)。GDS ディレクトリは、共有ファイルシステムまたはデータベース上に構成できます。

ユーザーデータへのアクセスと削除

プロセスがトリガーされると、一意のプロセスインスタンスIDと長時間有効な呼び出しIDが生成され、プロセスインスタンスに関連付けられます。 永続的呼び出し ID に基づいて、プロセスインスタンスのデータへアクセスしてデータを削除できます。タスクを送信したプロセス開始者またはプロセス参加者のユーザー名を持つ、プロセスインスタンスの長期間有効な呼び出しIDを推定できます。
ただし、以下のシナリオでは開始者のプロセスインスタンス ID を特定することはできません。
  • 監視フォルダーを介してトリガーされたプロセス :プロセスが監視フォルダーによりトリガーされた場合、そのプロセスの開始者を使用してプロセスインスタンスを特定することはできません。この場合、ユーザー情報は格納済みデータでエンコードされます。
  • AEM の発行インスタンスから開始されたプロセス :AEM 発行インスタンスからトリガーされたすべてのプロセスインスタンスは、開始者に関する情報を取得しません。ただし、ユーザーデータは、ワークフロー変数に格納されているプロセスに関連付けられたフォームに取得される場合があります。
  • Eメールを通じて開始されたプロセス :送信者の電子メールIDは、データベーステーブルの不透明なBLOB列のプロパティとして取り込まれ tb_job_instance ます。この列は、直接照会できません。

ワークフローの開始者または参加者が分かっている場合のプロセスインスタンス ID の特定

ワークフローの開始者または参加者のプロセスインスタンス ID を特定するには、次の手順を実行します。
  1. Execute the following command in AEM Forms server database to retrieve the principal ID for workflow initiator or participant from the edcprincipalentity database table.
    select id from edcprincipalentity where canonicalname='user_ID'
    
    
    クエリを実行すると、指定された user_ID のプリンシパル ID が返されます。
  2. ワークフロー開始者の場合 )次のコマンドを実行して、 tb_task データベーステーブルから開始者のプリンシパル ID に関連付けられたすべてのタスクを取得します。
    select * from tb_task where start_task = 1 and create_user_id= 'initiator_principal_id'
    
    
    The query returns tasks initiated by the specified initiator _ principal_id . タスクには次の 2 つのタイプがあります。
    • 完了したタスク :これらのタスクが送信され、フィールドに英数字の値が表示され process_instance_id ます。 送信済みタスクのすべてのプロセスインスタンス ID をメモして、手順を続行します。
    • 開始されたが完了していないタスク :これらのタスクは開始されていますが、まだ送信されていません。The value in the process_instance_id field for these tasks is 0 (zero). この場合、対応するタスク ID をメモして、「 オーファンタスクの操作 」を参照してください。
  3. ( For workflow participants ) Execute the following command to retrieve process instance IDs associated with the principal ID of the process participant for the initiator from the tb_assignment database table.
    select distinct a.process_instance_id from tb_assignment a join tb_queue q on a.queue_id = q.id where q.workflow_user_id='participant_principal_id'
    
    
    クエリを実行すると、参加者がタスクを何も送信していない場合も含めて、参加者に関連付けられたすべてのプロセスのインスタンス ID が返されます。
    送信済みタスクのすべてのプロセスインスタンス ID をメモして、手順を続行します。
    For orphan tasks or tasks where the process_instance_id is 0 (zero), take note of the corresponding task IDs and see Work with orphan tasks .
  4. Follow the instructions in Purge user data from workflow instances based on process instance IDs section to delete user data for identified process instance IDs.

ユーザーデータがプリミティブ変数に格納されている場合のプロセスインスタンス ID の特定

ワークフローは、ユーザーデータがデータベースにBLOBとして保存される変数に取り込まれるように設計できます。 このような場合、次のプリミティブ型変数のいずれかに格納されている場合にのみ、ユーザーデータのクエリを実行できます。
  • 文字列 :ユーザー ID は直接またはサブ文字列として含まれ、SQL を使用してクエリを実行できます。
  • 数値 :ユーザー ID は直接含まれています。
  • XML :ユーザー ID はデータベースにテキスト列として格納されたテキスト内のサブ文字列として含まれ、文字列と同じようにクエリを実行できます。
プリミティブ型変数にデータが格納されているワークフローにユーザーのデータが含まれるかどうかを確認するには、次の手順を実行します。
  1. 次のデータベースコマンドを実行します。
    select database_table from omd_object_type where name='pt_<app_name>/<workflow_name>'
    
    
    The query returns a table name in tb_<number> format for the specified application ( app_name ) and workflow ( workflow_name ).
    ワークフローがアプリケーション内のサブフォルダーにネストされている場合、 name プロパティの値は複合型にすることができます。ワークフローへの正確なフルパスを指定するようにしてください。これは、 omd_object_type データベーステーブルから取得できます。
  2. Review the tb_<number> table schema. テーブルには、指定されたワークフローのユーザーデータを格納する変数が含まれています。テーブルの変数はワークフローの変数に対応しています。
    ユーザー ID を含むワークフロー変数に対応する変数を特定してメモしておきます。特定された変数がプリミティブ型の場合は、クエリを実行して、ユーザー ID に関連付けられたワークフローインスタンスを確認できます。
  3. 次のデータベースコマンドを実行します。このコマンドでは、 user_var がユーザー ID を含むプリミティブ型の変数です。
    select process_instance_id from <tb_name> where <user_var>=<user_ID>
    
    
    クエリを実行すると、指定された user_ID に関連付けられたすべてのプロセスインスタンス ID が返されます。
  4. Follow the instructions in Purge user data from workflow instances based on process instance IDs section to delete user data for identified process instance IDs.

プロセスインスタンス ID に基づいてワークフローインスタンスからユーザーデータを削除する

これでユーザーに関連付けられたプロセスインスタンス ID を特定できたので、次の手順を実行して個々のプロセスインスタンスからユーザーデータを削除します。
  1. Execute the following command to retrieve long-lived invocation ID and status for a process instance from the tb_process_instance table.
    select long_lived_invocation_id, status from tb_process_instance where id='process_instance_id'
    
    
    The query returns the long-lived invocation ID and status for the specified process_instance_id .
  2. Create an instance of the public ProcessManager client ( com.adobe.idp.workflow.client.ProcessManager ) using a ServiceClientFactory instance with the correct connection settings.
    詳しくは、「 Class ProcessManager 」の Java API リファレンスを参照してください。
  3. ワークフローインスタンスのステータスを確認します。ステータスが2(COMPLETE)または4(TERMINATED)以外の場合は、次のメソッドを呼び出して、最初にインスタンスを終了します。
    ProcessManager.terminateProcess(<long_lived_invocation_id>) です。
  4. 次のメソッドを呼び出して、ワークフローインスタンスを削除します。
    ProcessManager.purgeProcessInstance(<long_lived_invocation_id>)
    purgeProcessInstance メソッドを使用すると、AEM Forms サーバーデータベースおよび GDS から、指定された呼び出し ID のすべてのデータが完全に削除されます(設定が行われている場合)。

オーファンタスクの操作

オーファンタスクは、プロセスが開始されているがまだ送信されていないプロセスを含むタスクです。in this case, the process_instance_id is 0 (zero). したがって、プロセスインスタンス ID を使用してオーファンタスクに保存されたユーザーデータを追跡することはできません。ただし、オーファンタスクのタスク ID を使用してユーザーデータを追跡することができます。「 tb_task ワークフローの開始者または参加者が分かっている場合のプロセスインスタンス ID の特定 」で説明されているように、ユーザーの テーブルからタスク ID を特定することができます。
タスク ID が特定されたら、次を実行して GDS およびデータベースからオーファンタスクに関連するファイルおよびデータを削除します。
  1. AEM Forms サーバーデータベースで次のコマンドを実行して、特定されたタスク ID の ID を取得します。
    select id from tb_form_data where task_id=<task_id>
    
    
    クエリを実行すると、ID のリストが返されます。次のように、返された ID( fd_id )ごとにセッション ID 文字列のリストを作成します。
    • _ wfattach<task_id>
    • _wftask<fd_id>
    • _wftaskformid<fd_id>
  2. GDS がファイルシステムまたはデータベースを指しているのかに応じて、次のいずれかの手順を実行します。
    1. ファイルシステムの GDS
      GDS ファイルシステムで次の手順を実行します。
      1. 次のセッションID文字列を拡張子として持つファイルを検索します。
      • _wfattach<task_id>
      • _wftask<fd_id>
      • _wftaskformid<fd_id> これらの拡張子を持つファイルはマーカーファイルです。これらのファイルは次の形式のファイル名で保存されます。
      <file_name_guid>.session<session_id_string>
      1. Delete all marker files and other files with the exact filename as <file_name_guid> from the file system.
    2. データベースの GDS
      セッション ID ごとに次のコマンドを実行します。
      delete from tb_dm_chunk where documentid in (select documentid from tb_dm_session_reference where sessionid=<session_id>)
      delete from tb_dm_session_reference where sessionid=<session_id>
      delete from tb_dm_deletion where sessionid=<session_id>
      
      
  3. 次のコマンドを実行して、AEM Forms サーバーデータベースからタスク ID のデータを削除します。
    delete from tb_task_acl where task_id=<task_id>
    delete from tb_task_attachment where task_id=<task_id>
    delete from tb_form_data where task_id=<task_id>
    delete from tb_assignment where task_id=<task_id>
    delete from tb_task where id=<task_id>