【问题标题】:Can't update a cq5 workflow to get the current state.无法更新 cq5 工作流以获取当前状态。
【发布时间】:2014-05-02 11:36:20
【问题描述】:

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

【问题讨论】:

  • 不确定,但我认为您要做的是基于元数据映射中传递的某些参数,您正在决定是继续下一步还是返回上一步,理想情况下这些逻辑应该是写在工作流过程模型中,而不是在单个工作流过程中,即在代码中。

标签: java servlets workflow aem crx


【解决方案1】:

我认为@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());
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多