AEM Forms JEE工作流提供了用于设计、创建和管理业务流程的工具。 工作流进程由一系列按指定顺序执行的步骤组成。 每个步骤都会执行特定操作,例如向用户分配任务或发送电子邮件。 一个进程可以与资产、用户帐户和服务进行交互,并且可以使用以下任意方法触发:
有关创建AEM Forms JEE工作流进程的更多信息,请参阅 Workbench帮助.
当流程被触发并进展时,它会捕获有关流程参与者的数据、参与者在与流程关联的表单中输入的数据以及添加到表单的附件。 该数据存储在AEM Forms JEE服务器数据库中,如果进行了配置,一些数据(如附件)将存储在全局文档存储(GDS)目录中。 可以在共享文件系统或数据库上配置GDS目录。
触发流程时,将生成唯一的流程实例ID和长生命周期调用ID,并与该流程实例关联。 您可以根据长时间的调用ID访问和删除流程实例的数据。 您可以使用已提交任务的进程发起者或进程参与者的用户名来推断进程实例的长寿命调用ID。
但是,在以下情况下,您无法识别启动器的进程实例ID:
tb_job_instance
无法直接查询的数据库表。执行以下步骤来标识工作流发起者或参与者的进程实例ID:
在AEM Forms服务器数据库中执行以下命令,以从检索工作流发起者或参与者的主体ID edcprincipalentity
数据库表。
select id from edcprincipalentity where canonicalname='user_ID'
查询返回指定的主体ID user_ID
.
(对于工作流启动器)执行以下命令以从检索与启动器的主体ID关联的所有任务 tb_task
数据库表。
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,并查看 处理孤立任务.(对于工作流参与者)执行以下命令以从检索与发起者的进程参与者的主体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>'
查询返回表名,位置为 tb_<number>
指定应用程序的格式( app_name
)和工作流( workflow_name
)。
的值 name
如果工作流嵌套在应用程序内的子文件夹中,则属性可能会很复杂。 确保您指定工作流的确切完整路径,该路径可从 omd_object_type
数据库表。
查看 tb_<number>
表模式。 该表包含存储指定工作流的用户数据的变量。 表中的变量对应于工作流中的变量。
识别并记下与包含用户ID的工作流变量对应的变量。 如果识别的变量属于基元类型,则可以运行查询以确定与用户ID关联的工作流实例。
执行以下数据库命令。 在此命令中, user_var
是包含用户ID的原始类型变量。
select process_instance_id from <tb_name> where <user_var>=<user_ID>
查询返回与指定的关联的所有进程实例ID user_ID
.
按照中的说明操作 根据流程实例ID从工作流实例中清除用户数据 部分,用于删除已标识的流程实例ID的用户数据。
现在,您已标识与用户关联的流程实例ID,请执行以下操作以从相应的流程实例中删除用户数据。
执行以下命令以从检索进程实例的长生命周期调用ID和状态 tb_process_instance
表格。
select long_lived_invocation_id, status from tb_process_instance where id='process_instance_id'
查询会返回指定对象的长期调用ID和状态 process_instance_id
.
创建公共实例 ProcessManager
客户端( com.adobe.idp.workflow.client.ProcessManager
)使用 ServiceClientFactory
具有正确连接设置的实例。
有关更多信息,请参阅以下内容的Java API参考: 类ProcessManager.
检查工作流实例的状态。 如果状态不是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>