2017-01-29 37 views
0

件名と同じように、手動で実行できるファイル転送レプリケーションジョブが既に設定されています。AlfrescoスクリプトからFTRレプリケーションジョブを開始する方法

ここでは、スクリプトの終わり(WebスクリプトまたはJavaではなく)で開始したいと考えています。しかし、私はこれを達成するための文書や例を見つけることができません。公式ドキュメントにTransferオブジェクトがありますが、これ以上のAPIの詳細は見つかりませんでした。

私のAlfrescoバージョンは4.2です。

答えて

1

それを理解するのにはしばらく時間がかかりましたが、結局2つの解決策が見つかりました。

Root Objects一部に関する公式ドキュメントの最初のソリューション

org.alfresco.repo.replication.script.ScriptReplicationServiceにマップreplicationServiceありますが、それは本当に多くの言うことはありません。

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を開く場合は、次のターゲットから呼び出すことができるレプリケーションジョブで構成されたターゲットの名前とreplicate(ReplicationDefinition replicationDefinition)ですloadReplicationDefinitions(String target)スクリプト

最後に、これはレプリケーションジョブを呼び出すフラグメントです。

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); 

それはあなたのコンテンツが転送されます。

第二の溶液

もう一つのは容易ではないオプションは、それはあまりにも動作しますが、その後は手動ScriptNodesのあなたの配列を構築する必要があり、レプリケーションサービスが依存するオブジェクトであるtransferルートオブジェクトを呼び出すことです転送される。

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

さらに進むと、非同期で呼び出してコールバックすることもできますが、まだ試していません。

0

注 - 私はFTRを使用していないので、実際にテストしていませんが、Alfrescoの似たようなビットが機能することがわかります!

スクリプトから始めて、FTRをアクションとして利用できるようにする必要があります。 FileTransferActionExecutorのソースコードを見ると、アクション名がftr-actionであることがわかります。

次(またspring context fileから確認された)、あなたはあなたが好きな何かをする必要があります、このためactionを作成し、それを設定し、

それを実行するためにslightly poorly documented Script Action docsに従ってくださいする必要があります。

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

これは、FTRアクションを作成し、実行するFTRで設定し、完了するまで実行します。 executeAsynchronouslyは、バックグラウンドで実行したい場合にも利用できます。

+0

uhm ...私はまだソースコードを見ていませんが、Javascriptコンソールから実行するとこのエラーが発生します: "ftr-actionが定義されていません" – Leonardo

+0

https: //github.com/Alfresco/community-edition/blob/master/projects/file-transfer-receiver/config/alfresco/ftr-action-context.xmlおよびhttps://github.com/Alfresco/community-edition/ blob/master/projects/file-transfer-receiver/source/java/org/alfresco/repo/transfer/fsr/FileTransferActionExecuter.javaの両方が呼び出されます。 FTRコードのどのバージョンをインストールしましたか? – Gagravarr

+0

私のAlfrescoのバージョンは4.2.fです。しかし、私がソースコードを見ると、「テスト目的のためだけに」というコメントがあります。このクラスが呼び出されることを意図していない可能性はありますか?また、Javascriptでは特定の種類のアクションを呼び出す際にいくつかの制限がありますか? – Leonardo

関連する問題