AEM FormsJEE工作流提供设计、创建和管理业务流程的工具。 工作流进程由一系列按指定顺序执行的步骤组成。 每个步骤都执行特定操作,如向用户分配任务或发送电子邮件。 流程可以与资产、用户帐户和服务交互,并可以使用以下任一方法触发:
有关创建AEM FormsJEE工作流进程的详细信息,请参阅工作台帮助。
当进程被触发并在进行时,它会捕获有关进程参加者的数据、参加者在与进程关联的表单中输入的数据以及添加到表单的附件。 数据存储在AEM FormsJEE服务器存储库中,如果配置了,某些数据(如附件)会存储在全局文档(GDS)目录中。 可以在共享文件系统或数据库上配置GDS目录。
当触发进程时,将生成唯一的进程实例ID和长寿命调用ID并与该进程实例相关联。 您可以基于长期调用ID访问和删除进程实例的数据。 您可以使用已提交其任务的进程发起者或进程参与者的用户名推断进程实例的长期调用ID。
但是,在以下情况下,您无法标识启动器的进程实例ID:
tb_job_instance
一个属性,无法直接查询。执行以下步骤以标识工作流发起者或参与者的流程实例ID:
在AEM Forms服务器数据库中执行以下命令,从edcprincipalentity
数据库表中检索工作流启动器或参与者的主ID。
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
启动的任务。 任务有两种类型:
process_instance_id
字值。记下已提交任务的所有进程实例ID,并继续执行这些步骤。process_instance_id
字段中的值为0(零)。 在这种情况下,请注意相应的任务ID并参阅使用孤立任务。(对于工作流参加者)执行以下命令,从tb_assignment
数据库表中检索与发起者的进程参加者的主体ID关联的进程实例ID。
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,请执行以下操作以从相应的进程实例中删除用户数据。
执行以下命令,从tb_process_instance
表检索进程实例的长期调用ID和状态。
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
)的实例。
有关详细信息,请参阅类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跟踪它。 如识别工作流发起者或参与者已知时的进程实例ID中所述,您可以从tb_task
表中为用户标识任务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>