我正在做一个包含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上得到了所有与动态相关的信息,这里是链接
由于这个原因,我总结了这个答案中的步骤,使它对所有人都有帮助。