无法在 visual studio 2012 中添加对 Dynamics 365 crm 的服务引用
Unable to add a service reference to Dynamics 365 crm in visual studio 2012
我正在尝试使用以下 API https://[Organization].api.crm8.dynamics.com/api/data/v8.2/
添加对 Dynamics 365 CRM 的服务引用,但每次我收到此 window 时都要求我提供凭据....
我尝试使用我用来登录 crm 的凭据...但它们不起作用...有人可以告诉我应该使用哪个凭据吗?..
从外观上看,您正在尝试通过 Dynamics 365 上下文之外的应用程序进行身份验证。如果您想通过 Web API 通过这种方式进行身份验证,则必须连接到 Microsoft Dynamics 365使用 OAuth 的 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/
您究竟为什么要尝试添加对 CRM 网络服务的引用?假设您想从服务器端代码访问 CRM,您需要做的是:
- 添加对核心 CRM SDK 程序集的引用(Microsoft.Crm.Sdk.Proxy.dll 和 Microsoft.Xrm.Sdk.dll)。您可以从可下载的 SDK 中获取它们,也可以只添加 "Microsoft.CrmSdk.CoreAssemblies" NuGet 包。
- 完成此操作后,您将能够使用 CRM 编写代码 "talking"。但是您缺少的是实际的 "connection"。有几种获取它的方法,但最简单的方法是使用 Xrm 工具助手 class,此处有描述 - 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);
如果您想使用类型安全的方法,您需要生成一个代理 class - 如此处所述: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);
...这更好,更不容易出错。
我正在尝试使用以下 API https://[Organization].api.crm8.dynamics.com/api/data/v8.2/
添加对 Dynamics 365 CRM 的服务引用,但每次我收到此 window 时都要求我提供凭据....
我尝试使用我用来登录 crm 的凭据...但它们不起作用...有人可以告诉我应该使用哪个凭据吗?..
从外观上看,您正在尝试通过 Dynamics 365 上下文之外的应用程序进行身份验证。如果您想通过 Web API 通过这种方式进行身份验证,则必须连接到 Microsoft Dynamics 365使用 OAuth 的 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/
您究竟为什么要尝试添加对 CRM 网络服务的引用?假设您想从服务器端代码访问 CRM,您需要做的是:
- 添加对核心 CRM SDK 程序集的引用(Microsoft.Crm.Sdk.Proxy.dll 和 Microsoft.Xrm.Sdk.dll)。您可以从可下载的 SDK 中获取它们,也可以只添加 "Microsoft.CrmSdk.CoreAssemblies" NuGet 包。
- 完成此操作后,您将能够使用 CRM 编写代码 "talking"。但是您缺少的是实际的 "connection"。有几种获取它的方法,但最简单的方法是使用 Xrm 工具助手 class,此处有描述 - 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);
如果您想使用类型安全的方法,您需要生成一个代理 class - 如此处所述: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);
...这更好,更不容易出错。