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

add a new property to a node(page) using ECMA script

本文关键字:添加 新属性 属性 ECMA 页面 节点 使用 脚本      更新时间:2023-09-26

我需要为页对页激活添加一个属性。我决定在激活步骤之前建立一个工作流流程。我的自定义工作流步骤(激活步骤之前的步骤)使用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。还要注意,WorkflowSession没有adapto()方法(除非我使用的是比您旧的cq版本)。它已经有一个getSession()方法作为接口的一部分。

即使说了这么多,但由于我通过工作流发送的内容,这也失败了——请确保要写入的节点接受这些属性名称。cq:Page是非常严格的,但cq:PageContent不是(所以检索jcr:content子节点,假设您针对cq:Page或dam:Asset节点启动工作流):

    var node = jcrsession.getNode(path).getNode("jcr:content");