XRM JavaScript - 如果用户选择自己,会抛出错误?

问题描述 投票:0回答:1

我正在尝试引入客户端脚本,以防止模型驱动应用程序中的用户在查找 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
    }
  );
};
javascript typescript dynamics-crm powerapps powerapps-modeldriven
1个回答
0
投票

你应该能够更轻松地做到这一点

  • 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');
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.