CQ5以编程方式运行工作流 [英] CQ5 Programmatically Run a Workflow

查看:98
本文介绍了CQ5以编程方式运行工作流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在CQ中创建了一个工作流程,该工作流程需要通过XHR以编程方式运行。

I created a workflow, in CQ, that needed to be run programmatically via XHR.

您可能知道,CQ文档并不是最出色的(至少在这一点上)。我该如何以编程方式运行它?

As many of you may know, CQ Documentation isn't the greatest (at least for this point). How can I run it programmatically ?

推荐答案

一段时间后,我编写了一个运行工作流模型的servlet。

After poking around for a while I wrote a servlet that runs a Workflow Model.

下面是带注释的代码:

@Component
@Service
@Properties({
    @Property(name = "sling.servlet.paths", value = "/bin/runmodel"),
    @Property(name = "sling.servlet.methods", value = "GET")
})
public class RunWorkflowModel extends SlingSafeMethodsServlet {

    static private final Logger log = LoggerFactory.getLogger(RunWorkflowModel.class);

    @Reference
    private WorkflowService workflowService;

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {
        ResourceResolver resourceResolver = request.getResourceResolver();
        Session session = resourceResolver.adaptTo(Session.class);

        /* Get Parameters
         * @param path = path you want to run the workflow on
         * @param model = workflow model name you want to run.  Typically found in /etc/workflow/models
         */
        RequestParameterMap params = request.getRequestParameterMap();
        String path = params.getValue("path").getString();
        String model = params.getValue("model").getString();

        // Create a workflow session 
        WorkflowSession wfSession = workflowService.getWorkflowSession(session);
        try {
            // Get the workflow model
            WorkflowModel wfModel = wfSession.getModel(model);                
            // Get the workflow data
            // The first param in the newWorkflowData method is the payloadType.  Just a fancy name to let it know what type of workflow it is working with.
            WorkflowData wfData = wfSession.newWorkflowData("JCR_PATH", path);
            // Run the Workflow.
            wfSession.startWorkflow(wfModel, wfData);
        } catch (WorkflowException ex) {
            response.getWriter().write("failed");
            log.error("Error starting workflow.", ex);
        }

        response.getWriter().write("success");
    }
}

这里是Ajax调用

CQ.Ext.Ajax.request({
    url: "/bin/runmodel",
    method: "GET",
    params : { 
        "path"  : "/content/path to item you want the workflow run on",
        "model" : "/etc/workflow/models/name of model/jcr:content/model"
    },
    success: function() {
        console.log("success");
    },
    failure: function(response) {
        CQ.Notification.notifyFromResponse(response);
    }
});

这篇关于CQ5以编程方式运行工作流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆