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

时间:2017-01-29 16:49:19

标签: alfresco alfresco-share

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

现在,我想在脚本结束时(不是Web脚本或Java)启动它。但是我找不到关于如何实现这一目标的文档或示例。我在官方文档中发现了一个Transfer对象,但我还没有找到更多的API细节。

我的Alfresco版本是4.2。

2 个答案:

答案 0 :(得分:1)

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

第一个解决方案

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

如果您熟悉Alfresco,可以通过进入Alfresco文件夹并打开WEB-INF/classes/alfresco/replication-services-context.xml来追踪到impl类。我已经猜到了文件名,但您可以使用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数组。 / p>

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

如果你走得更远,你也可以异步调用并进行回调,但我还没有进行实验。

答案 1 :(得分:0)

注意 - 我没有使用FTR,所以我还没有真正测试它,但我知道Alfresco的相似部分是如何运作的!

从脚本开始,您需要利用FTR作为Action提供的优势。如果您查看FileTransferActionExecutor的源代码,那么您会看到操作名称为ftr-action。 (也从spring context file确认)

接下来,您需要按照slightly poorly documented Script Action docs为此创建action,配置并运行

您需要执行以下操作:

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

这将创建一个FTR操作,配置它以运行FTR,然后运行它直到它完成。如果您想在后台运行

,也可以使用executeAsynchronously