如何从 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);
如果您更进一步,您还可以异步调用并获得回调,但我还没有对此进行试验。
在主题中,我有一个已配置的文件传输复制作业,我可以手动 运行。
现在,我想在脚本(不是 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);
如果您更进一步,您还可以异步调用并获得回调,但我还没有对此进行试验。