我正在尝试引入客户端脚本,以防止模型驱动应用程序中的用户在查找 AAD 用户表的查找字段中选择自己。然而,这并没有达到预期的效果,用户仍然可以自行选择。谁能告诉我为什么吗?
这是我当前使用 Xrm.WebApi 的 JS...
function preventSelfSelection(executionContext) {
var formContext = executionContext.getFormContext();
// Retrieve the current user ID without curly braces
var userId = Xrm.Utility.getGlobalContext().userSettings.userId.replace("{", "").replace("}", "");
console.log("Current User ID: ", userId);
// Retrieve AAD ObjectId of the current user via Web API
Xrm.WebApi.retrieveRecord("systemuser", userId, "?$select=azureactivedirectoryobjectid").then(
function success(result) {
var currentAADObjectId = result.azureactivedirectoryobjectid;
console.log("Current User AAD ObjectId: ", currentAADObjectId);
// Get the AAD ObjectId from the "digphil_peerreviewer" field
var peerreviewer = formContext.getAttribute("digphil_peerreviewer").getValue();
if (peerreviewer && peerreviewer.length > 0) {
// Retrieve the selected user ID without curly braces
var selectedUserId = peerreviewer[0].id.replace("{", "").replace("}", "");
console.log("Selected User ID: ", selectedUserId);
// Get AAD ObjectId of the selected user
Xrm.WebApi.retrieveRecord("systemuser", selectedUserId, "?$select=azureactivedirectoryobjectid").then(
function success(peerreviewerResult) {
var selectedAADObjectId = peerreviewerResult.azureactivedirectoryobjectid;
console.log("Selected User AAD ObjectId: ", selectedAADObjectId);
if (currentAADObjectId.toLowerCase() === selectedAADObjectId.toLowerCase()) {
formContext.getControl("digphil_peerreviewer").setNotification("You cannot select yourself", "self_selection_error");
formContext.getAttribute("digphil_peerreviewer").setValue(null);
console.log("User attempted to select themselves. Resetting field.");
} else {
formContext.getControl("digphil_peerreviewer").clearNotification("self_selection_error");
}
},
function(error) {
console.log("Error fetching selected user AAD ObjectId: ", error.message);
// Handle error
}
);
}
},
function(error) {
console.log("Error fetching current user AAD ObjectId: ", error.message);
// Handle error
}
);
};
你应该能够更轻松地做到这一点
Xrm.Utility.getGlobalContext().userSettings.userId
返回当前用户记录的ID
formContext.getAttribute("digphil_peerreviewer").getValue()
从lookup中获取当前选中的用户记录的ID
如果这些值相同,则当前用户选择了自己的用户记录。您不需要做
Xrm.WebApi.retrieveRecord
或类似的复杂事情。
尝试这样的事情
function preventSelfSelection(executionContext) {
var formContext = executionContext.getFormContext();
// Retrieve the current user ID without curly braces
var userId = Xrm.Utility.getGlobalContext().userSettings.userId.replace(/[{}]/g, '').toLowerCase();
console.log('Current User ID: ', userId);
var selectedUserId = '';
var peerreviewer = formContext.getAttribute('digphil_peerreviewer').getValue();
if (peerreviewer && peerreviewer.length > 0) {
// Retrieve the selected user ID without curly braces
selectedUserId = peerreviewer[0].id.replace(/[{}]/g, '').toLowerCase();
console.log('Selected User ID: ', selectedUserId);
}
if (userId === selectedUserId) {
formContext.getAttribute('digphil_peerreviewer').setValue(null);
formContext.getControl('digphil_peerreviewer').setNotification('You cannot select yourself', 'self_selection_error');
console.log('User attempted to select themselves. Resetting field.');
} else {
formContext.getControl('digphil_peerreviewer').clearNotification('self_selection_error');
}
}