如何从java类自定义cq5工作流收件箱消息有效负载?
基本上我有一个自定义工作流程,其中有一个启动器来触发nt:非结构化节点创建的工作流程。但我想在工作流收件箱中显示有效负载,直到页面路径不到JCR:content节点。 (我正在尝试在工作流启动后有一个流程步骤,并通过java类更改收件箱消息的有效负载路径,并且对于下一个参与者步骤,收件箱消息应该出现在页面路径中)..任何想法都有助于更改在流程步骤中运行时的工作流有效负载路径。?
答案 0 :(得分:1)
这似乎是解决这个问题的一种黑客方式。 Workflow Launcher功能有点受限,在这种情况下您可能会看到。但是,如果您通过不同方式启动工作流程该怎么办?
我假设如果您正在等待创建一个非结构化节点,那么就像将一个组件添加到一个解析器中一样。具体来说,我假设此操作正在发出POST请求,使用Sling默认POST servlet来解析。 (许多基本的AEM / CQ行动都是这样做的。)
如何注册SlingPostProcessor或者可以监听该操作的事情。在 代码中,您可以执行“获取页面”的工作,然后使用WorkflowSession类(及其相关API)以编程方式启动工作流实例。
通过这种方法,您可以使用正确的有效负载以编程方式关闭工作流,而不是试图破解Workflow Launcher界面的限制,更改有效负载,中间工作流。这对我来说感觉更好。
答案 1 :(得分:0)
我有同样的问题。我使用的是CQ 5.5。
分享我的经验,希望它能为您服务。
您无需更改有效负载。有效负载可以保留为 jcr:content
你需要做两件事:
确保 folder-path / jcr:content 具有属性 jcr:title 中的值。它将显示在收件箱页面的内容栏中。
对于收件箱页面中的文件夹链接,它必须为 / content // jcr:content 。问题是因为在网址之前没有添加 /damadmin.html#
任何资产或页面都不会出现此问题
解决方案是:
您需要在 /libs/cq/workflow/components/inbox/list/json.jsp 中添加以下代码
A => 添加私有方法
private String handleDamPathForFolder(Logger log, String payloadUrl, Session session, WorkItem wi)
{
try
{
if(isFolderNode(session, wi))
{
return ("/damadmin.html#"+payloadUrl);
}
}catch (Exception e)
{
log.error("Unable to handle path creation for work item: " + wi.getId(), e);
}
return payloadUrl;
}
你必须编写方法isFolderNode,如果节点是文件夹,它将返回true。
B =>替换
JSONWriterUtil.write(writer, "payload", pathBuilder.getPath(wi),JSONWriterUtil.WriteMode.BOTH, xss);
由以下
JSONWriterUtil.write(writer,"payload",handleDamPathForFolder(log,pathBuilder.getPath(wi), session, wi), JSONWriterUtil.WriteMode.BOTH, xss);
Enjoy!!!
PS:根据您的代码修改方法参数。
答案 2 :(得分:0)
如果要实际修改有效负载,则必须创建新的com.adobe.granite.workflow.exec.WorkflowData实例,然后通过调用WorkflowSession的newWorkflowData方法,可以指定新创建的有效负载。在此之后,您还必须调用WorkflowSession的updateWorkflowData来存储更改。如果您想要更改有效负载,可以将其添加为工作流的第一步。如果您只想修改收件箱项,要添加用户轻松访问内容而不是jcr:content节点的功能,您应该检查重定向逻辑:/ libs / cq / workflow / components / workitem / loadPayloadUrl。 JSP。为此添加一些额外的逻辑将导致用户在单击收件箱项的有效内容时能够访问内容。