有人可以使用linq发布已确认的示例,以检索和更新CRM Dynamics 2011中的记录。
微软声称这是“不受支持的”,但我怀疑这是可能的。
答案 0 :(得分:3)
我使用“早期绑定”方法,您可以使用CrmSvcUtil.exe
工具生成C#实体类,但请确保使用您在各种示例中找到的/codecustomization
开关。您需要最新版本的CRM 2011 SDK,并且必须从CrmSvcUtil.exe
文件夹中运行\bin
(不要使用随CRM安装的版本)。
您的项目需要引用Microsoft.Xrm.Client
,Microsoft.Xrm.Sdk
和Microsoft.Crm.Sdk.Proxy
以及.Net框架中的其他一些内容(查看构建错误以查看您缺少的内容,然后添加它们直到它构建)。
这是一个基本的代码片段,用于检索Contact实体,更新其中一个字段,然后将其保存回CRM:
CrmDataContext dc = new CrmDataContext("Xrm");
Contact contact = (from c in dc.ContactSet
where ...whatever...
select c).FirstOrDefault();
contact.FirstName = "Jo";
dc.SaveChanges();
(请注意CrmDataContext
是我的数据上下文的名称。您可以使用CrmSvcUtil
命令行开关之一设置此名称。
您还需要在web.config中添加一些内容:
<configSections>
<section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection, Microsoft.Xrm.Client" />
</configSections>
<connectionStrings>
<add name="Xrm" connectionString="Server=http://<your crm url>; Domain=<your domain>; Username=<a crm user id>; Password=<their password>" />
</connectionStrings>
<microsoft.xrm.client>
<contexts>
<add name="Xrm" type="" />
</contexts>
</microsoft.xrm.client>
这假设您在公司网络上运行CRM,因此连接字符串中指定的帐户和域将是一个AD帐户,该帐户被设置为具有检索和更新实体的相关权限的CRM用户。
答案 1 :(得分:0)
这是使用连接到在线提供商的ODATA提供商的粗略示例
var serverConfig = GetServerConfig(sessionKey);
// Connect to the Organization service.
// The using statement ensures that the service proxy will be properly disposed.
using (var serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
{
// This statement is required to enable early-bound type support.
serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
using (var orgContext = new CrmServiceContext(serviceProxy))
{
return orgContext.AccountSet.Where(item => item.Id == id).Select().Single();
}
}
SDK中还有一个很好的例子:
CRM2011Sdk \ SDK \ samplecode \ CS \ wsdlbasedproxies \在线