问题描述
我正在处理一个项目,其中包含基于 Sitefinity 构建的 Dynamics CRM 和 Portal Connector。
有一种方法可以从名为 Saved Query 的 Dynamic CRM 检索 Portal Connector 内的数据,这种方法会生成一个 URL 供您通过前端的 HTTP 请求检索数据,但我不想通过以下方式访问它我想通过Backened访问Dynamics CRM的前端,特别是通过实体框架,是否可以通过实体框架连接到Dynamic CRM并通过C#检索数据然后将其发送到View?
解决方法
很抱歉没有早点看到您的帖子。
更好的方法是使用 Portal Connector 提供的 CRM 连接。它本质上封装了 CRM SDK,因此您可以在此处对 SDK 进行调用,并且它使用站点中配置的 CRM 连接。
box-shadow: none;
所有必需的程序集都已在 Sitefinity 站点 bin 文件夹中,因为它们随 Portal Connector 程序集一起提供,并在安装期间使用 Portal Connector 复制到该位置。如果您的代码在另一个项目中,请引用 Sitefinity 项目中的程序集或将它们从 Portal Connector 部署包添加到您的项目中。
我知道现在有点晚了,但我希望它对您的下一个门户项目有所帮助。
,让我回答我的问题,以防将来有人想做类似的事情:
1- 首先连接到 Dynamic CRM 与 Portal Connector 无关,因此您应该搜索的区域是 Dynamic CRM。
2- 要连接到动态 CRM,您应该按照以下步骤操作:
2.1- 安装这个包“Microsoft.CrmSdk.XrmTooling.CoreAssembly”
2.2- 找到您的连接字符串。
2.3 使用下面的代码
var service=new CrmServiceClient("AuthType=Office365;Url=https://ititisdf.crm4.dynamics.com;Password=1234" )/*put your connection string instead*/
3- 您可以创建或检索数据的一些示例
service.Create(new Entity("account"){["name]="Test connection"}); // add record
// retrive data
//1- query expression
//var query= new QueryExpression().Criteria. <===== from here you can add filteration ... and so on
//2- fetch xml expression
//var query=new FetchExpression(@"fetch xml value"); // you need to use XrmToolBox to generate your fetchXml
//3- var query=new QueryByAttribute("account");
// query.AddAttributeValue("name","Test1");
var entities=service.RetrieveMultiple(query).Entities;
foreach(var entity in entities)
{
entity["name"];
}
var organization=new OrganizationServiceContext(service);
// below code is under a concept called late-bound
var result=(from account in organization.CreateQuery("account")
join contact in organization.CreateQuery("contact")
on account["primarcontactid"] equals contact["contactid"]
where account["gendercode"] == "test" AND account["industrycode"]=1
select new {
Name=account["name"],ContactName=contact["fullname"]
}).ToList();
// 实现早期绑定
1- 转到 XrmToolBox ==> 关于 ==> 插件商店 ==> 早期绑定生成器==>早期绑定生成器页面将打开选择要跳过的实体并选择要包含的实体和要排除的实体 ===> 选择生成的 .cs 类的路径,该类将代表您项目中的实体 ===> 按创建实体 ===> 现在复制生成的文件。
现在你有类似实体框架的东西:
只需将实体名称用作普通类:
var account = new Account{Name="Ahmed"};
而不是这个:
organization.CreateQuery("account")
使用
organization.CreateQuery<yourEntityName>()
实际上,我从 youtube 上得到了所有与 Dynamic 相关的信息,这里是 link
注意:由于这个原因,我总结了这个答案中的步骤以使其对所有人都有帮助。