我实现了工作流程,但是很高兴知道客户端库是否提供了允许挂钩的挂钩。当工作流程被触发并完成时,应该显示CQ.Notification。或者我是否需要自己实施一个民意调查库?
答案 0 :(得分:0)
据我所知,除了查看此处之外,没有内置的CQ区域可以看到什么时候完成:
http://yoursite.com:port/libs/cq/workflow/content/console.html
在那里,您可以转到“实例”标签,看看发生了什么。
在我工作的一个应用程序中,我们最终编写了自己的方法,根据我们的工作流程向我们发送通知(我们的工作流程与之相关 - 从工作流模型区域,您可以将流程设置为你已经加入CQ的servlet)。这是我们的servlet的主要代码,它捕获正在处理的进程,然后调用我们的方法根据它找到的内容给我们发送电子邮件:
import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.exec.WorkflowProcess;
import com.day.cq.workflow.metadata.MetaDataMap;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import java.util.Arrays;
public class YourServletName implements WorkflowProcess {
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
session = workflowSession.getSession();
final WorkflowData data = workItem.getWorkflowData();
String type = data.getPayloadType();
String[] argStrings = args.get("PROCESS_ARGS", ARG_UPDATED).split(",");
String reason = argStrings[0];
String baseUrl = argStrings[1];
try {
if (type.equals(TYPE_JCR_PATH) && data.getPayload() != null) {
String resourcePath = data.getPayload().toString();
logger.info("Send Notification that {} has been {}.", resourcePath, reason.toLowerCase());
if (resourcePath != null && !resourcePath.isEmpty()) {
ResourceInfo resourceInfo = new ResourceInfo(resourcePath, baseUrl);
sendEmail(resourceInfo, reason);
}
}
} catch (EmailException ex) {
logger.warn("Failed to send Email");
throw new WorkflowException(ex);
} catch (MailingException ex) {
logger.warn("Failed to send Email");
throw new WorkflowException(ex);
}
}
}
您可以在Extending Workflow Functionality.
的文档中找到更多信息查看该页面上的第一个代码块,这将使您最好地了解如何实现自定义工作流处理程序。
修改强>
如果你想在前端看到它,你可以做一个AJAX调用来获取当前正在运行的工作流的JSON列表 - 你可以点击这个网址:
http://localhost:4502/etc/workflow/instances.RUNNING.json
然后你可以循环浏览它们,看看你的是否在那里。这不是很好,因为它们都只是按ID列出。我建议使用querybuilder,或者再次,只是做一个AJAX GET。这是一个例子:
1_group.0_path=/etc/workflow/instances
2_group.0_type=cq:Workflow
0_group.property.2_value=COMPLETED
0_group.property=status
0_group.property.and=true
3_group.property=modelId
3_group.property.2_value=/etc/workflow/models/your-model-name/jcr:content/model
3_group.property.and=true
然后URL看起来像这样:
http://yoursiteurl:port/libs/cq/search/content/querydebug.html?_charset_=UTF-8&query=http%3A%2F%2Fyoursiteurl%3Aport%3F%0D%0A1_group.0_path%3D%2Fetc%2Fworkflow%2Finstances%0D%0A2_group.0_type%3Dcq%3AWorkflow%0D%0A0_group.property.2_value%3DRUNNING%0D%0A0_group.property%3Dstatus%0D%0A0_group.property.and%3Dtrue%0D%0A3_group.property%3DmodelId%0D%0A3_group.property.2_value%3D%2Fetc%2Fworkflow%2Fmodels%2Fyour-model-name%2Fjcr%3Acontent%2Fmodel%0D%0A3_group.property.and%3Dtrue
它很难看,但它可以为您提供所需的结果,然后您可以解析它们以获得您需要的更多信息。