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

ServiceNow check for null or nil or empty (or not)

Haven't tested these all recently within global/local scopes, so feel free to have a play! option 1 use an encoded query embedded in the GlideRecord , e.g.  var grProf = new GlideRecord ( 'x_cls_clear_skye_i_profile' ); grProf . addQuery ( 'status=1^ owner=NULL ' ); grProf . query (); even better use the glideRecord  addNotNullQuery or addNullQuery option 2 JSUtil.nil / notNil (this might be the most powerful. See this link ) example: if ( current . operation () == 'insert' && JSUtil . notNil ( current . parent ) && ! current . work_effort . nil ())  option 3 there might be times when you need to get inside the GlideRecord and perform the check there, for example if the code goes down 2 optional routes depending on null / not null can use gs.nil : var grAppr = new GlideRecord ( 'sysapproval_approver' ); var grUser = new GlideRecord ( 'sys_user' ); if ( grUser . get ( 'sys_id' , current . approver )){

Get URL Parameter - server side script (portal or classic UI)

Classic UI : var sURL_editparam = gs . action . getGlideURI (). getMap (). get ( ' sysparm_aparameter ' ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); } Portal : var sURL_editparam = $sp . getParameter ( " sysparm_aparameter " ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); }