0

我正在尝试使用以下 API 添加对 Dynamics 365 CRM 的服务引用,https://[Organization].api.crm8.dynamics.com/api/data/v8.2/但每次我收到此窗口时都会要求我提供凭据...。在此处输入图像描述

我尝试使用用于登录 crm 的凭据...但它们不起作用...有人可以告诉我应该使用哪个凭据吗?...

4

2 回答 2

0

从外观上看,您正在尝试通过 Dynamics 365 上下文之外的应用程序进行身份验证。如果您想通过这种方式使用 Web API 进行身份验证,则必须使用 OAuth 连接到 Microsoft Dynamics 365 Web 服务并使用 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/

于 2017-02-11T16:42:06.193 回答
0

您究竟为什么要尝试添加对 CRM Web 服务的引用?假设您想从服务器端代码访问 CRM,您需要做的是:

  1. 添加对核心 CRM SDK 程序集(Microsoft.Crm.Sdk.Proxy.dll 和 Microsoft.Xrm.Sdk.dll)的引用。您可以从可下载的 SDK 中获取它们,或者只需添加“Microsoft.CrmSdk.CoreAssemblies”NuGet 包。
  2. 完成此操作后,您将能够编写与 CRM “对话”的代码。但是您缺少的是实际的“连接”。有几种获取它的方法,但最简单的一种是使用 Xrm Tooling 帮助程序类,在此处描述 - https://msdn.microsoft.com/en-us/library/mt608573.aspx。您需要引用所需的程序集或使用“Microsoft.CrmSdk.XrmTooling.CoreAssembly”NuGet 包。

完成所有这些操作后,您将能够成功地针对 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);

...这更好,更不容易出错。

于 2017-02-14T13:27:35.857 回答