队
我的工作流只有一个流程步骤,即processMyCustomStep,映射到OSGI服务。
我有一个属于自定义AEM组的sso用户。他可以完全访问/ etc,/ content和/ libs。
我已经以SSO用户身份登录,在激活页面时,它会使用工作流程启动器cq:page modified event启动工作流程。但将启动器显示为“admin”。
工作流程实例历史记录
状态标题发起人开始时间结束时间动作评论
已完成开始管理员12-06-2016 2:58:27 12-06-2016 2:58:27工作流程已完成
已完成的流程MyCustomStep admin 12-06-2016 2:58:27 12-06-2016 2:58:27 WorkflowCompleted
我有几个问题:
不确定这个标题是什么启动工作流启动器可能启动工作流程,但它将启动器显示为管理员。
同时,我的工作流程步骤也会将发起人显示为管理员。
由于工作流作为管理员的发起人,当我以sso用户身份登录时,我没有看到此工作流的实例,也没有看到sso用户的存档。只有在以管理员身份登录时,才能看到工作流实例,并在工作流完成后进入存档。
我没有激活触发工作流的页面和工作流启动器,而是通过提供页面的有效负载手动启动工作流程,然后正确显示,工作流程以启动器作为sso用户启动。
工作流程实例历史记录
状态标题发起人开始时间结束时间动作评论
已完成启动SSOUser1 12-06-2016 2:56:24 12-06-2016 2:58:27工作流程已完成
已完成的流程MyCustomStep admin 12-06-2016 2:56:24 12-06-2016 2:58:27 WorkflowCompleted
这次由于启动器是SSOUser1,我看到以sso用户(SSOUser1)登录时填充的工作流实例。一旦完成,我还会在归档中看到工作流实例。
即使我在第一种情况下使用sso用户激活页面,也不确定为什么它将工作流的发起者显示为admin而不是sso用户。当以sso用户身份登录时,sso用户在激活页面后能够查看工作流实例的任何建议。它触发了工作流程,但启动器为admin而不是sso用户。任何输入都将受到高度赞赏。
感谢。
答案 0 :(得分:1)
在使用Sling服务帐户的较新AEM版本中,启动器始终为admin
或workflow-service
。用户请求启动工作流,管理员或服务帐户运行该过程。如果您想找到启动工作流程的用户,可以使用item.getWorkflowData().getMetaDataMap().get("userId", String.class)
查看元数据。请注意,数据与JCR中创建的资源匹配的路径类似于/etc/workflow/instances/server0/2016-06-13/update_asset_2/data/metaData
。此外,您可以通过HistoryItem
然后userId
获取各个工作流程处理步骤的参与者。
@Component
@Service
@Properties({
@Property(name = Constants.SERVICE_DESCRIPTION, value = "Workflow step description"),
@Property(name = Constants.SERVICE_VENDOR, value = "Company Name"),
@Property(name = "process.label", value = "Process Label will show in the workflow dropdown") })
public class MyCustomStep implements WorkflowProcess {
public void execute(WorkItem item, WorkflowSession wfsession, MetaDataMap args) throws WorkflowException {
/* Always admin or service-workflow */
final String initiator = item.getWorkflow().getInitiator();
/* Get actual user who initiated workflow */
final String initiator = item.getWorkflowData().getMetaDataMap().get("userId", String.class);
/* Get workflow history */
final List<HistoryItem> histories = wfsession.getHistory(item.getWorkflow());
/* Get last item in workflow history */
final HistoryItem lastItem = histories.get(histories.size() - 1);
/* Get the user that participated in the last item */
final String lastUser = lastItem.getUserId();
}
}