добавить новое свойство к узлу (странице) с помощью скрипта ECMA

Мне нужно добавить свойство на страницу при активации страницы. Я решил настроить рабочий процесс, который делает то же самое перед этапом активации. В моем пользовательском шаге рабочего процесса (тот, что перед шагом активации) для достижения этой цели используется сценарий 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), не создаются.

Что я делаю не так?


person bongman1612    schedule 30.08.2013    source источник


Ответы (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:Page очень ограничен, а cq:PageContent — нет (поэтому извлеките подузел jcr:content, предполагая, что вы запускаете рабочие процессы для узлов cq:Page или dam:Asset):

    var node = jcrsession.getNode(path).getNode("jcr:content");
person Kaiser Shahid    schedule 10.09.2013
comment
принятый. последняя часть об использовании cq:PageContent помогла мне. - person bongman1612; 13.09.2013