Невозможно добавить сервисную ссылку на Dynamics 365 crm в visual studio 2012
Я пытаюсь добавить сервисную ссылку на Dynamics 365 CRM, используя следующий API https://[Organization].api.crm8.dynamics.com/api/data/v8.2/
но каждый раз, когда я получаю это окно, которое запрашивает у меня учетные данные....
Я пытался использовать учетные данные, которые я использую для входа в crm... но они не работают... может кто-нибудь сказать мне, какие учетные данные я должен использовать?..
2 ответа
Почему именно вы пытаетесь добавить ссылку на веб-сервисы CRM? Предполагая, что вы хотите получить доступ к CRM из серверного кода, вам нужно сделать следующее:
- Добавьте ссылки на основные сборки CRM SDK (Microsoft.Crm.Sdk.Proxy.dll и Microsoft.Xrm.Sdk.dll). Вы можете получить их из загружаемого SDK или просто добавить пакет NuGet "Microsoft.CrmSdk.CoreAssemblies".
- После этого вы сможете написать код, "разговаривающий" с CRM. Но чего вам не хватает, так это фактического "соединения". Есть несколько способов получить его, но самый простой из них - использовать вспомогательный класс Xrm Tooling, описанный здесь - https://msdn.microsoft.com/en-us/library/mt608573.aspx. Вам нужно будет сослаться на требуемые сборки или использовать пакет NuGet "Microsoft.CrmSdk.XrmTooling.CoreAssembly".
Сделав все это, вы сможете успешно писать код на Dynamics CRM.
CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCRMServer"].ConnectionString);
IOrganizationService orgService = crmSvc.OrganizationServiceProxy;
// Who am I?
WhoAmIResponse whoAmIResp = orgService.Execute(new WhoAmIRequest()) as WhoAmIResponse;
Guid myUserId = whoAmIResp.UserId;
// Get all accounts starting with 'A'
QueryExpression query = new QueryExpression("account");
query.ColumnSet = new ColumnSet("accountid", "name");
query.Criteria.AddCondition("name", ConditionOperator.BeginsWith, "a");
EntityCollection ecoll = orgService.RetrieveMultiple(query);
foreach(Entity account in ecoll.Entities)
{
if(account.Attributes.Contains("name"))
{
Console.WriteLine((string)account["name"]);
}
}
// Update some account
Entity accountToUpdate = new Entity("account");
accountToUpdate["accountid"] = new Guid("_some_guid_here");
accountToUpdate["name"] = "new name";
orgService.Update(accountToUpdate);
Если вы хотите использовать типобезопасный подход, вам нужно сгенерировать прокси-класс - как описано здесь: https://msdn.microsoft.com/en-us/library/gg327844.aspx
После этого вы сможете написать такой код:
DataContext data = new DataContext(orgService);
// DataContext is the name of the service context, as defined in the CrmScv tool
var myAccountData = (from a in data.AccountSet
where a.Address1_Telephone1 == "12312313"
select new
{
a.AccountId,
a.Name,
a.EMailAddress1,
a.PrimaryContactId
}).First();
Contact contactToUpdate = new Contact()
{
ContactId = myAccountData.PrimaryContactId.Id,
EMailAddress1 = myAccountData.EMailAddress1
};
orgService.Update(contactToUpdate);
... что намного приятнее и менее подвержено ошибкам.
Судя по всему, вы пытаетесь пройти проверку подлинности через приложение вне контекста Dynamics 365. Если вы хотите выполнить проверку подлинности с помощью веб-API таким образом, вам придется подключаться к веб-службам Microsoft Dynamics 365 с помощью OAuth и выполнять проверку подлинности с помощью ADAL
https://msdn.microsoft.com/en-us/library/gg327838.aspx
Вот пошаговое руководство о том, как это сделать
https://msdn.microsoft.com/en-us/library/mt622431.aspx
Дополнительное примечание:
Если вы используете CRM 2013 SDK, вам может потребоваться обновление до 6.1.2 для поддержки Dynamics 365
https://blogs.msdn.microsoft.com/crm/2017/02/01/dynamics-365-sdk-backwards-compatibility/