AEM FormsのJEEワークフローは、ビジネスプロセスを設計、作成、管理するツールを提供します。 ワークフロープロセスは、特定の順序で実行される一連のステップで構成されます。各ステップで、ユーザーへのタスクの割り当てや電子メールメッセージの送信など、特定の処理が実行されます。プロセスは、アセット、ユーザーアカウントおよびサービスとインタラクティブに動作し、次のいずれかの方法でトリガーすることができます。
AEM FormsJEEワークフロープロセスの作成について詳しくは、Workbenchヘルプを参照してください。
プロセスがトリガーされて進行すると、プロセスの参加者に関するデータ、プロセスに関連付られたフォームに参加者が入力したデータ、およびフォームに追加された添付ファイルが取得されます。これらのデータは AEM Forms JEE サーバーのデータベースに格納され、添付ファイルのような一部のデータは Global Document Storage(GDS)ディレクトリに格納されます(設定が行われている場合)。GDS ディレクトリは、共有ファイルシステムまたはデータベース上に構成できます。
プロセスがトリガーされると、一意のプロセスインスタンスIDと長期間有効な呼び出しIDが生成され、プロセスインスタンスに関連付けられます。 永続的呼び出し ID に基づいて、プロセスインスタンスのデータへアクセスしてデータを削除できます。プロセスインスタンスの長期間有効な呼び出しIDは、プロセスの開始者のユーザー名、またはタスクを送信したプロセス参加者のユーザー名を使用して推定できます。
ただし、以下のシナリオでは開始者のプロセスインスタンス ID を特定することはできません。
tb_job_instance
データベーステーブルの不透明なblob列のプロパティとして取得され、直接クエリーすることはできません。ワークフローの開始者または参加者のプロセスインスタンス ID を特定するには、次の手順を実行します。
AEM Formsサーバーデータベースで次のコマンドを実行して、ワークフロー開始者または参加者のプリンシパルIDをedcprincipalentity
データベーステーブルから取得します。
select id from edcprincipalentity where canonicalname='user_ID'
クエリを実行すると、指定された user_ID
のプリンシパル ID が返されます。
(ワークフロー開始者の場合)次のコマンドを実行して、tb_task
データベーステーブルから開始者のプリンシパル ID に関連付けられたすべてのタスクを取得します。
select * from tb_task where start_task = 1 and create_user_id= 'initiator_principal_id'
クエリは、指定されたinitiator
_ principal_id
で開始されたタスクを返します。 タスクには次の 2 つのタイプがあります。
process_instance_id
フィールドに英数字の値が表示されます。送信済みタスクのすべてのプロセスインスタンス ID をメモして、手順を続行します。process_instance_id
フィールドの値は0 (ゼロ)です。 この場合、対応するタスク ID をメモして、「オーファンタスクの操作」を参照してください。(ワークフロー参加者用)次のコマンドを実行して、イニシエーターのプロセス参加者のプリンシパルIDに関連付けられているプロセスインスタンスIDをtb_assignment
データベーステーブルから取得します。
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 をメモして、手順を続行します。
単独ページのタスクまたはタスクでprocess_instance_id
が0(ゼロ)の場合は、対応するタスクIDを控えて、単独ページのタスクの使用を参照してください。
「プロセスインスタンスIDに基づいてワークフローインスタンスからユーザーデータを削除」の手順に従って、識別されたプロセスインスタンスIDのユーザーデータを削除します。
ワークフローは、ユーザーデータがデータベース内のBLOBとして格納される変数に取り込まれるように設計できます。 このような場合、次のプリミティブ型変数のいずれかに格納されている場合にのみ、ユーザーデータのクエリを実行できます。
プリミティブ型変数にデータが格納されているワークフローにユーザーのデータが含まれるかどうかを確認するには、次の手順を実行します。
次のデータベースコマンドを実行します。
select database_table from omd_object_type where name='pt_<app_name>/<workflow_name>'
クエリは、指定されたアプリケーション(app_name
)とワークフロー(workflow_name
)に対応するtb_<number>
形式のテーブル名を返します。
ワークフローがアプリケーション内のサブフォルダーにネストされている場合、name
プロパティの値は複合型にすることができます。ワークフローへの正確なフルパスを指定するようにしてください。これは、omd_object_type
データベーステーブルから取得できます。
tb_<number>
テーブルのスキーマを確認します。 テーブルには、指定されたワークフローのユーザーデータを格納する変数が含まれています。テーブルの変数はワークフローの変数に対応しています。
ユーザー ID を含むワークフロー変数に対応する変数を特定してメモしておきます。特定された変数がプリミティブ型の場合は、クエリを実行して、ユーザー ID に関連付けられたワークフローインスタンスを確認できます。
次のデータベースコマンドを実行します。このコマンドでは、user_var
がユーザー ID を含むプリミティブ型の変数です。
select process_instance_id from <tb_name> where <user_var>=<user_ID>
クエリを実行すると、指定された user_ID
に関連付けられたすべてのプロセスインスタンス ID が返されます。
「プロセスインスタンスIDに基づいてワークフローインスタンスからユーザーデータを削除」の手順に従って、識別されたプロセスインスタンスIDのユーザーデータを削除します。
これでユーザーに関連付けられたプロセスインスタンス ID を特定できたので、次の手順を実行して個々のプロセスインスタンスからユーザーデータを削除します。
次のコマンドを実行して、プロセスインスタンスの長期間有効な呼び出しIDとステータスをtb_process_instance
テーブルから取得します。
select long_lived_invocation_id, status from tb_process_instance where id='process_instance_id'
クエリは、指定されたprocess_instance_id
の呼び出しIDとステータスを長時間有効に返します。
ServiceClientFactory
インスタンスを使用し、正しい接続設定を持つパブリックProcessManager
クライアント(com.adobe.idp.workflow.client.ProcessManager
)のインスタンスを作成します。
詳しくは、「Class ProcessManager」の Java API リファレンスを参照してください。
ワークフローインスタンスのステータスを確認します。ステータスが2(COMPLETE)または4(TERMINATED)以外の場合は、次のメソッドを呼び出して、最初にインスタンスを終了します。
ProcessManager.terminateProcess(<long_lived_invocation_id>)
.
次のメソッドを呼び出して、ワークフローインスタンスを削除します。
ProcessManager.purgeProcessInstance(<long_lived_invocation_id>)
purgeProcessInstance
メソッドを使用すると、AEM Forms サーバーデータベースおよび GDS から、指定された呼び出し ID のすべてのデータが完全に削除されます(設定が行われている場合)。
オーファンタスクは、プロセスが開始されているがまだ送信されていないプロセスを含むタスクです。この場合、process_instance_id
は0 (ゼロ)です。 したがって、プロセスインスタンス ID を使用してオーファンタスクに保存されたユーザーデータを追跡することはできません。ただし、オーファンタスクのタスク ID を使用してユーザーデータを追跡することができます。「tb_task
ワークフローの開始者または参加者が分かっている場合のプロセスインスタンス ID の特定」で説明されているように、ユーザーの テーブルからタスク ID を特定することができます。
タスク ID が特定されたら、次を実行して GDS およびデータベースからオーファンタスクに関連するファイルおよびデータを削除します。
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>
GDS がファイルシステムまたはデータベースを指しているのかに応じて、次のいずれかの手順を実行します。
ファイルシステムの GDS
GDS ファイルシステムで次の手順を実行します。
_wfattach<task_id>
_wftask<fd_id>
_wftaskformid<fd_id>
これらの拡張子を持つファイルはマーカーファイルです。これらのファイルは次の形式のファイル名で保存されます。
<file_name_guid>.session<session_id_string>
<file_name_guid>
である他のファイルをファイルシステムから削除します。データベースの 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>
次のコマンドを実行して、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>