我正在从事一个包含Dynamics和Portal的项目,它建立在Sitefinity的基础上。
有一种方法可以从动态客户关系管理( 保存查询 )中检索门户连接器内部的数据,这种方法可以为您生成一个URL,以便您在前端通过HTTP请求检索数据,但我不想通过前端访问它--我想通过后端访问Dynamics,特别是按实体框架访问Dynamics,是否可以通过实体框架连接到动态客户关系管理并通过C#检索数据,然后将其发送到View?
发布于 2021-01-28 10:47:08
让我回答我的问题,万一将来有人想做类似的事情:
首先,连接到动态CRM与Portal连接器无关,所以您应该搜索的区域是动态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 ==> on ==>插件商店,==>早期绑定的Generator==>Early绑定生成器页面将打开,选择实体,跳过并选择要包含的实体和想要排除===>的实体,选择生成的.cs类的路径,该路径将代表您的项目中的实体,请按Create ===>,现在复制生成的文件。
现在您有了类似于实体框架的内容:
只需将实体名称用作普通类:
var account = new Account{Name="Ahmed"};而不是这样:
organization.CreateQuery("account") 使用
organization.CreateQuery<yourEntityName>()实际上,我从youtube获得了所有与Dynamic相关的信息,下面是链接
注:由于这个原因,我总结了这个答案中的步骤,使它对所有的人都有帮助。
发布于 2021-04-23 23:51:46
我很抱歉没能早点到达你的岗位。
更好的方法是使用Portal提供的CRM连接。它本质上封装了CRM,因此可以在这里调用SDK,并使用站点中配置的CRM连接。
// 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文件夹中,因为它们是随Portal程序集一起附带的,并在安装过程中与Portal一起复制到该位置。如果您的代码位于另一个项目中,请参考Sitefinity项目中的程序集,或者将它们从添加到项目中。
我知道现在有点晚了,但我希望它能对您的下一个门户项目有所帮助。
https://stackoverflow.com/questions/65829773
复制相似问题