我必须在哪里定义 Alfresco 中的连接器?我可以从“.bpmn”文件中使用它们吗?

Where do I have to define connectors in Alfresco? Can I use them from a ".bpmn" file?

下午好!我正在尝试从 Alfresco 与工作流中的 RESTful ws 进行通信。有人告诉我,使用连接器来完成它是个好主意。我在 ACS 中创建一个 wf 作为 .bpmn 文件,所以有 3 个问题:

  1. 我必须在什么文件中定义连接器?,我想像这个 js 脚本一样做:
var url = "https://google.com";

var xhr = new XMLHttpRequest();
xhr.open("GET", url);

xhr.onreadystatechange = function () {
   if (xhr.readyState === 4) {
      console.log(xhr.status);
      console.log(xhr.responseText);
   }};

xhr.send();
  1. 我可以直接使用 .bpmn 文件中的连接器吗?能否举例说明如何使用它?

  2. 你能给我一个例子来进行 GETPOST 调用吗?

提前致谢!

连接器是网络脚本框架的一部分。 Alfresco Share 层中有一个 Web 脚本框架,存储库层中有一个 Web 脚本框架。

在网络脚本中,您使用“远程”对象连接到远程 RESTful 端点。例如,通过项目 ID 从 API 获取一些项目信息的代码可能如下所示:

    var connector = remote.connect("someapp");
    var resp = connector.get("/someapp/projects/" + projectId);
    if (resp.status == 200) {
        obj = JSON.parse(resp);
        model.result = obj;
        model.startDateFormatted = getFormattedDate(model.result.StartDate);
        model.endDateFormatted = getFormattedDate(model.result.EndDate);
    }

那么“someapp”连接器是在哪里定义的?您可以将其放在 Alfresco 配置文件中,例如共享自定义配置。在基于 Alfresco SDK 的项目中,该文件位于 ./src/main/resources/META-INF/share-config-custom.xml:

下的共享模块中
<config evaluator="string-compare" condition="Remote">
    <remote>
        <endpoint>
            <id>someapp</id>
            <name>Some Remote App</name>
            <connector-id>http</connector-id>
            <endpoint-url>https://someapp.example.org</endpoint-url>
        </endpoint>
    </remote>
</config>

您面临的挑战是您 运行 在 Activiti 工作流中,而不是网络脚本中。而且,除此之外,远程对象在回购层上被禁用,这也是您所在的位置 运行。它可以重新启用,但我手边没有这些步骤,而且它对你没有任何帮助。

因此,我的建议是使用 Java delegate in your workflow. From the Java delegate you can do anything you want, including leveraging something like the Apache HTTP Client 连接到您需要调用的 API,而不是使用上述任何方法。

您可能有一个代表 class 像:

public class RemoteApiInvocationDelegate implements JavaDelegate {
    private Logger logger = LoggerFactory.getLogger(RemoteApiInvocationDelegate.class);

    public void execute(DelegateExecution execution) throws Exception {
        HttpClient httpClient = Utils.noCertClient();

        HttpGet httpGet = new HttpGet("http://someapp.example.org/someapp/projects/12345");
        HttpResponse response = httpClient.execute(httpGet);
        int status = response.getStatusLine().getStatusCode();
        logger.info("Response Status Code: " + status);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        logger.info(sb.toString());
    }
}

您如何处理响应,例如解析它、提取一些数据并将其设置在流程变量上,由您决定。

杰夫的回答是最完整的。然而,这些是一些关于 Java 代表的有趣视频:

https://www.youtube.com/watch?v=phju1Lru7kI&list=PLOW8iKnFZkm_Eq8MPilFin-lwbCg5J15U&index=1&t=3s

https://www.youtube.com/watch?v=eOL_OKMylfw&list=PLOW8iKnFZkm_Eq8MPilFin-lwbCg5J15U&index=2&t=221s

还有这个post:

https://www.armedia.com.mk/spring-managed-alfresco-custom-activiti-java-delegates/