将角色与用户关联Microsoft Dynamics CRM(Rest API)

时间:2018-07-09 04:08:54

标签: java dynamics-crm microsoft-dynamics dynamics-crm-online microsoft-dynamics-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,但没有看到其他的API。我在动态CRM文档中进行了探索,但没有发现与实体角色关联相关的任何信息。有人知道有任何其他api将角色与用户相关联吗?

3 个答案:

答案 0 :(得分:3)

您可以使用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)"  
}  

答案 1 :(得分:0)

这对多个角色有用吗?

account.agent.ddi == "" || account.agent.ddi == nil ? self.ddiLabel.text = "02039909000" : self.ddiLabel.text =  account.agent.ddi

答案 2 :(得分:0)