...
That should be good enough, but alas, it is not.
ServiceNow has the organization contract and DSP data replicated on the User records. This user data is stale and not dynamically updated by changes to the ORG data. Thus if we make changes to the ORG data we need to force those changes to cascade to the user records associated with that ORG.
Script to manually force-update the cascade so ORG contract data is associated with user records
Code Block |
---|
var orgID='736001'; // set orgID to the ORG where you want to synchronize user ORG records var debug=true; var orgSysID = 'declared'; var orgDSPID = 'declared'; var orgContractID = 'declared'; var gr1 = new GlideRecord('u_cmn_organization'); gr1.addQuery('u_id',orgID); gr1.query(); while ( gr1.next() ) { orgSYSID = gr1.sys_id; orgDSPID = gr1.u_dsp_group; orgContractID = gr1.u_service_contract; if (debug) { gs.log("organization sysid: "+ gr1.sys_id + " and ORG name: " + gr1.u_name + " and orgSYSID: " + orgSYSID + " and orgDSPID: " + orgDSPID + " and orgContractID: " + orgContractID); } } var gr2 = new GlideRecord('sys_user'); var memberCount = 0; var memberArray = []; gr2.addQuery('u_organization',orgSYSID); gr2.query(); while ( gr2.next() ) { memberCount += 1; memberArray.push(gr2.sys_id); if ( debug) { gs.log("members include: " + gr2.name + " and sysid: " + gr2.sys_id + " and count: " + memberCount); } var gr3 = new GlideRecord('sys_user'); gr3.addQuery('sys_id',gr2.sys_id); gr3.query(); while (gr3.next()) { gr3.u_dsp_group = orgDSPID; gr3.u_service_contract = orgContractID; gr3.update(); } } |