2013-03-05 19 views
13

Utworzono przepływ pracy w CQ, który musiał być uruchamiany programowo przez XHR.CQ5 Programowo uruchamianie przepływu pracy

Jak wielu z was może wiedzieć, dokumentacja CQ nie jest najlepsza (przynajmniej w tym punkcie). Jak mogę uruchomić programowo?

+1

pamiętać, że, jak to zmienia stan serwera za pomocą POST będzie lepiej. –

+0

Dzięki za wskazanie tego :) – Woodifer

Odpowiedz

16

Po pokręceniu na chwilę napisałem serwlet, który uruchamia model przepływu pracy.

Oto kod z komentarzami:

@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"); 
    } 
} 

Oto wywołania 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); 
    } 
}); 
Powiązane problemy