在主题中,我有一个已配置的文件传输复制作业,我可以手动运行。
现在,我想在脚本结束时(不是Web脚本或Java)启动它。但是我找不到关于如何实现这一目标的文档或示例。我在官方文档中发现了一个Transfer对象,但我还没有找到更多的API细节。
我的Alfresco版本是4.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