Не удается обновить рабочий процесс cq5, чтобы получить текущее состояние.

Я следую этому учебнику, чтобы написать рабочий процесс для 3 форм HTML (без использования CQ5 компонент формы и кнопка отправки рабочего процесса CQ5). Я использую этот код для написания обработки шагов процесса для моего рабочего процесса:

public class MyProcess implements WorkflowProcess {

    public void execute(WorkItem item, WorkflowSession session,
            MetaDataMap map) throws WorkflowException {
        boolean advanced = false;

        Boolean goBack = map.get("goBack", Boolean.class);
        List<Route> routes = null;
        if (goBack == null || goBack == false) {
             routes = session.getRoutes(item);
        } else {
            routes = session.getBackRoutes(item);
        }

        for (Route route : routes) {
            LOG.info("===============================");
            LOG.info("Rout name: " + route.getName());
            LOG.info("Destinations: ");
            for (WorkflowTransition dest: route.getDestinations()) {
                LOG.info("dest: " + dest.getTo().getTitle());
            }
            LOG.info("===============================");
            if (route.hasDefault()) {
                String fromTitle = item.getNode().getTitle();
                String toTitle = route.getDestinations().get(0).getTo()
                        .getTitle();
                session.complete(item, route);
                LOG.info("===============================");
                LOG.info(item.getId() + " advanced from " + fromTitle
                        + " to " + toTitle);
                LOG.info("===============================");
                advanced = true;
            }
        }
        // fallback if no route was marked as default
        if (!advanced) {
            session.complete(item, routes.get(0));
            String fromTitle = item.getNode().getTitle();
            String toTitle = routes.get(0).getDestinations().get(0).getTo()
                    .getTitle();
            LOG.info("===============================");
            LOG.info(item.getId() + " advanced from " + fromTitle + " to "
                    + toTitle);
            LOG.info("===============================");
        }
    }

}

Мой вопрос: после того, как я использую session.complete для перехода к следующему шагу, как я могу обновить сеанс рабочего процесса, чтобы получить информацию о текущем шаге.


person Tien Nguyen    schedule 02.05.2014    source источник
comment
Не уверен, но я думаю, что то, что вы пытаетесь сделать, основано на каком-то параметре, переданном в карте метаданных, вы решаете, перейти ли к следующему шагу или вернуться к предыдущему шагу, в идеале эта логика должна быть записана в модели процесса рабочего процесса, а не в отдельном рабочем процессе, т. е. в коде.   -  person yash ahuja    schedule 05.05.2014


Ответы (1)


Я думаю, что @yashahuja прав. Я ковырялся и на странице aem «работа с рабочим процессом» я нашел некоторую информацию о сохранении шагов рабочего процесса передачи данных с использованием MetaDataMap.

С этой страницы: http://dev.day.com/docs/en/cq/current/workflows/wf-extending.html

"Используйте метаданные рабочего процесса для сохранения информации, которая требуется в течение всего срока службы рабочего процесса. Общим требованием шагов рабочего процесса является сохранение данных для будущего использования в рабочем процессе или получение сохраненных данных.

Метаданные рабочего процесса хранятся в объекте MetaDataMap. API Java предоставляет метод Workflow.getMetaDataMap, который возвращает объект MetaDataMap. Кроме того, метод WorkItem.getWorkflowData возвращает объект WorkflowData, предоставляющий тот же объект getMetaDataMap.

Поэтому объект MetaDataMap рабочего процесса доступен для службы OSGi или сценария ECMA компонента шага."

пример:

public void execute(WorkItem item, WorkflowSession session, MetaDataMap args) throws WorkflowException {

    MetaDataMap wfd = item.getWorkflow().getMetaDataMap();

    wfd.put("mykey", "My Step Value");

    Set<String> keyset = wfd.keySet();
    Iterator<String> i = keyset.iterator();
    while (i.hasNext()){
        Object key = i.next();
        log.info("The workflow medata includes key {} and value {}",key.toString(),wfd.get(key).toString());
    }
person Brodie    schedule 09.05.2014