使用 ECMA 脚本向节点(页面)添加新属性

2024-05-24

我需要在页面激活时向页面添加属性。我决定建立一个工作流程,在激活步骤之前执行相同的操作。我的自定义工作流程步骤(激活步骤之前的步骤)使用 ECMA 脚本来实现此目的。这是我到目前为止所拥有的。

var workflowData = graniteWorkItem.getWorkflowData();
if (workflowData.getPayloadType() == "JCR_PATH") {
    var path = workflowData.getPayload().toString();
    var jcrsession = graniteWorkflowSession.adaptTo(Packages.javax.jcr.Session);
    var node = jcrsession.getNode(path);
    if (!node.hasProperty("foo")){
    var cal = Packages.java.util.Calendar.getInstance();
            node.setProperty("foo", cal);
            node.save();
         }
if (!node.hasProperty("foo2")){
            node.setProperty("foo2", "2020-08-26T22:30:00.000+05:30");
            node.save();
        }
}

但是,当我在页面上运行工作流程时,需要创建的属性(在本例中为 foo 和 foo2)不会被创建。

我究竟做错了什么?


你试过跟踪你的error.log吗?我尝试了你的脚本,但它不起作用——但它的这个特定版本确实有效:

var workflowData = workItem.getWorkflowData();
if (workflowData.getPayloadType() == "JCR_PATH") {
    var path = workflowData.getPayload().toString();
    var jcrsession = workflowSession.getSession();
    var node = jcrsession.getNode(path);
    if (!node.hasProperty("foo")){
    var cal = Packages.java.util.Calendar.getInstance();
            node.setProperty("foo", cal);
            node.save();
         }
if (!node.hasProperty("foo2")){
            node.setProperty("foo2", "2020-08-26T22:30:00.000+05:30");
            node.save();
        }
}

请注意,它只是 workItem 和 workSession,而不是 Granite*。另请注意,WorkflowSession 没有 adjustmentTo() 方法(除非我使用的 cq 版本比您旧)。它已经有一个 getSession() 方法作为接口的一部分。

即使这一切都说了又做了,这还是失败了,因为我通过工作流程发送的内容 - 确保您尝试写入的节点接受这些属性名称。 cq:Page 的限制非常严格,但 cq:PageContent 则不然(因此检索 jcr:content 子节点,假设您要针对 cq:Page 或 dam:Asset 节点启动工作流程):

    var node = jcrsession.getNode(path).getNode("jcr:content");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ECMA 脚本向节点(页面)添加新属性 的相关文章

随机推荐