java - 将角色关联到用户 Microsoft Dynamics CRM(Rest API)

标签 java dynamics-crm microsoft-dynamics dynamics-crm-online dynamics-crm-webapi

我有一个用例,我需要创建一个角色,在 crm 实例中创建一个用户 并将角色关联到用户。

我探索了创建用户和创建角色的 API。

代码如下:

private void createUser(IntegrationUserDTO integrationUserDTO, STSDto stsDetails, CRMAuthContext crmAuthContext)
            throws IntegrationsException {
        Map<String, Object> requestBody = new HashMap<>();
        URI uri = new MSCRMHttpDelegate().odataUriBuilder(crmAuthContext.getCrmApiUrl())
                .appendEntitySetSegment("systemusers").build();
        HttpPost httpPost = new HttpPost(uri.toString());
        httpPost.setHeader("Authorization", "Bearer " + crmAuthContext.getAccessToken());
        httpPost.setHeader("Accept", MediaType.APPLICATION_JSON);
        httpPost.setHeader("OData-MaxVersion", "4.0");
        httpPost.setHeader("OData-Version", "4.0");
        httpPost.setHeader("Content-Type", "application/json");

        requestBody.put("accessmode", "4");
        requestBody.put("applicationid", UUID.fromString(stsDetails.getClientId()));
        requestBody.put("firstname", integrationUserDTO.getUsername());
        requestBody.put("lastname", integrationUserDTO.getSecretToken());
        requestBody.put("internalemailaddress", integrationUserDTO.getExtraParams());
        requestBody.put("isintegrationuser", true);
        MSCRMUser user = getBusinessUnitId(crmAuthContext);

        if (StringUtils.isNoneBlank(user.getBusinessUnitId())) {
            requestBody.put("businessunitid@odata.bind",
                    "/businessunits(" + UUID.fromString(user.getBusinessUnitId()) + ")");
        }

        if (StringUtils.isNoneBlank(user.getOrganizationId())) {
            requestBody.put("organizationid", UUID.fromString(user.getOrganizationId()));
        }

        try {
            httpPost.setEntity(new StringEntity(
                    new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(requestBody)));

            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                if (response.getStatusLine().getStatusCode() >= 400) {
                    log.info("error in adding privileges to role at microsoft instance =");
                    throw new IntegrationsException(IntegrationsErrorCode.CRM_UNAUTHORIZED_ACCESS);
                }
            }
        } catch (Exception e) {
            throw new IntegrationsException(IntegrationsErrorCode.INTERNAL_ERROR, e);
        }
    }

private void createRole(IntegrationUserDTO integrationUserDTO, STSDto stsDetails, CRMAuthContext crmAuthContext)
            throws IntegrationsException {
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("name", ROLE_NAME);
        MSCRMUser user = getBusinessUnitId(crmAuthContext);
        if (StringUtils.isNoneBlank(user.getBusinessUnitId())) {
            requestBody.put("businessunitid@odata.bind",
                    "/businessunits(" + UUID.fromString(user.getBusinessUnitId()) + ")");
        }
        if (StringUtils.isNoneBlank(user.getOrganizationId())) {
            requestBody.put("organizationid", UUID.fromString(user.getOrganizationId()));
        }
        URI uri = new MSCRMHttpDelegate().odataUriBuilder(crmAuthContext.getCrmApiUrl()).appendEntitySetSegment("roles")
                .build();
        HttpPost httpPost = new HttpPost(uri.toString());
        httpPost.setHeader("Authorization", "Bearer " + crmAuthContext.getAccessToken());
        httpPost.setHeader("Accept", MediaType.APPLICATION_JSON);
        httpPost.setHeader("OData-MaxVersion", "4.0");
        httpPost.setHeader("OData-Version", "4.0");
        httpPost.setHeader("Content-Type", "application/json");

        try {
            httpPost.setEntity(new StringEntity(
                    new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(requestBody)));

            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                if (response.getStatusLine().getStatusCode() >= 400) {
                    log.info("error in adding privileges to role at microsoft instance =");
                    throw new IntegrationsException(IntegrationsErrorCode.CRM_UNAUTHORIZED_ACCESS);
                }
            }
        } catch (Exception e) {
            throw new IntegrationsException(IntegrationsErrorCode.INTERNAL_ERROR, e);
        }
    }

我找不到任何 Rest API 来将用户关联到角色。 我看过 soap API,但没有看到任何 rest API。我在 Dynamics CRM 文档中进行了探索,我没有看到与实体的角色关联相关的任何内容。有谁知道任何将角色与用户相关联的 rest api?

最佳答案

您可以使用 Web API 向 associate 发送请求具有给定角色的用户。

用户和角色之间的关系称为systemuserroles_association .因此,您应该发送以下格式的请求:

POST [Organization URI]/api/data/v9.0/systemusers(00000000-0000-0000-0000-000000000002)/systemuserroles_association/$ref HTTP/1.1   
Content-Type: application/json   
Accept: application/json   
OData-MaxVersion: 4.0   
OData-Version: 4.0  

{  
"@odata.id":"[Organization URI]/api/data/v9.0/roles(00000000-0000-0000-0000-000000000001)"  
}  

关于java - 将角色关联到用户 Microsoft Dynamics CRM(Rest API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238107/

相关文章:

java - 如何扫描特定目录中具有特定扩展名的文件?

java - 如何将变量值添加到mysql语句中?

dynamics-crm-2011 - crm webapi 中的多级扩展

java - Android:运行一个空方法会产生多少开销?

java - 从sql数据库中的多个表中提取数据

c# - 识别从插件中的 outlook/电子邮件创建的记录

sql - 如何在 SQL Server 2005 数据库中使用 T-SQL 用零填充 NVARCHAR 字段?

javascript - 设置 document.title 在 Dynamics CRM 2011 JScript 中不起作用

axapta - MS Dynamic AX 2009时区问题

javascript - 错误请求进行 AJAX 调用时 : This. readyState 未定义