GlidePluginManager.isActive('com.snc.project_management_v3') && gs.hasRole('demand_manager') && (current.type == 'project' && current.project.nil())
var gDialog;
function convertDemandToProject() {
if (g_form.modified) {
return g_form.addErrorMessage(getMessage('You have not saved all your changes, save the demand record before creating project'));
} if(g_form.getValue('type') == 'project'&& g_form.getElement("calculation_type") && !g_form.getValue('calculation_type')) {
return g_form.addErrorMessage(getMessage('Please select a project calculation type under preferences.'));
}
var ga = new GlideAjax("AjaxCreateRelatedEntityFromDemand");
ga.addParam("sysparm_name", "checkPmoUpgrade");
ga.addParam("sysparm_source_table", g_form.getTableName());
ga.getXML(function(response) {
var result = response.responseXML.getElementsByTagName("result");
var isUpdrading = result[0].getAttribute("isUpgrading");
var isProjectCurrencyEnabled = result[0].getAttribute("isProjectCurrencyEnabled");
var isMoreThanOneProjectClassExists = result[0].getAttribute("isMultipleProjectClassExists");
var defaultProjectTable = result[0].getAttribute("defaultProjectTable");
if (isUpdrading === "true") {
g_form.addErrorMessage(getMessage("Financial Planning Upgrade Job Running. Cannot create Project."));
} else if (isProjectCurrencyEnabled == "true" || isMoreThanOneProjectClassExists == "true") {
gDialog = new GlideModal('demand_to_project');
gDialog.setPreference('sysparm_task_id', g_form.getUniqueValue());
gDialog.setPreference('sysparm_projTable', defaultProjectTable);
gDialog.setPreference('sysparm_isProjectCurrencyEnabled', isProjectCurrencyEnabled);
gDialog.setPreference('sysparm_isMoreThanOneProjectTableExists', isMoreThanOneProjectClassExists);
gDialog.setPreference('on_submit', onSubmit);
gDialog.setPreference('on_cancel', onCancel);
gDialog.setTitle(new GwtMessage().getMessage('Create project'));
gDialog.render();
} else
onSubmit(defaultProjectTable);
});
}
if (typeof window == 'undefined')
redirect();
function redirect() {
action.setRedirectURL(current);
}
function onCancel() {
if (gDialog)
gDialog.destroy();
return false;
}
function onSubmit(projName) {
var createProjectAjax = new GlideAjax("AjaxCreateRelatedEntityFromDemand");
createProjectAjax.addParam("sysparm_name", "createProjectAjax");
createProjectAjax.addParam("sysparm_sys_id", g_form.getUniqueValue());
createProjectAjax.addParam("sysparm_projName", projName);
createProjectAjax.getXML();
if (gDialog)
gDialog.destroy();
g_form.save();
return false;
}
I have tried replicating it in After update Business Rule with conditions:
state changes to Completed
Type is project
Project field is empty
role required: demand_manager
BR code :
(function executeRule(current, previous /*null when async*/) {
var shouldContinue = true; // Initialize a flag to control rule execution
// Check if any update or insert operation was performed
if (!current.update() && !current.insert()) {
gs.addErrorMessage('You have not saved any changes. Save the demand record before creating a project.');
shouldContinue = false; // Set the flag to false to stop rule execution
}
// Check if the demand is of type 'project' and if 'calculation_type' is not selected
if (current.type == 'project' && !current.calculation_type) {
gs.addErrorMessage('Please select a project calculation type under preferences.');
shouldContinue = false; // Set the flag to false to stop rule execution
}
if (shouldContinue) {
// Check for PMO upgrade and other conditions using GlideAjax
var ga = new GlideAjax("AjaxCreateRelatedEntityFromDemand");
ga.addParam("sysparm_name", "checkPmoUpgrade");
ga.addParam("sysparm_source_table", current.getTableName());
ga.getXMLWait(); // Wait for the response
var response = ga.getAnswer();
var result = new XMLResponse(response).getRootElement();
var isUpgrading = result.getAttribute("isUpgrading");
var isProjectCurrencyEnabled = result.getAttribute("isProjectCurrencyEnabled");
var isMoreThanOneProjectClassExists = result.getAttribute("isMultipleProjectClassExists");
var defaultProjectTable = result.getAttribute("defaultProjectTable");
if (isUpgrading === "true") {
gs.addErrorMessage('Financial Planning Upgrade Job Running. Cannot create Project.');
} else if (isProjectCurrencyEnabled == "true" || isMoreThanOneProjectClassExists == "true") {
// At least show a message here
gs.addInfoMessage('Not sure how to handle this');
} else {
// Handle the project creation logic here (similar to the onSubmit function).
var createProjectAjax = new GlideAjax("AjaxCreateRelatedEntityFromDemand");
createProjectAjax.addParam("sysparm_name", "createProjectAjax");
createProjectAjax.addParam("sysparm_sys_id", current.sys_id);
createProjectAjax.addParam("sysparm_projName", defaultProjectTable);
createProjectAjax.getXMLWait();
// After the project creation is complete
gs.addInfoMessage('Project created successfully.');
}
}
})(current, previous);