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