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

时间:2013-08-30 07:25:34

标签: javascript cq5 jcr

我需要在页面激活时向页面添加属性。我决定在激活步骤之前设置一个相同的工作流程。我的自定义工作流程步骤(激活步骤之前的步骤)使用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)。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你试过拖尾你的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没有adaptTo()方法(除非我使用的是比您更旧的cq版本)。它已经有一个getSession()方法作为接口的一部分。

即使这一切都说完了,但由于我通过工作流发送的内容失败了 - 请确保您尝试写入的节点接受这些属性名称。 cq:页面是非常严格的,但是cq:PageContent不是(所以检索jcr:content子节点,假设您正在针对cq:Page或dam:Asset节点启动工作流程):

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