This conversation has been locked due to inactivity. Please create a new post.
This conversation has been locked due to inactivity. Please create a new post.
Hi All,
I need to call my Custom rollout config from a custom workflow process step.
Can someone help me with this?
Thanks in Advance
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @Bimmi__Soi, you can use one of below implementations inside your workflow step. Below solutions assume that you already have live copy, and that you have below information on workflow step level:
First option simply sets new rollout configuration using Sling API, and runs rollout via RolloutManager.
import com.day.cq.wcm.msm.api.LiveRelationshipManager;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.msm.api.RolloutManager;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.Reference;
@Reference
private LiveRelationshipManager liveRelationshipManager;
@Reference
private RolloutManager rolloutManager;
// setting string array that will keep path to rollout configuration
String [] cqRolloutConfigs = new String[1];
cqRolloutConfigs[0] = "/path/to/rollout/config";
// get target resource by path - live copy
Resource targetResource = resourceResolver.getResource("/content/path/to/target/resource");
// get resource that includes cq:rolloutConfigs property
Resource cqLiveSyncConfigResource = resourceResolver.getResource(targetResource.getPath() + "/jcr:content/cq:LiveSyncConfig");
// setting new custom rollout configuration
ModifiableValueMap valueMap = cqLiveSyncConfigResource.adaptTo(ModifiableValueMap.class);
valueMap.put("cq:rolloutConfigs", cqRolloutConfigs);
resourceResolver.commit();
// running rollout
if (liveRelationshipManager.hasLiveRelationship(targetResource)) {
LiveRelationship liveRelationship = liveRelationshipManager.getLiveRelationship(targetResource, true)
if (liveRelationship != null) {
rolloutManager.rollout(resourceResolver, liveRelationship, true, true);
}
}Second option use MSM API to handle all needed actions.
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.msm.api.LiveRelationshipManager;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.msm.api.RolloutConfig;
import com.day.cq.wcm.msm.api.RolloutManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.Reference;
@Reference
private LiveRelationshipManager liveRelationshipManager;
@Reference
private RolloutManager rolloutManager;
RolloutConfigManager rolloutConfigManager = resourceResolver.adaptTo(RolloutConfigManager.class);
// getting rollout config that shuld be used for rollout
RolloutConfig rolloutConfig = rolloutConfigManager.getRolloutConfig("/path/to/rollout/config");
// live copy target
Resource targetResource = resourceResolver.getResource("/content/path/to/target");
// blueprint
Resource sourceResource = resourceResolver.getResource("/content/path/to/source");
LiveRelationship liveRelationship = null;
if (sourceResource != null && targetResource != null && rolloutConfig != null) {
Page sourcePage = sourceResource.adaptTo(Page.class);
Page targetPage = targetResource.adaptTo(Page.class);
if (sourcePage != null && targetPage != null) {
if (liveRelationshipManager.hasLiveRelationship(targetResource)) {
// to modify existing rollout config, current live copy/relationship needs to be removed
liveRelationshipManager.endRelationship(targetResource, true);
}
// creating new live copy to use new rollout config
liveRelationship = liveRelationshipManager
.establishRelationship(sourcePage, targetPage, true, true, rolloutConfig);
if (liveRelationship != null) {
rolloutManager.rollout(resourceResolver, liveRelationship, true, true);
}
}
}I hope that it will be good starting point for you.
Hi @Bimmi__Soi, you can use one of below implementations inside your workflow step. Below solutions assume that you already have live copy, and that you have below information on workflow step level:
First option simply sets new rollout configuration using Sling API, and runs rollout via RolloutManager.
import com.day.cq.wcm.msm.api.LiveRelationshipManager;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.msm.api.RolloutManager;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.Reference;
@Reference
private LiveRelationshipManager liveRelationshipManager;
@Reference
private RolloutManager rolloutManager;
// setting string array that will keep path to rollout configuration
String [] cqRolloutConfigs = new String[1];
cqRolloutConfigs[0] = "/path/to/rollout/config";
// get target resource by path - live copy
Resource targetResource = resourceResolver.getResource("/content/path/to/target/resource");
// get resource that includes cq:rolloutConfigs property
Resource cqLiveSyncConfigResource = resourceResolver.getResource(targetResource.getPath() + "/jcr:content/cq:LiveSyncConfig");
// setting new custom rollout configuration
ModifiableValueMap valueMap = cqLiveSyncConfigResource.adaptTo(ModifiableValueMap.class);
valueMap.put("cq:rolloutConfigs", cqRolloutConfigs);
resourceResolver.commit();
// running rollout
if (liveRelationshipManager.hasLiveRelationship(targetResource)) {
LiveRelationship liveRelationship = liveRelationshipManager.getLiveRelationship(targetResource, true)
if (liveRelationship != null) {
rolloutManager.rollout(resourceResolver, liveRelationship, true, true);
}
}Second option use MSM API to handle all needed actions.
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.msm.api.LiveRelationshipManager;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.msm.api.RolloutConfig;
import com.day.cq.wcm.msm.api.RolloutManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.Reference;
@Reference
private LiveRelationshipManager liveRelationshipManager;
@Reference
private RolloutManager rolloutManager;
RolloutConfigManager rolloutConfigManager = resourceResolver.adaptTo(RolloutConfigManager.class);
// getting rollout config that shuld be used for rollout
RolloutConfig rolloutConfig = rolloutConfigManager.getRolloutConfig("/path/to/rollout/config");
// live copy target
Resource targetResource = resourceResolver.getResource("/content/path/to/target");
// blueprint
Resource sourceResource = resourceResolver.getResource("/content/path/to/source");
LiveRelationship liveRelationship = null;
if (sourceResource != null && targetResource != null && rolloutConfig != null) {
Page sourcePage = sourceResource.adaptTo(Page.class);
Page targetPage = targetResource.adaptTo(Page.class);
if (sourcePage != null && targetPage != null) {
if (liveRelationshipManager.hasLiveRelationship(targetResource)) {
// to modify existing rollout config, current live copy/relationship needs to be removed
liveRelationshipManager.endRelationship(targetResource, true);
}
// creating new live copy to use new rollout config
liveRelationship = liveRelationshipManager
.establishRelationship(sourcePage, targetPage, true, true, rolloutConfig);
if (liveRelationship != null) {
rolloutManager.rollout(resourceResolver, liveRelationship, true, true);
}
}
}I hope that it will be good starting point for you.
Views
Likes
Replies
Views
Likes
Replies