Sunday, July 8, 2018
AEM 61 Classic UI Show Site Specific Workflows
AEM 61 Classic UI Show Site Specific Workflows
Goal
Show Site specific Workflows in the Start Workflow Dialog of Classic UI SiteAdmin console
Demo | Package Install
Set Site Path on Workflow - eaemSitePath
Set site root path - eaemSitePath for which the specific workflow should be available. Here Request for Activation workflow is shown for pages of Geometrixx Demo
Site /content/geometrixx only

Request for Activation available for pages of /content/geometrixx

Request for Activation NOT available for pages of /content/geometrixx-media

Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/classicui-site-specific-workflows
2) Create clientlib (type cq:ClientLibraryFolder) /apps/classicui-site-specific-workflows/clientlib and set a property categories of String type to cq.widgets and dependencies value underscore
3) Create file ( type nt:file ) /apps/classicui-site-specific-workflows/clientlib/js.txt, add the following
site-workflows.js
4) Create file (type nt:file) /apps/classicui-site-specific-workflows/clientlib/site-workflows.js, add the following code
(function($){
if(window.location.pathname != "/siteadmin"){
return;
}
var SA_GRID = "cq-siteadmin-grid",
WORKFLOW_BUT_TEXT = "Workflow...",
START_WF_DIALOG_ID = "cq-workflowdialog",
QUERY = "SELECT * FROM [cq:Page] WHERE ISDESCENDANTNODE([/etc/workflow/models]) AND " +
"([jcr:content/eaemSitePath] = PLACEHOLDER OR [jcr:content/eaemSitePath] IS NULL)";
var SA_INTERVAL = setInterval(function(){
var grid = CQ.Ext.getCmp(SA_GRID);
if(!grid || ( grid.rendered != true)){
return;
}
clearInterval(SA_INTERVAL);
var toolBar = grid.getTopToolbar();
try{
var wButton = toolBar.find("text", WORKFLOW_BUT_TEXT)[0];
wButton.on(click, filterWorkflows);
}catch(err){
console.log("Error adding workflow button listener");
}
}, 250);
function filterWorkflows(){
var wMgr = CQ.Ext.WindowMgr, winId;
var W_INTERVAL = setInterval(function () {
wMgr.each(function (win) {
winId = win.id;
if (winId && (winId.indexOf(START_WF_DIALOG_ID) < 0)) {
return;
}
var modelCombo = CQ.Ext.getCmp(winId + "-model");
if(modelCombo.eaemInit){
return;
}
clearInterval(W_INTERVAL);
modelCombo.eaemInit = true;
var contentPath = window.location.hash.split("#")[1],
//you may want to replace the following query with a servlet returning results
query = "/crx/de/query.jsp?type=JCR-SQL2&showResults=true&stmt=" + QUERY.replace(PLACEHOLDER, contentPath);
$.ajax( { url: query, context: modelCombo } ).done(filter);
});
}, 250);
function filter(data){
function handler(store, recs){
var paths = _.pluck(data.results, "path"), modelId;
_.each(recs, function (rec){
modelId = rec.data.wid;
modelId = modelId.substring(0, modelId.indexOf("/jcr:content/model"));
if(paths.indexOf(modelId) != -1){
return;
}
store.remove(rec);
})
}
this.store.on(load, handler);
}
}
}(jQuery));