function gm_GlobalAttribute_Copy_Utility() {
var gmGlobalAttributeCopyUtility = gmGlobalAttributeCopyUtility || function () {
var selectedRowId = null;
var gmArasContextUtilityNs = null;
var currentEcrContext = null;
var configSettings = null;
var selectedProperty = null;
var setInfo = function () {
workOrder = currentEcrContext.document.thisItem;
selectedRow = workOrder.getItemsByXPath("//Item[@id='" + selectedRowId + "' and @type='" + configSettings.copyConfig.TabItemTypeName + "']").getItemByIndex(0);
var sanityCheck = function () {
if (!gmArasContextUtilityNs.isEditableLifecycleState(currentEcrContext, selectedRowId)) {
throw "Selected Row in not editable.";
if (selectedRow.getAction() === constants.Actions.Delete) {
throw "Cannot copy attribute from the deleted row.";
var currentGrid = currentEcrContext.gmARASGridUtilitiesNS.getGridForTabName(configSettings.copyConfig.TabName);
var selectedCell = currentGrid.GetSelectedCell();
var selectedIndex = currentGrid.grid_Experimental.order.indexOf(selectedCell.getColumnIndex());
selectedProperty = currentGrid.GetColumnName(selectedIndex).slice(0, -2);
if (configSettings.copyConfig.ExceptionForCopy.indexOf(selectedProperty) < 0 && !configSettings.isPropertyEditable(currentEcrContext, selectedRow, selectedProperty)) {
throw "Selected Attribute is not editable.";
var copyValueToTop = function () {
top[configSettings.copyConfig.TopCopiedRowId] = selectedRowId;
top[configSettings.copyConfig.TopCopiedPropertyName] = selectedProperty;
var copyAttribute = function (arasContextUtility, ecrContext, copyConfigSetting, rowId) {
if (!arasContextUtility || !ecrContext || !copyConfigSetting || typeof (copyConfigSetting.isPropertyEditable) === "undefined" || typeof (copyConfigSetting.copyConfig) === "undefined")
throw "Not a valid copy config.";
gmArasContextUtilityNs = arasContextUtility;
currentEcrContext = ecrContext;
configSettings = copyConfigSetting;
top.aras.AlertSuccess("Copied successfully.");
function gmGlobalAttributePasteUtlity() {
var gmGlobalAttributePasteUtility = gmGlobalAttributePasteUtility || function () {
WorkOrder: "gm_Work Order"
ProductLineCode: "_prod_line_cde",
DRD: "_design_division_code",
GPSArchitectureCode: "_part_fam_id_cde",
Label: "_property_label",
ConfigJson: "_config_json"
PropertyCombinationValidation: {
PrePasteValidation: "PrePasteValidation",
PostPasteValidation: "PostPasteValidation"
ItemId: "D614841285764CB0BE11AE794D564F67",
TopKeyName: "PartAndCostAttributePasteConfig"
var dependentPasteConstants = {
var currentConfigSettings = null;
var exceptionsForCopy = [];
var innovator = aras.newIOMInnovator();
var gmArasContextUtilityNs = null;
var currentEcrContext = null;
var copiedPropertyName = null;
var selectedRowIds = null;
CurrentRowPasteConfig: null
var allUpdatedProperties = [];
var setCopyProperties = function () {
workOrder = document.thisItem;
currentEcrContext = gmArasContextUtilityNs.getContextForId(workOrder.getID());
copiedRowId = top[dependentPasteConstants.PasteConfig.TopCopiedRowId];
copiedPropertyName = top[dependentPasteConstants.PasteConfig.TopCopiedPropertyName];
copiedRow = workOrder.getItemsByXPath("//Item[@id='" + copiedRowId + "' and @type='" + dependentPasteConstants.PasteConfig.TabItemTypeName + "']");
if (copiedRow.getItemCount() > 0) {
copiedRow = copiedRow.getItemByIndex(0);
currentGrid = currentEcrContext.gmARASGridUtilitiesNS.getGridForTabName(dependentPasteConstants.PasteConfig.TabName);
selectedRowIds = currentGrid.getSelectedItemIds();
exceptionsForCopy = dependentPasteConstants.PasteConfig.ExceptionForCopy;
var sanityCheckCopiedValue = function () {
if (!copiedPropertyName && !copiedRowId) {
throw "Copy the Attribute before pasting.";
if (selectedRowIds && !gmArasContextUtilityNs.isEditableLifecycleState(currentEcrContext, selectedRowIds[0])) {
throw "Selected Row is not editable.";
if (copiedRow && (!copiedRow.node || copiedRow.getAction() === constants.Actions.Delete)) {
throw "The copied attribute is no longer available.";
if (exceptionsForCopy.indexOf(copiedPropertyName) < 0 && !currentConfigSettings.isPropertyEditable(currentEcrContext, copiedRow, copiedPropertyName)) {
throw "The copied attribute is no longer editable.";
var setPasteConfigs = function () {
if (top[workOrder.getID() + dependentPasteConstants.PasteConfig.TopKeyName]) {
pasteConfig = top[workOrder.getID() + dependentPasteConstants.PasteConfig.TopKeyName];
pasteConfig.hasOwnProperty(copiedPropertyName);
if (e.number === -2146823277) {
var partAndCostPropertyConfig = innovator.getItemById(dependentPasteConstants.PasteConfig.Name, dependentPasteConstants.PasteConfig.ItemId);
partAndCostPropertyConfig.fetchRelationships(dependentPasteConstants.PasteConfig.MappingItem, constants.PropertyNames.ConfigJson + "," + constants.PropertyNames.Name);
var configRels = partAndCostPropertyConfig.getRelationships(dependentPasteConstants.PasteConfig.MappingItem);
var itemCount = configRels ? configRels.getItemCount() : 0;
var currentPasteConfig = {};
for (var i = 0; i < itemCount; i++) {
var configItem = configRels.getItemByIndex(i);
var propertyName = configItem.getProperty(constants.PropertyNames.Name, "");
var config = configItem.getProperty(constants.PropertyNames.ConfigJson, "");
if (propertyName && config) {
currentPasteConfig[propertyName] = JSON.parse(config);
top[workOrder.getID() + dependentPasteConstants.PasteConfig.TopKeyName] = currentPasteConfig;
pasteConfig = currentPasteConfig;
var fireEvents = function (event, pasteRow, propertyName) {
currentEcrContext.gmARASGridUtilitiesNS.fireCellEvent(dependentPasteConstants.PasteConfig.TabName, parent, pasteRow.getID(), propertyName, event);
var makePropertyBlank = function (pasteRow, propertyName) {
pasteRow.setProperty(propertyName, null);
currentEcrContext.gmARASGridUtilitiesNS.setCellValueButNotCache(currentGrid, pasteRow.getID(), propertyName, "");
var updateAction = function (pasteRow) {
var rowAction = pasteRow.getAction();
if (!rowAction && rowAction !== constants.Actions.Delete) {
pasteRow.setAction(constants.Actions.Update);
pasteRow.setAttribute(constants.PropertyAttribute.IsDirty, "1");
var initializePasteProperties = function (pasteRow, propertyName) {
propertyToPaste.Value = copiedRow.getProperty(propertyName);
propertyToPaste.KeyedName = currentEcrContext.gmUIUtilitiesNS.getPropertyKeyedName(copiedRow, propertyName);
propertyToPaste.GridDisplayText = currentEcrContext.gmARASGridUtilitiesNS.getCellValueForRowId(currentGrid, copiedRowId, propertyName);
propertyToPaste.HasChanged = propertyToPaste.Value !== pasteRow.getProperty(propertyName);
if (pasteConfig.hasOwnProperty(propertyName)) {
propertyToPaste.CurrentRowPasteConfig = pasteConfig[propertyName];
propertyToPaste.CurrentRowPasteConfig = null;
var updatePropertyFromCopiedRow = function (pasteRow, propertyName, isRequired) {
initializePasteProperties(pasteRow, propertyName);
if (isRequired && !propertyToPaste.Value) {
pasteRow.setProperty(propertyName, propertyToPaste.Value);
if (propertyToPaste.KeyedName) {
pasteRow.setPropertyAttribute(propertyName, constants.PropertyAttribute.KeyedName, propertyToPaste.KeyedName);
currentEcrContext.gmARASGridUtilitiesNS.setCellValueButNotCache(currentGrid, pasteRow.getID(), propertyName, propertyToPaste.GridDisplayText);
var updatePropertyAndDependents = function (pasteRow, propertyName) {
if (allUpdatedProperties.indexOf(propertyName) === -1) {
initializePasteProperties(pasteRow, propertyName);
if (currentConfigSettings.isValid(copiedRow, pasteRow, propertyToPaste, propertyName, constants.ValidationConfigNames.PrePasteValidation, currentEcrContext)) {
updatePropertyFromCopiedRow(pasteRow, propertyName);
allUpdatedProperties.push(propertyName);
if (propertyToPaste.HasChanged && propertyToPaste.CurrentRowPasteConfig) {
var propertiesToBlank = typeof (propertyToPaste.CurrentRowPasteConfig.PropertiesToBlank) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.PropertiesToBlank : [];
propertiesToBlank.forEach(function (dependentProperty) {
makePropertyBlank(pasteRow, dependentProperty);
if (propertyToPaste.CurrentRowPasteConfig) {
var preEvents = typeof (propertyToPaste.CurrentRowPasteConfig.PreDependentPropertyEvents) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.PreDependentPropertyEvents : [];
preEvents.forEach(function (e) {
fireEvents(e, pasteRow, propertyName);
var dependentProperties = typeof (propertyToPaste.CurrentRowPasteConfig.PropertiesToCopy) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.PropertiesToCopy : [];
var isRecursive = typeof (propertyToPaste.CurrentRowPasteConfig.RecursivePaste) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.RecursivePaste : false;
var dependentRequired = typeof (propertyToPaste.CurrentRowPasteConfig.DependentRequired) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.DependentRequired : false;
dependentProperties.forEach(function (dependentProperty) {
updatePropertyAndDependents(pasteRow, dependentProperty, dependentRequired);
updatePropertyFromCopiedRow(pasteRow, dependentProperty, dependentRequired);
allUpdatedProperties.push(dependentProperty);
initializePasteProperties(pasteRow, propertyName);
var callbackFunction = typeof (propertyToPaste.CurrentRowPasteConfig.PostPasteCallback) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.PostPasteCallback : null;
gmGlobalAttributePasteUtility[callbackFunction](pasteRow);
var events = typeof (propertyToPaste.CurrentRowPasteConfig.Events) !== "undefined" ? propertyToPaste.CurrentRowPasteConfig.Events : [];
events.forEach(function (e) {
fireEvents(e, pasteRow, propertyName);
var updateProductLineCode = function (pasteRow) {
var drdCopy = copiedRow.getProperty(constants.PropertyNames.DRD);
var gpsArchCopy = copiedRow.getProperty(constants.PropertyNames.GPSArchitectureCode);
if (drdCopy && gpsArchCopy) {
updatePropertyFromCopiedRow(pasteRow, constants.PropertyNames.DRD);
updatePropertyFromCopiedRow(pasteRow, constants.PropertyNames.GPSArchitectureCode);
var drdPaste = pasteRow.getProperty(constants.PropertyNames.DRD);
if (drdPaste && !currentConfigSettings.isValid(copiedRow, pasteRow, propertyToPaste, constants.PropertyNames.ProductLineCode, constants.ValidationConfigNames.PostPasteValidation, currentEcrContext)) {
makePropertyBlank(pasteRow, constants.PropertyNames.DRD);
makePropertyBlank(pasteRow, constants.PropertyNames.GPSArchitectureCode);
var updateDrdAndGpsArchitectureCode = function (pasteRow) {
var productLineCodeCopy = copiedRow.getProperty(constants.PropertyNames.ProductLineCode);
if (productLineCodeCopy) {
updatePropertyAndDependents(pasteRow, constants.PropertyNames.ProductLineCode);
var productLineCodePaste = pasteRow.getProperty(constants.PropertyNames.ProductLineCode);
if (productLineCodePaste && !currentConfigSettings.isValid(copiedRow, pasteRow, propertyToPaste, constants.PropertyNames.DRD, constants.ValidationConfigNames.PostPasteValidation, currentEcrContext)) {
makePropertyBlank(pasteRow, constants.PropertyNames.ProductLineCode);
makePropertyBlank(pasteRow, constants.PropertyNames.ModelCode);
currentEcrContext.gmARASGridUtilitiesNS.fireCellEvent(dependentPasteConstants.PasteConfig.TabName, parent, pasteRow.getID(), constants.PropertyNames.ModelYear, "oneditfinish");
var updateProperty = function () {
selectedRowIds.forEach(function (itemId) {
var currentRow = workOrder.getItemsByXPath("//Item[@id='" + itemId + "']").getItemByIndex(0);
var action = currentRow.getAction();
if (action === constants.Actions.Delete || itemId === copiedRowId) {
var propertyToCheckEditabilityFor = copiedPropertyName;
if (exceptionsForCopy.indexOf(copiedPropertyName) >= 0) {
propertyToCheckEditabilityFor = currentConfigSettings.exceptionPropertyToEnabledPropertyMap(copiedPropertyName);
if (!currentConfigSettings.isPropertyEditable(currentEcrContext, currentRow, propertyToCheckEditabilityFor)) {
allUpdatedProperties.length = 0;
updatePropertyAndDependents(currentRow, copiedPropertyName);
updateAction(currentRow);
workOrder.setAttribute(constants.PropertyAttribute.IsDirty, "1");
var pasteAttribute = function (configSettings, arasContext) {
if (!arasContext || !configSettings || typeof (configSettings.isValid) === "undefined" || typeof (configSettings.isPropertyEditable) === "undefined" || typeof (configSettings.dependentPasteConstants) === "undefined")
throw "Not a valid paste config.";
gmArasContextUtilityNs = arasContext;
currentConfigSettings = configSettings;
dependentPasteConstants = currentConfigSettings.dependentPasteConstants;
sanityCheckCopiedValue();
top.aras.AlertSuccess("Pasted successfully.");
pasteAttribute: pasteAttribute,
updateProductLineCode: updateProductLineCode,
updateDrdAndGpsArchitectureCode: updateDrdAndGpsArchitectureCode
function gm_Refresh_Source_Form() {
var currentRow = (event && event.type === "beforeunload") ? aras.newIOMInnovator().getItemById(document.thisItem.getType(), document.thisItem.getID()) : document.thisItem;
if (currentRow === null || currentRow === undefined) {
var sourceItemId = currentRow.getProperty("source_id");
var sourceForm = aras.uiFindWindowEx(sourceItemId);
return top.aras.AlertError(exception);
function gm_UI_Utilities() {
var gmUIUtilitiesNS = gmUIUtilitiesNS || function () {
RequiredBackgroundColor: "#DDE7F5",
DefaultBackgroundColor: "#fff",
var getControlId = function(controlName) {
var field = getFieldByName(controlName);
return div_id.substring(0, div_id.indexOf("span"));
var getControl = function (controlName) {
var field = getFieldByName(controlName);
var control_id = div_id.substring(0, div_id.indexOf("span"));
return document.getElementById(control_id);
var disableControl = function (controlName,DisableOnlyOnEditMode) {
var DisableStatus = true;
var DisableOnlyOnEditMode = DisableOnlyOnEditMode || false;
if(DisableOnlyOnEditMode) DisableStatus = document.isEditMode
var control = getControl(controlName);
var imageControlId = control.id + "_img";
var imageControl = document.getElementById(imageControlId);
imageControl.disabled = true;
var inputControl = document.getElementById(control.id + "_input");
inputControl.disabled = true;
var enableControl = function (controlName,EnableOnlyOnEditMode) {
var EnableOnlyOnEditMode = EnableOnlyOnEditMode || false;
if(EnableOnlyOnEditMode) EnableStatus = document.isEditMode
var control = getControl(controlName);
control.disabled = false;
var imageControlId = control.id + "_img";
var imageControl = document.getElementById(imageControlId);
imageControl.disabled = false;
var inputControl = document.getElementById(control.id + "_input");
inputControl.disabled = false;
var hideControl = function (controlName) {
var control = getFieldByName(controlName);
control.style.display = "none";
var showControl = function (controlName) {
var control = getFieldByName(controlName);
control.style.display = "block";
var showAllControls = function () {
var cntrlItem = Innovator().getItemById("List", "CA9F72FAEB944858BC27703489AF96EE");
var valItem = Innovator().newItem("value", "get");
valItem.setProperty("source_id", cntrlItem.getID());
valItem = valItem.apply();
if (!valItem.isError()) {
for (var i = 0; i < valItem.getItemCount() ; i++) {
var valn = valItem.getItemByIndex(i);
if (valn === null) continue;
var controlName = valn.getProperty("value", "");
if (controlName !== null && controlName !== "") {
showControl(controlName);
var hideCustomControl = function (controlId) {
var customControl = document.getElementById(controlId);
customControl.style.display = "none";
var showCustomControl = function (controlId) {
var customControl = document.getElementById(controlId);
customControl.style.display = "block";
var updateControlBackground = function (controlName, color, isSelect) {
var selectElement = document.getElementById("div_select_" + getControlId(controlName));
selectElement.style.backgroundColor = color;
var control = getControl(controlName);
if (control.tagName.toLowerCase() === "span") {
control.getElementsByTagName("input")[0].style.backgroundColor = color;
control.style.backgroundColor = color;
var setControlValue = function (controlName, value) {
var control = getControl(controlName);
switch (control.type.toLowerCase()) {
control.checked = value === "1";
control.selected = value === "1";
aras.updateDomSelectLabel(control);
var getControlValue = function (controlName) {
var control = getControl(controlName);
switch (control.type.toLowerCase()) {
value = control.checked ? "1" : "0";
value = control.checked ? "1" : "0";
var setControlValueForList = function (listOfProperties) {
for (var i = 0; i < listOfProperties.length; i++) {
setControlValue(listOfProperties[i].key, listOfProperties[i].value);
var handleItemChangeForList = function (listOfProperties) {
for (var i = 0; i < listOfProperties.length; i++) {
handleItemChange(listOfProperties[i].key, listOfProperties[i].value);
var fireEventForControl = function (eventName, eventType, controlName, controlType) {
var newEvent = document.createEvent(eventName);
newEvent.initEvent(eventType, true, true);
if (controlType === "item") {
var inputControl = getControl(controlName).firstElementChild;
inputControl.dispatchEvent(newEvent);
getControl(controlName).dispatchEvent(newEvent);
var formatCost = function (cost) {
var costString = cost.toString();
var splittedNumber = costString.trim().split(".");
var currentScale = splittedNumber[1] ? splittedNumber[1].length : 0;
if (isNaN(cost) || (splittedNumber[0] && (cost >= 0 && splittedNumber[0].length > 15) || (cost < 0 && splittedNumber[0].length > 16)) || (splittedNumber[1] && splittedNumber[1].length > 6)) {
throw "Cost must be a decimal value with up to 15 numbers to the left of decimal point and 6 numbers to the right of the decimal point.";
if (currentScale === 0) {
} else if (currentScale > 6) {
costString = costString.substring(0, costString.indexOf(".") + 7);
for (var i = currentScale ; i < 6; i++) {
var getPropertyKeyedName = function (item, propertyName) {
var propertyItem = item.getPropertyItem(propertyName);
keyedName = propertyItem.getAttribute(CONSTANTS.KeyedName, "");
keyedName = propertyItem.getProperty(CONSTANTS.KeyedName, "");
keyedName = propertyItem.getPropertyAttribute("id", CONSTANTS.KeyedName, "");
keyedName = item.getPropertyAttribute(propertyName, CONSTANTS.KeyedName, "");
getControlId: getControlId,
disableControl: disableControl,
enableControl: enableControl,
hideControl: hideControl,
showControl: showControl,
showAllControls: showAllControls,
updateControlBackground: updateControlBackground,
getControlValue: getControlValue,
setControlValue: setControlValue,
setControlValueForList: setControlValueForList,
handleItemChangeForList: handleItemChangeForList,
fireEventForControl: fireEventForControl,
hideCustomControl: hideCustomControl,
showCustomControl: showCustomControl,
getPropertyKeyedName: getPropertyKeyedName
function end_of_method() {
function gm_Update_Relationship_Property() {
gmCustomRelationshipFormNS.initialize("gm_Work Order Validation", "MainDataForm");
var gmCustomRelationshipFormNS = gmCustomRelationshipFormNS || function () {
var relationshipName = null;
var createElement = function (element) {
switch (element.type.toLowerCase()) {
element.options[0] = new Option("Yes", "1");
element.options[1] = new Option("No", "0");
var populateTabFormProperties = function (formId) {
var relationshipItem = aras.newIOMItem(relationshipName, "get");
relationshipItem.node = getRelationshipNode(relationshipName);
var mainFormElements = document.forms[formId].elements;
for (var i = 0; i < mainFormElements.length; i++) {
var element = mainFormElements[i];
gmUIUtilitiesNS.setControlValue(element.name, relationshipItem.getProperty(element.name, ""));
var getRelationshipNode = function () {
var relationshipNode = null;
var relationshipNode = document.thisItem.node.selectSingleNode('Relationships/Item[@type="' + relationshipName + '"]');
var relationships = gmARASItemTypeUtilitiesNS.getRelationshipsList(document.thisItem, relationshipName);
if (relationships && relationships.length > 0) {
relationshipNode = relationships[0].node;
throw relationshipName + " not setup properly. Please, contact the administrator.";
var addChangeEventToForm = function (formId) {
document.getElementById(formId).addEventListener("change", updateControlValueOnChange);
var setDirtyAttribute = function (relationshipNode) {
var action = relationshipNode.getAttribute("action");
if (!action || (action != "add" && action !== "create" && action !== "delete" && action !== "purge" && action !== "copyAsNew")) {
relationshipNode.setAttribute("action", "update");
if (relationshipNode.getAttribute("isDirty") !== "1") {
relationshipNode.setAttribute("isDirty", "1");
var setRelationshipFormField = function (relationshipNode, propertyName, propertyValue) {
setDirtyAttribute(relationshipNode);
aras.setItemProperty(relationshipNode, propertyName, propertyValue);
var updateControlValueOnChange = function (srcElement) {
updateControlValueAndCache(srcElement.target.name);
var updateControlValueAndCache = function (controlName, value) {
var relationshipNode = getRelationshipNode();
setRelationshipFormField(relationshipNode, controlName, gmUIUtilitiesNS.getControlValue(controlName));
var initialize = function (relName, formId) {
relationshipName = relName;
populateTabFormProperties(formId);
addChangeEventToForm(formId);
function end_of_method() {
function gm_Work_Order_Rel_SetTabTitle() {
var workOrderRelationshipTabTitle = function () {
WorkOrder: "gm_Work Order",
PCost: "gm_Work Order PPCost"
ItemNumber: "item_number"
ActiveTabSelector: ".aras-tabs_active"
var innovator = aras.newIOMInnovator();
var getWorkOrderItemNumber = function () {
var workOrderItem = document.thisItem.getParentItem();
workOrderId = document.thisItem.getProperty(constants.PropertyNames.SourceId);
workOrderItem = innovator.newItem(constants.ItemTypeNames.WorkOrder, constants.Actions.Get);
workOrderItem.setId(workOrderId);
workOrderItem.setAttribute(constants.Attributes.Select, constants.PropertyNames.ItemNumber);
workOrderItem = workOrderItem.apply();
if (!workOrderItem || workOrderItem.isError())
workOrderId = workOrderItem.getID();
return workOrderItem.getProperty(constants.PropertyNames.ItemNumber, "");
var getRowNumber = function (windowId) {
var workOrderWindow = aras.uiFindWindowEx(windowId);
var tabbar = workOrderWindow.relationships.relTabbar;
var tabid = tabbar.GetSelectedTab();
var ifrm = workOrderWindow.relationships.iframesCollection[tabid];
var grid = ifrm.contentWindow.gridApplet;
return grid.getCurRow() + 1;
var getTabTitle = function (type) {
var workOrderItemNumber = getWorkOrderItemNumber();
var rowNumber = getRowNumber(workOrderId);
switch (type.toUpperCase()) {
case constants.ItemTypeNames.PCost.toUpperCase():
return workOrderItemNumber + " Pre-Prod Cost Row" + rowNumber;
var setTitle = function () {
var tabTitle = getTabTitle(document.thisItem.getType());
var titleControl = top.arasTabs._elem.querySelector(constants.ActiveTabSelector);
if (titleControl.title !== tabTitle) {
titleControl.setAttribute(constants.Attributes.Title, tabTitle);
titleControl.title = tabTitle;
titleControl.innerHTML = titleControl.innerHTML.replace(document.thisItem.getID(), tabTitle);
workOrderRelationshipTabTitle.setTitle();
return top.aras.AlertError(exception);