2017-01-19 30 views

回答

0

經過一番研究,我發現如何啓動編程方式部署:

在這個特定的情況下,我在一個工作流程內完成了:

 @Reference 
     private RolloutManager rolloutManager; 
     @Reference 
     private ResourceResolverFactory resourceResolverFactory; 

     private Session session; 
     private ResourceResolver resolver; 
     private PageManager pageManager; 

     public class MyWorkflow implements WorkflowProcess { 
      @Override 
      public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap dataMap) throws WorkflowException { 
       //get the payload page from the workflow data 
       WorkflowData workflowData = workItem.getWorkflowData(); 
       String payload = workflowData.getPayload().toString(); 

       final Map<String, Object> authInfo = new HashMap<String, Object>(); 
       authInfo.put(JcrResourceConstants.AUTHENTICATION_INFO_SESSION, workflowSession.getSession()); 
       resolver = resourceResolverFactory.getResourceResolver(authInfo); 

       //Get Instance of PageManager 
       pageManager = resolver.adaptTo(PageManager.class); 
       final Page targetPage = pageManager.getPage(payload); 

       final RolloutParams params = new RolloutParams(); 
       params.isDeep = false; 
       params.master = targetPage; 
       params.reset = false; 
       params.trigger = RolloutManager.Trigger.ROLLOUT; 
       params.delete = false; 
       rolloutManager.rollout(params); 

      } 
     } 

這可以按預期工作,將頁面推出到相關的活動副本

2

這是一個代碼片段,可以用於從JSP級別開始的部署,與在JAVA級別中執行相同的方式。

<%@page import="com.day.cq.wcm.msm.api.RolloutManager"%> 

<% Page rolloutthispage = pageManager.getPage("/content/geometrixx/en/toolbar"); //source page 
RolloutManager.RolloutParams rolloutparams = new RolloutManager.RolloutParams(); 
rolloutparams.master = rolloutthispage; 
rolloutparams.isDeep = true; 
//rolloutmanager is an OSGI service so using here sling.getService to have a reference 
com.day.cq.wcm.msm.api.RolloutManager rolloutManager = sling.getService(com.day.cq.wcm.msm.api.RolloutManager.class); 
rolloutManager.rollout(rolloutparams); 
%> 

來測試此代碼段

我創建從/content/geometrixx/en/現場副本/content/geometrixx/in 新增/更新了一些文本組件的數據如下圖所示 text rollout

創建一個組件只是用於從其他項目頁面調用這個稱爲JSP邏輯的jsp邏輯。一旦jsp邏輯被調用,該卷展就會受到/content/geometrixx/in現場拷貝的影響。 live copy text updated

看一看下面的API來使用更多選項 RolloutManagerTriggerRolloutParams

希望它可以幫助

+0

感謝您的傢伙,還解決了如何使用RolloutManager在解答您的答案時做到這一點,我也會提供我的代碼和答案。 –

+0

我想指出''rolloutManager.rollout(ResourceResolver解析器,LiveRelationship關係,布爾重置,布爾autoSave)''不完全像'rolloutManager(RolloutManager.RolloutParams params)',前者應該避免。 –