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

Javascript 使用ECMA脚本向节点(页面)添加新属性,javascript,aem,jcr,Javascript,Aem,Jcr,我需要在页面激活时向页面添加属性。我已决定设置一个工作流流程,在激活步骤之前执行相同的操作。我的自定义工作流步骤(激活步骤之前的步骤)使用ECMA脚本来实现这一点。这是我到目前为止所拥有的 var workflowData = graniteWorkItem.getWorkflowData(); if (workflowData.getPayloadType() == "JCR_PATH") { var path = workflowData.getPayload().toString(

我需要在页面激活时向页面添加属性。我已决定设置一个工作流流程,在激活步骤之前执行相同的操作。我的自定义工作流步骤(激活步骤之前的步骤)使用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();
        }
}
请注意,它不是granite*,而是workItem和workSession。还要注意WorkflowSession没有adapto()方法(除非我使用的是比您旧的cq版本)。它已经有一个getSession()方法作为接口的一部分

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


认可的。关于使用cq:PageContent的最后一点是它为我做了什么。
    var node = jcrsession.getNode(path).getNode("jcr:content");