Skip to main content

Issues with generating number on a scoped table extended from task

we were having trouble creating a Copy of a record on a scoped application custom table, using a UI button. Referred to ServiceNow via support and currently awaiting an answer

If we create a new record the Number field is auto-populated with the new number (incremented)

But when trying to create a new record from the existing record using a"Copy" UI action then the new record is created but the number is not incremented (instead a record is created with the original number - hence duplicate numbers).

Attempted to use script include NumberManager('table_name').getNextObjNumberPadded() to  increment and place auto-number, It did not work - no record was created. on checking the code for "NumberManager" we observed  Application as "Global" and "Accessible from" as "This application scope only". 

So we created a copy Script include called "NumberManagerGlobal" identical to "NumberManager" with "Application" as "Global" and "Accessible from" as "All application scopes".

Now it works fine. below is the code of "Copy" UI Action.







function OnCopyClick() { //--Call the UI Action and skip the 'onclick' function gsftSubmit(null, g_form.getFormElement(), 'copy_strategy_new'); } if (typeof window == 'undefined') { OnCopyEngagementClick(); } function OnCopyEngagementClick() { var myRecordID = current.sys_id.toString(); var myTable = new GlideRecord("x_custom_table"); myTable.get(myRecordID); myTable.state = -1; var newNumber = new global.NumberManagerGlobal("x_custom_table").getNextObjNumberPadded(); myTable.number = newNumber; myTable.insert(); gs.addInfoMessage("Copy-- " + myTable.number + " generated from " + current.number); //--Redirect to New Record action.setReturnURL(current); action.setRedirectURL(myTable); }

Comments

Popular posts from this blog

URL link in addInfoMessage

var ga=new GlideAjax('gld_HR_ajax'); ga.addParam('sysparm_name', 'checkEmployeeNumber_hrProfile'); ga.addParam('sysparm_hrprofilenumber', g_form.getValue('number')); ga.addParam('sysparm_employeenumber', newValue); ga.getXMLAnswer(function(answer) { if (answer!='undefined' && answer!=''){ var navURL="<a style='text-decoration:underline;color:blue' href=hr_profile.do?sysparm_query=number=" + answer + ">" + answer + "</a><img width='3' src='images/s.gif'/>"; var sMsg='The employee number entered already exists on another HR Profile ' + navURL; //alert(sMsg); g_form.showErrorBox('employee_number', 'error - please check'); g_form.addInfoMessage(sMsg); } });

GlideRecord setValue

setValue(String name, Object value) Sets the specified field to the specified value. Normally a script would do a direct assignment, for example,  gr.category = value . However, if in a script the element name is a variable, then  gr.setValue(elementName, value)  can be used. When setting a value, ensure the data type of the field matches the data type of the value you enter. This method cannot be used on journal fields. If the value parameter is null, the record is not updated, and an error is not thrown https://developer.servicenow.com/app.do#!/api_doc?v=madrid&id=r_GlideRecord-setValue_String_Object