我遵循了这个教程:https://ecmarchitect.com/alfresco-developer-series-tutorials/workflow/tutorial/tutorial.html现在,我已经创建了一个HelloWorld工作流,并使用Alfresco Maven SDK成功地部署了它。forAlfresco 6.2这是对应的部分。bpmn打印Hello World!服务器日志:
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1">
<extensionElements>
<activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
<activiti:field name="script">
<activiti:string>logger.log("Hello, World!");</activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</sequenceFlow>
但是,我需要对https://google.com进行API调用,只是为了测试目的。但是,当我尝试这个:
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1">
<extensionElements>
<activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
<activiti:field name="script">
<activiti:string>
var url = "https://google.com";
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
logger.log(xhr.status);
logger.log(xhr.responseText);
}};
xhr.send();
</activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</sequenceFlow>
我得到了这个异常:
org.alfresco.scripts.ScriptException: 01030043 Failed to execute supplied script: 01030042 ReferenceError: "XMLHttpRequest" is not defined. (AlfrescoJS#3)
at org.alfresco.repo.jscript.RhinoScriptProcessor.executeString(RhinoScriptProcessor.java:287)
at org.alfresco.repo.processor.ScriptServiceImpl.executeString(ScriptServiceImpl.java:293)
at org.alfresco.repo.processor.ScriptServiceImpl.executeScriptString(ScriptServiceImpl.java:200)
调查,我检查了这个帖子:https://hub.alfresco.com/t5/alfresco-content-services-forum/calling-rest-service-via-rule-script/td-p/32830。似乎(从我的理解),我需要使API调用使用Java类,然后,不知何故,调用该对象从js上的。bpmn文件。所以:
- 你能告诉我在哪里我必须在我的Maven项目中创建这个类吗?是一个包裹吗?你能告诉我具体的制作步骤吗?
- 你能把实现这个类的代码粘贴到这里吗?
- 你能告诉我如何从js中调用java对象吗?bpmn 文件?
重要:我需要以某种方式记录API调用响应。它可以是你想要的日志,但我需要知道谷歌是否相应地回答我。
提前感谢!
首先,您必须创建一个alfresco maven项目。然后你必须按照alfresco文档创建一个java支持的webscript。
下面是web脚本desc.xml的示例。
<webscript>
<shortname>BPM Review</shortname>
<description>Review and approve a BPM task</description>
<url>/someco/bpm/review?id={idArgument}&action={transArgument}</url>
<format default="html">extension</format>
<authentication runas="admin">guest</authentication>
<transaction>required</transaction>
</webscript>
// Dependencies
private WorkflowService workflowService;
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status) {
final String id = req.getParameter("id");
final String action = req.getParameter("action");
if (id == null || action == null) {
logger.debug("Email, ID, action, or secret not set");
status.setCode(400);
status.setMessage("Required data has not been provided");
status.setRedirect(true);
}
Map<String, Object> model = new HashMap<String, Object>();
logger.debug("About to update task, id:" + id + " with outcome:" + action);
Map<QName, Serializable> props = new HashMap<QName, Serializable>();
props.put(QName.createQName(SomeCoWorkflowModel.NAMESPACE_SOMECO_WORKFLOW_CONTENT_MODEL, SomeCoWorkflowModel.PROP_APPROVE_REJECT_OUTCOME), action);
workflowService.updateTask(id, props, null, null);
workflowService.endTask(id, action);
logger.debug("Task updated and ended.");
return model;
}
然后你可以在任何地方调用webscript作为Rest调用,如下所示。
http://localhost: 8080/alfresco/服务/someco/bpm/审查?id = activiti $