如何从java类定制CQ5工作流收件箱消息有效负载



如何从java类定制cq5工作流收件箱消息有效载荷?

基本上我有一个自定义工作流,它有一个启动器来触发nt:非结构化节点创建的工作流。但是我想在工作流收件箱中显示有效负载,直到页面路径不指向JCR:content节点。(我试图在工作流开始后有一个过程步骤,并通过Java类更改收件箱消息的有效负载路径,对于下一个参与者步骤,收件箱消息应该出现直到页面路径)..有什么想法有助于在运行时更改流程步骤中的工作流有效负载路径吗?

这似乎是一种解决这个问题的hack方法。工作流启动器的功能有点有限,正如你在这个例子中可能看到的那样。但是,如果您通过不同的方式启动工作流呢?

我假设如果您正在等待创建一个nt:非结构化节点,那么它是一些操作,例如向parsys添加组件。具体地说,我假设这个操作是发出一个POST请求,使用Sling默认的POST servlet进行解析。(许多基本的AEM/CQ操作都是这样做的。)

如何注册一个SlingPostProcessor或其他可以监听该操作发生的东西。在代码中,您可以做"获取页面"的工作,然后使用WorkflowSession类(及其相关的API)以编程方式启动工作流实例。

使用这种方法,你可以通过编程的方式用正确的有效载荷启动工作流,而不是试图绕过workflow Launcher界面的限制,在工作流中更改有效载荷。我觉得这是一个更好的方法。

我也有同样的问题。我用的是cq5.5。

分享我的经验,希望对你有用。

您不需要更改负载。有效负载可以保持jcr:content


您需要做两件事:

  1. 确保文件夹路径/jcr:content具有属性jcr:title中的值。将显示在收件箱页面的内容栏。

  2. 对于收件箱页面中的文件夹链接,必须为/content//jcr:content。这个问题是因为/damadmin.html#没有加在url的前面。任何资产或页面都不会出现此问题。
    解决方案是:
    您需要在/libs/cq/workflow/components/inbox/list/json.jsp中添加以下代码


=>添加私有方法

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:根据代码修改方法参数

如果你想实际地修改有效负载,你必须创建一个新的com.adobe.granite.workflow.exe . workflowdata实例,然后通过调用WorkflowSession的newWorkflowData方法,你可以指定新创建的有效负载。在此之后,您还必须调用WorkflowSession的updateWorkflowData来存储更改。如果您想要更改负载,可以将其作为工作流的第一步添加。如果您只想修改收件箱项,以便为用户添加轻松访问内容而不是jcr:content节点的功能,则应该检查重定向逻辑:/libs/cq/workflow/components/workitem/loadPayloadUrl.jsp。在此基础上添加一些额外的逻辑,将使您的用户在单击收件箱项目的有效负载时能够访问内容。

最新更新