使用 Entity framework 与 Sitefinity 和 Portal Connector 以及 Dynamic CRM

Working with Entity framework with Sitefinity and Portal Connector and Dynamic CRM

我正在开发一个包含基于 Sitefinity 的 Dynamics CRM 和 Portal Connector 的项目。

有一种方法可以从名为 Saved Query 的 Dynamic CRM 中检索 Portal Connector 内的数据,这种方法会生成一个 URL 供您通过前端的 HTTP 请求检索数据,但我不知道我不想通过前端访问它 我想通过 Backened 访问 Dynamics CRM,特别是通过 Entity framework,是否可以通过 Entity framework 连接到 Dynamic CRM 并通过 C# 检索数据然后发送要查看吗?

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

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

2- 要连接到 Dynamic 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 class 的路径,它将代表您项目中的实体 ===> 按创建实体 ===> 现在复制生成的文件 .

现在你有类似 Entity framework 的东西:

正常使用实体名称即可 class :

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

而不是这个:

organization.CreateQuery("account") 

使用

organization.CreateQuery<yourEntityName>()

实际上,我从与动态相关的 youtube 上获得了所有这些信息,这里是 link

注意:由于这个原因,在阿拉伯语中这个严重的问题我总结了这个答案中的步骤以使其对所有人都有帮助。

很抱歉没有早点遇到您的post。

更好的方法是使用门户连接器提供的 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 文件夹中,因为它们随 Portal Connector 程序集一起提供,并在安装期间随 Portal Connector 一起复制到该位置。如果您的代码在另一个项目中,请引用 Sitefinity 项目中的程序集或将它们从 Portal Connector 部署包添加到您的项目中。

我知道有点晚了,但我希望它对您的下一个门户项目有所帮助。