如何在.NET C# Windows应用中使用Dynamics 365 Channel Integration Framework (CIF)
.NET C# Windows应用集成Dynamics 365 CIF入门指南
一、前置准备
- 确认Windows应用基于.NET Framework/.NET 6+开发(根据项目类型选择对应框架)
- 持有有效的Dynamics 365访问令牌,令牌需包含CIF相关权限(如
crm.cif_access) - 记录Dynamics 365环境的组织URL(格式示例:
https://yourorg.crm.dynamics.com)
二、库引用
通过NuGet安装以下必要包:
Microsoft.PowerPlatform.Dataverse.Client:用于Dynamics 365数据交互System.Net.Http:用于CIF REST API请求
安装命令:
Install-Package Microsoft.PowerPlatform.Dataverse.Client Install-Package System.Net.Http
三、认证与连接初始化
1. 初始化HTTP客户端(用于CIF REST操作)
using System.Net.Http; using System.Net.Http.Headers; var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("https://yourorg.crm.dynamics.com/"); // 注入访问令牌 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "your_access_token_here"); // 设置OData协议版本 httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
2. 初始化Dataverse服务客户端(用于数据读写)
using Microsoft.PowerPlatform.Dataverse.Client; using Microsoft.Xrm.Sdk; var serviceClient = new ServiceClient( new Uri("https://yourorg.crm.dynamics.com/XRMServices/2011/Organization.svc"), null, "your_access_token_here", true); if (!serviceClient.IsReady) { throw new Exception($"连接失败: {serviceClient.LastError}"); }
四、核心操作示例
1. 打开Dynamics 365实体表单(CIF REST API)
通过cif_openform端点触发表单打开操作:
var openFormPayload = new { entityName = "account", entityId = "00000000-0000-0000-0000-000000000001", // 目标账户ID formId = "00000000-0000-0000-0000-000000000002", // 可选,指定表单ID windowParameters = new { openInNewWindow = true } }; var jsonContent = new StringContent( System.Text.Json.JsonSerializer.Serialize(openFormPayload), System.Text.Encoding.UTF8, "application/json"); var response = await httpClient.PostAsync("api/data/v9.2/cif_openform", jsonContent); response.EnsureSuccessStatusCode();
2. 查询Dynamics 365数据
使用Dataverse客户端查询符合条件的账户:
using Microsoft.Xrm.Sdk.Query; var query = new QueryExpression("account") { ColumnSet = new ColumnSet("name", "accountnumber", "emailaddress1"), Criteria = new FilterExpression { Conditions = { new ConditionExpression("name", ConditionOperator.Contains, "Contoso") } } }; var accounts = serviceClient.RetrieveMultiple(query); foreach (var account in accounts.Entities) { Console.WriteLine($"账户名称: {account.GetAttributeValue<string>("name")}"); Console.WriteLine($"账户编号: {account.GetAttributeValue<string>("accountnumber")}"); }
3. 创建实体记录
通过Dataverse客户端新建账户:
var newAccount = new Entity("account"); newAccount["name"] = "Contoso New Account"; newAccount["accountnumber"] = "CONT001"; newAccount["emailaddress1"] = "contact@contoso.com"; var accountId = serviceClient.Create(newAccount); Console.WriteLine($"新账户ID: {accountId}");
五、关键注意事项
- 访问令牌需定期刷新,避免过期导致请求失败
- 需确保应用已在Dynamics 365中注册为CIF渠道应用,并配置对应权限与渠道信息
- 所有API请求建议使用最新稳定版Dynamics 365 API(如v9.2)
内容的提问来源于stack exchange,提问作者Jon R.
相关产品推荐
相关产品推荐

