使用实体框架与Sitefinity和门户连接器和动态CRM



我正在做一个包含Dynamics CRM和基于Sitefinity的门户连接器的项目。

有一种方法可以从动态CRM中检索门户连接器内的数据,称为保存查询,这种方式为您生成一个URL,以便在前端通过HTTP请求检索数据,但我不想通过前端访问它,我想通过Backened访问Dynamics CRM,特别是通过实体框架,是否有可能通过实体框架连接到动态CRM并通过c#检索数据,然后将其发送到视图?

很抱歉没有及时看到你的帖子。

更好的方法是使用Portal Connector提供的CRM连接。它本质上包装了CRM SDK,因此您可以在这里对SDK进行调用,并且它使用站点中配置的CRM连接。

https://www.crmportalconnector.com/developer-network/documentation/developing-for-tpc/Dynamics-CRM-Connection-API

// Required usings
using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using pavliks.PortalConnector.Crm.Connection; 
// The Code
// Create an instance of the connection manager
CrmConnectionManager manager = new CrmConnectionManager();
// Use the Connection property of the manager to access the 
// configured CRM connection and create a new account
Guid newId = manager.Connection.Create(new Entity("account")
{
Attributes = new AttributeCollection()
{
{"name", "My Account Name"}
}
});
// Create Query Expression
QueryExpression query = new QueryExpression("account")
{
ColumnSet = new ColumnSet(true),

};
// Use manager to query CRM
EntityCollection entities = manager.Connection.RetrieveMultiple(query);

所有所需的程序集都已经在Sitefinity站点bin文件夹中,因为它们随门户连接器程序集一起提供,并在安装期间与门户连接器一起复制到该位置。如果您的代码位于另一个项目中,则要么在Sitefinity项目中引用程序集,要么从Portal Connector部署包中将它们添加到您的项目中。

我知道这有点晚了,但我希望它能帮助你在你的下一个门户项目。

让我来回答我的问题,以防将来有人想做类似的事情:

1-连接到Dynamic CRM的第一件事与Portal Connector无关,因此您应该搜索的区域是Dynamic CRM。

2-连接到动态CRM你应该按照以下步骤:
2.1-安装这个包" microsoft . crmsdk . xrmtool . 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();

//实现Early bound

1-去XrmToolBox ==>= =比;插件商店==>提前绑定生成器页面将打开选择要跳过的实体,并选择要包含和要排除的实体= = =比;选择生成的.cs类的路径,它将代表你在项目中的实体===>按创建实体===>现在复制生成的文件。

现在你有了类似实体框架:

使用Entity name作为普通类:

var account = new Account{Name="Ahmed"};

而不是:

organization.CreateQuery("account") 

使用

organization.CreateQuery<yourEntityName>()

实际上,我从youtube上得到了所有与动态相关的信息,这里是链接

由于这个原因,我总结了这个答案中的步骤,使它对所有人都有帮助。

最新更新