如何从 Alfresco 脚本启动 FTR 复制作业

How to start an FTR Replication Job from Alfresco Script

在主题中,我有一个已配置的文件传输复制作业,我可以手动 运行。

现在,我想在脚本(不是 Web 脚本或 Java)的末尾启动它。但是我找不到关于如何实现这一点的文档或示例。我在官方文档中发现了一个 Transfer 对象,但我无法找到更多 API 详细信息。

我的 Alfresco 版本是 4.2。

注意 - 我不使用 FTR,所以我还没有实际测试过它,但我知道 Alfresco 的相似部分是如何工作的!

从脚本开始,您需要利用 FTR 作为动作可用的优势。如果您查看 FileTransferActionExecutor then you'll see that the action name is ftr-action. (Also confirmed from the spring context file)

的源代码

接下来需要按照slightly poorly documented Script Action docs to create an action这个进行配置,运行

您需要执行以下操作:

var ftr = actions.create("ftr-action");
ftr.parameters["ftr"] = "name of the ftr to run";
ftr.execute(nodeRef);

这将创建一个 FTR 操作,将 FTR 配置为 运行,然后 运行 直至完成。 executeAsynchronously 如果你想在后台 运行 它也可用

我花了一段时间才弄明白,但最终我找到了两个解决方案。

第一个解

在关于 Root Objects 部分的官方文档中,有一个 replicationService 映射到 org.alfresco.repo.replication.script.ScriptReplicationService 但它实际上并没有说明什么。

如果您熟悉 Alfresco,可以通过进入 Alfresco 文件夹并打开 WEB-INF/classes/alfresco/replication-services-context.xml 来找到实现 class。我猜到了文件名,但您可以使用 replicationService 作为关键字搜索所有 xml 文件。这是相关部分:

   <bean id="replicationService" class="org.alfresco.repo.replication.ReplicationServiceImpl" >
      <property name="actionService" ref="ActionService"/>
      <property name="scheduledPersistedActionService" ref="scheduledPersistedActionService" />
      <property name="replicationDefinitionPersister" ref="replicationDefinitionPersister" />
   </bean>

如果你打开源代码或者 API 你可以发现相关的方法: loadReplicationDefinitions(String target) 其中 target 是复制作业中配置的目标的名称 replicate(ReplicationDefinition replicationDefinition) 其中可以从脚本调用。

最后,这是调用复制作业的片段。

var jobs = replicationService.loadReplicationDefinitions('MyTargetName');
var job = jobs[0]; // I only have one target with that name, it safe to get 0
replicationService.replicate(job);

就是这样,您的内容已转移。

第二种解法

另一个不太容易的选择是调用 transfer 根对象,它是复制服务所依赖的对象,它也可以工作,但是您必须手动构建要传输的 ScriptNodes 数组.

var nodes = // your array of ScriptNodes
transfer.transfer('MyTargetName', nodes);

如果您更进一步,您还可以异步调用并获得回调,但我还没有对此进行试验。