- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 05:46 AM
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 08:01 AM
Any time you use a sys_id in a GlideRecord, you need to force it .toString() or use getValue so that you don't retrieve the position in memory, which will result in an array of the same sys_id in this case:
departmentService.push(department.getValue('sys_id'));
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 08:30 AM
try this
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var hrScopeManagementService = [];
var departmentService = [];
var hrLegalCompany = [];
var legalCompany = [];
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
gs.info('array of department: ' + hrScopeManagementService.toString());
gs.info('array of company: ' + hrLegalCompany.toString());
// Department or service
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService.join(','));
department.query();
while (department.next()) {
departmentService.push(department.sys_id.toString());
}
// Company or legal entity
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(','));
company.query();
while (company.next()) {
legalCompany.push(company.sys_id.toString());
}
// Now filter HR Profiles
current.addEncodedQuery("user.department.sys_idIN" + departmentService.join(",") + '^ORu_etablissement_juridique.sys_idIN' + legalCompany.join(","));
// Log result
gs.info("department to display: " + departmentService.join(","));
gs.info("Company to display: " + legalCompany.join(","));
})(current, previous);
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 10:06 AM
Hello @mregragui_ext
Here is the correction to be made:
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(","));
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
Here is the updated background script (always recommended to test code in Background script first and then later in Business Rule)
var hrScopeManagementService = [];
var hrLegalCompany = [];
var departmentService = [];
var legalCompany = [];
// Query u_hr_scope_mgmt table to get u_services and lu_legal_entities for the logged in user
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
// Log retrieved values for debugging
gs.info('Array of department services: ' + hrScopeManagementService.join(","));
gs.info('Array of company IDs: ' + hrLegalCompany.join(","));
// Ensure the array is correctly formatted for the encoded query
if (hrLegalCompany.length > 0) {
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(",")); // Query based on IDs
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
}
// Ensure the array is correctly formatted for the encoded query
if (hrScopeManagementService.length > 0) {
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService.join(","));
department.query();
while (department.next()) {
var sysId = department.sys_id.toString();
if (departmentService.indexOf(sysId) === -1) { // Prevent duplicates
departmentService.push(sysId);
}
}
}
// Log results
gs.info("Unique Department Sys IDs: " + departmentService.join(","));
gs.info("Unique Company Sys IDs: " + legalCompany.join(","));
Results:
Here is the correct version of your Business Rule:
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var hrScopeManagementService = [];
var departmentService = [];
var hrLegalCompany = [];
var legalCompany = [];
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
gs.info('array of departement' + hrScopeManagementService.toString());
gs.info('array of company' + hrLegalCompany.toString());
//Department or service
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService);
department.query();
while (department.next()) {
departmentService.push(department.sys_id);
}
/////////New Updated Code Starts here/////////
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(","));
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
/////////New Updated Code Ends here/////////
//Company or legal entity - Bad Code
/* var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany);
company.query();
while (company.next()) {
legalCompany.push(company.sys_id);
} */
// Now filter HR Profiles
current.addEncodedQuery("user.department.sys_idIN" + departmentService.join(",") + '^ORu_etablissement_juridique.sys_idIN' + legalCompany.join(",")); // Apply
// Log result
gs.info("department to display : " + departmentService.join(","));
gs.info("Company to display : " + legalCompany.join(","));
})(current, previous);
Hope that helps!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 06:31 AM
Hii @mregragui_ext ,
I think your script is correct but try with modifying these lines it will not push duplicate sys id to the company list
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 08:01 AM
Any time you use a sys_id in a GlideRecord, you need to force it .toString() or use getValue so that you don't retrieve the position in memory, which will result in an array of the same sys_id in this case:
departmentService.push(department.getValue('sys_id'));
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 08:30 AM
try this
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var hrScopeManagementService = [];
var departmentService = [];
var hrLegalCompany = [];
var legalCompany = [];
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
gs.info('array of department: ' + hrScopeManagementService.toString());
gs.info('array of company: ' + hrLegalCompany.toString());
// Department or service
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService.join(','));
department.query();
while (department.next()) {
departmentService.push(department.sys_id.toString());
}
// Company or legal entity
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(','));
company.query();
while (company.next()) {
legalCompany.push(company.sys_id.toString());
}
// Now filter HR Profiles
current.addEncodedQuery("user.department.sys_idIN" + departmentService.join(",") + '^ORu_etablissement_juridique.sys_idIN' + legalCompany.join(","));
// Log result
gs.info("department to display: " + departmentService.join(","));
gs.info("Company to display: " + legalCompany.join(","));
})(current, previous);
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2025 10:06 AM
Hello @mregragui_ext
Here is the correction to be made:
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(","));
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
Here is the updated background script (always recommended to test code in Background script first and then later in Business Rule)
var hrScopeManagementService = [];
var hrLegalCompany = [];
var departmentService = [];
var legalCompany = [];
// Query u_hr_scope_mgmt table to get u_services and lu_legal_entities for the logged in user
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
// Log retrieved values for debugging
gs.info('Array of department services: ' + hrScopeManagementService.join(","));
gs.info('Array of company IDs: ' + hrLegalCompany.join(","));
// Ensure the array is correctly formatted for the encoded query
if (hrLegalCompany.length > 0) {
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(",")); // Query based on IDs
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
}
// Ensure the array is correctly formatted for the encoded query
if (hrScopeManagementService.length > 0) {
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService.join(","));
department.query();
while (department.next()) {
var sysId = department.sys_id.toString();
if (departmentService.indexOf(sysId) === -1) { // Prevent duplicates
departmentService.push(sysId);
}
}
}
// Log results
gs.info("Unique Department Sys IDs: " + departmentService.join(","));
gs.info("Unique Company Sys IDs: " + legalCompany.join(","));
Results:
Here is the correct version of your Business Rule:
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var hrScopeManagementService = [];
var departmentService = [];
var hrLegalCompany = [];
var legalCompany = [];
var hrScopeManagement = new GlideRecord("u_hr_scope_mgmt");
hrScopeManagement.addEncodedQuery("u_user=" + gs.getUserID());
hrScopeManagement.query();
while (hrScopeManagement.next()) {
hrScopeManagementService.push(hrScopeManagement.u_services.toString());
hrLegalCompany.push(hrScopeManagement.u_legal_entities.toString());
}
gs.info('array of departement' + hrScopeManagementService.toString());
gs.info('array of company' + hrLegalCompany.toString());
//Department or service
var department = new GlideRecord("cmn_department");
department.addEncodedQuery("idIN" + hrScopeManagementService);
department.query();
while (department.next()) {
departmentService.push(department.sys_id);
}
/////////New Updated Code Starts here/////////
var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany.join(","));
company.query();
while (company.next()) {
var sysId = company.sys_id.toString();
if (legalCompany.indexOf(sysId) === -1) { // Prevent duplicates
legalCompany.push(sysId);
}
}
/////////New Updated Code Ends here/////////
//Company or legal entity - Bad Code
/* var company = new GlideRecord("core_company");
company.addEncodedQuery("u_idIN" + hrLegalCompany);
company.query();
while (company.next()) {
legalCompany.push(company.sys_id);
} */
// Now filter HR Profiles
current.addEncodedQuery("user.department.sys_idIN" + departmentService.join(",") + '^ORu_etablissement_juridique.sys_idIN' + legalCompany.join(",")); // Apply
// Log result
gs.info("department to display : " + departmentService.join(","));
gs.info("Company to display : " + legalCompany.join(","));
})(current, previous);
Hope that helps!