13
XHR을 통해 프로그래밍 방식으로 실행해야하는 워크 플로를 CQ에서 만들었습니다.CQ5 프로그래밍 방식으로 워크 플로 실행
많은 분들께서 알 수 있듯이 CQ 문서는 (적어도이 시점에서는) 가장 크지 않습니다. 어떻게 프로그래밍 방식으로 실행할 수 있습니까?
XHR을 통해 프로그래밍 방식으로 실행해야하는 워크 플로를 CQ에서 만들었습니다.CQ5 프로그래밍 방식으로 워크 플로 실행
많은 분들께서 알 수 있듯이 CQ 문서는 (적어도이 시점에서는) 가장 크지 않습니다. 어떻게 프로그래밍 방식으로 실행할 수 있습니까?
잠시 파고 들자 나는 워크 플로우 모델을 실행하는 서블릿을 작성했습니다.
다음@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");
}
}
이가 POST를 사용하여 서버의 상태를 변경으로 더 좋을 것이라고 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);
}
});
주에게 있습니다 : 여기
는 주석이있는 코드입니다. –지적 해 주셔서 감사합니다 :) – Woodifer