0

我正在按照教程编写 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前进到下一步之后,我如何刷新工作流会话以达到当前步骤信息。

4

1 回答 1

0

我认为@yashahuja 是正确的。我正在四处寻找,在 aem“使用工作流”页面上,我发现了一些关于使用 MetaDataMap 持久化数据抛出工作流步骤的信息。

从这个页面:http ://dev.day.com/docs/en/cq/current/workflows/wf-extending.html

“使用工作流元数据来保存工作流生命周期中所需的信息。工作流步骤的一个常见要求是保存数据以供将来在工作流中使用,或者检索保存的数据。

工作流元数据存储在 MetaDataMap 对象中。Java API 提供了返回 MetaDataMap 对象的 Workflow.getMetaDataMap 方法。此外,WorkItem.getWorkflowData 方法返回一个提供相同 getMetaDataMap 对象的 WorkflowData 对象。

因此,工作流 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());
    }
于 2014-05-09T15:37:22.333 回答