/**
* Retrieves and displays all security roles directly assigned to a user.
* Works with Xrm.WebApi inside Dynamics CE.
* @param {string} userId - The systemuserid (GUID) of the user.
*/
async function exportUserRoles(userId) {
if (!userId) {
console.error("❌ Please provide a userId (systemuserid).");
return;
}
userId = userId.replace(/[{}]/g, "");
console.log(`🔍 Fetching direct roles for userId: ${userId}`);
try {
// Step 1: Get all systemuserroles records for this user
const linkQuery = `?$filter=systemuserid eq ${userId}`;
const userRoles = await Xrm.WebApi.retrieveMultipleRecords("systemuserroles", linkQuery);
if (!userRoles.entities.length) {
console.warn("⚠️ No direct roles found for this user.");
return [];
}
// Step 2: Extract role IDs
const roleIds = userRoles.entities.map(r => r.roleid);
// Step 3: Fetch each role's details
const roles = [];
for (const id of roleIds) {
try {
const role = await Xrm.WebApi.retrieveRecord("role", id, "?$select=name,roleid");
roles.push({ RoleName: role.name, RoleId: role.roleid });
} catch (innerError) {
console.warn(`⚠️ Could not retrieve role ${id}:`, innerError.message);
}
}
// 🧮 Step 4: Sort roles alphabetically by RoleName
roles.sort((a, b) => a.RoleName.localeCompare(b.RoleName));
// Step 5: Display results
console.table(roles);
console.log(`✅ Total Direct Roles: ${roles.length}`);
return roles;
} catch (error) {
console.error("❌ Error retrieving roles:", error.message || error);
}
}