WorkFlow Builder
- doGet() - Form gets rendered to the browser
- Click on "Insert Step" button {Function called "FILE_steps_loadSteps(e, wfId,app)"}
- Steps text boxes with 'step title' & 'approver email', 'Insert' button, Text 'Insert after step' with text box for step say "0" is rendered to browser
- In Steps - "Insert after step" is set as "0" and when 'Insert' button is clicked
- Dialog Box error states "Error encountered: Incompatible type passed in as parameter"
Steps -File code
FILE.steps = {};
function FILE_steps_loadSteps(e, wfId,app)
{
if(wfId == undefined)
{
var app = UiApp.getActiveApplication();
wfId = e.parameter.wfId;
}
var app = UiApp.getActiveApplication();
var wfRowArray = FILE.ssOps.getWfRowFromSS(e.parameter.wfId),
jsonText = wfRowArray[2],
workflow = ReLoadJson(jsonText);
if(e.parameter != undefined)
{
//Insert start notification code here
if(e.parameter.start == 'true')
{
workflow = FILE.notifications.notify(wfId);
}
//insert step
if(/^i/i.test(e.parameter.source))
{
var step = new Step();
step = workflow.insertStep(e.parameter.FILE_doGet_stepIndex).setTitle(e.parameter.FILE_doGet_stepTitle).setStatus('Pending');
var approvers = e.parameter.FILE_doGet_approverEmail.split(',');
for(g in approvers)
{
step.addApprover().setEmail(approvers[g]).setApprovalStatus('Pending');
}
//Save WF
wfRowArray[2] = JSON.stringify(workflow);
FILE.ssOps.setWftoSS(wfRowArray);
}
//add more button methods here
//remove step
else if(/^d/i.test(e.parameter.source))
{
workflow.removeStep(e.parameter.source.substring(1));
//Save WF
wfRowArray[2] = JSON.stringify(workflow);
FILE.ssOps.setWftoSS(wfRowArray);
}
//approve step
else if(/^a/i.test(e.parameter.source))
{
var stepNumber = parseInt(e.parameter.source.substring(1));
var stepComplete = 0;
for (i in workflow.getSteps()[stepNumber].getApprovers())
{
if (workflow.getSteps()[stepNumber].getApprovers()[i].getEmail() ==e.parameter.email)
{
workflow.getSteps()[stepNumber].getApprovers()[i].setApprovalStatus('Approved');
}
if (workflow.getSteps()[stepNumber].getApprovers()[i].getApprovalStatus() =='Approved')
{
stepComplete++;//(;was not here)
}
}
if(stepComplete == workflow.getSteps()[stepNumber].getApprovers().length)
{
workflow.getSteps()[stepNumber].setStatus('Complete');
}
var wfComplete = 0;//(;was not here)
for (w in workflow.getSteps())
{
if(workflow.getSteps()[w].getStatus() == 'Complete')
wfComplete++;
}
if (wfComplete == workflow.getSteps().length)
{
workflow.setStatus('Complete');
wfRowArray[1] = 'Complete';
}
//Save workFlow
wfRowArray[2] = JSON.stringify(workflow);
FILE.ssOps.setWftoSS(wfRowArray);
//Save for sending notice
workflow = FILE.notifications.notify(wfId);
}
////reject step
else if(/^r/i.test(e.parameter.source))
{
var stepNumber = parseInt(e.parameter.source.substring(1));
for (i in workflow.getSteps()[stepNumber].getApprovers())
{
if (workflow.getSteps()[stepNumber].getApprovers()[i].getEmail() ==e.parameter.email)
{
workflow.getSteps()[stepNumber].getApprovers()[i].setApprovalStatus('Rejected');
}
}
for (i in workflow.getSteps()[stepNumber-1].getApprovers())
{
workflow.getSteps()[stepNumber-1].getApprovers()[i].setApprovalStatus('Pending');
}
workflow.getSteps()[stepNumber-1].setStatus('Rejected');
//Save WF
wfRowArray[2] = JSON.stringify(workflow);
FILE.ssOps.setWftoSS(wfRowArray);
//Save for sending notice
workflow = FILE.notifications.notify(wfId);
}
}
var stepsTable = app.createFlexTable().setId('stepsTable');
for (i in workflow.getSteps())
{
var stepGrid = app.createGrid(3,4);
stepsTable.setWidget(parseInt(i),0,stepGrid);
stepGrid.setWidget(0,0,app.createLabel('Step '+ (parseInt(i)+1)+' - '));
stepGrid.setWidget(0,1,app.createLabel(workflow.getSteps()[i].getTitle() +' '+'('+workflow.getSteps()[i].getStatus()+')'));
stepGrid.setWidget(0,2, app.createLabel('remove step').setId('d'+i).setStyleAttribute('color', 'red')
.addClickHandler(app.createServerClickHandler('FILE_steps_loadSteps').addCallbackElement(stepsTable)));
var approverTable = app.createFlexTable();
stepGrid.setWidget(1,1, approverTable);
for(s in workflow.getSteps()[i].getApprovers())
{
approverTable.setWidget(parseInt(s),0,app.createLabel
(workflow.getSteps()[i].getApprovers()[s].getEmail()+'('+workflow.getSteps()[i]
.getApprovers()[s].getApprovalStatus()+')'));
var buttonGrid = app.createGrid(1,2);
approverTable.setWidget(parseInt(s),1, buttonGrid);
if (e.parameter != undefined)
{
if(workflow.getSteps()[i].getApprovers()[s].getEmail() == e.parameter.email &&
workflow.getSteps()[parseInt(i)].getStatus() != 'Complete')
{
var showApprove = true;
if(i != 0)
{
if(workflow.getSteps()[parseInt(i)-1].getStatus() == 'Pending' ||
workflow.getSteps()[parseInt(i)-1].getStatus() == 'Rejected')
{
showApprove = false;
}
}
if(showApprove)
{
buttonGrid.setWidget(0,0, app.createButton('Approve').setId('a'+i).setStyleAttribute('color', 'green')
.addClickHandler(app.createServerClickHandler('FILE_steps_loadSteps').addCallbackElement(stepsTable)));
}
if (i != 0 && showApprove)
{
buttonGrid.setWidget(0,1, app.createButton('Reject').setId('r'+i).setStyleAttribute('color', 'red')
.addClickHandler(app.createServerClickHandler('FILE_steps_loadSteps').addCallbackElement(stepsTable)));
}
}
}
}
}
stepsTable.setWidget(parseInt(workflow.getSteps().length)+1,0,app.createHidden().setValue(wfId).setId('wfId').setName('wfId'));
if (e.parameter != undefined)
{
stepsTable.setWidget(parseInt(workflow.getSteps().length)+2,0,app.createHidden().setValue(e.parameter.email).setId('email').setName('email'));
}
app.getElementById('FILE_doGet_wfGrid').setWidget(6,1, stepsTable);
app.getElementById('FILE_doGet_stepTitle').setValue('');
app.getElementById('FILE_doGet_approverEmail').setValue('');
app.getElementById('FILE_doGet_stepIndex').setValue((workflow.getSteps().length).toString());
return app;
}

Help

