2017-01-29 5 views
0

제목과 마찬가지로 이미 수동으로 실행할 수있는 파일 전송 복제 작업이 구성되어 있습니다.Alfresco 스크립트에서 FTR 복제 작업을 시작하는 방법

이제 웹 스크립트 또는 자바가 아닌 스크립트의 끝에서 시작하겠습니다. 그러나 나는 그것을 달성하는 방법에 대한 문서 또는 예제를 찾을 수 없습니다. 공식 문서에서 Transfer 객체를 발견했습니다. 그러나 더 이상 API 세부 정보를 찾을 수 없었습니다.

내 Alfresco 버전은 4.2입니다.

답변

1

알아내는 데 시간이 걸렸지 만 결국 두 가지 해결책을 찾았습니다.

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