如何从Alfresco工作流中调用API到REST ?



我遵循了这个教程: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文件。所以:

  1. 你能告诉我在哪里我必须在我的Maven项目中创建这个类吗?是一个包裹吗?你能告诉我具体的制作步骤吗?
  2. 你能把实现这个类的代码粘贴到这里吗?
  3. 你能告诉我如何从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}&amp;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 $

最新更新