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

标签 javascript aem 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)没有创建。

我做错了什么?

最佳答案

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

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

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

关于javascript - 使用 ECMA 脚本向节点(页面)添加新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527241/

相关文章:

javascript - 在弹出窗口中使用延迟加载

java - 如何访问存储在 jcr 节点中的字符串数组?

javax.jcr.* javadoc 丢失

javascript - jQuery Validate Remote - 检查电子邮件是否已经存在

javascript - 循环的文件预览可以很好地处理一个项目,两个或多个文件重复最后一个文件

javascript - 编写这样的代码来处理错误并在读取文件时解析 JSON 数据是否安全

java - 关于 Adob​​e AEM 的查询

xss - 如何在 cq 5.5 中配置 antisamy?

webserver - 调度程序和网络服务器有什么区别

lucene - Jackrabbit 针对 UUID 运行查询