You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中调用Dynamics 365 Word模板生成文档?需CRM服务还是第三方库?

在C#中调用Dynamics 365 Word模板生成功能的实现方向

你完全不需要依赖第三方库,也不用走MS CRM的服务请求流程——Dynamics 365本身就提供了原生的API支持在C#代码里调用Word模板生成功能,下面给你具体的方向指导:

核心前置准备

  • 先确认你的Word模板已经在Dynamics 365中配置完成,并且正确关联了Invoice实体,模板状态设置为可用(界面上能手动生成文档才算正常)。
  • 准备好目标Invoice记录的ID、对应的DocumentTemplate记录的ID,以及Dynamics 365的连接信息(连接字符串或Web API端点)。

两种主流实现方式

1. 使用Organization Service(适合.NET Framework项目)

这是传统.NET框架项目常用的方式,依赖Dynamics 365的SDK包:

  • 先通过NuGet安装Microsoft.Crm.Sdk.Proxy和Microsoft.Xrm.Sdk两个包。
  • 核心是调用GenerateWordDocumentRequest这个内置消息请求,示例代码如下:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;
using System.IO;

// 初始化服务连接
var service = new CrmServiceClient("你的Dynamics 365连接字符串");
if (service.IsReady)
{
    // 构造生成请求
    var generateRequest = new GenerateWordDocumentRequest
    {
        EntityId = new Guid("目标Invoice记录的GUID"),
        EntityName = "invoice", // Invoice实体的逻辑名称
        TemplateId = new Guid("对应的DocumentTemplate记录的GUID")
    };

    // 执行请求并获取结果
    var response = (GenerateWordDocumentResponse)service.Execute(generateRequest);
    
    // 将返回的字节数组保存为Word文件
    File.WriteAllBytes(@"C:\生成的发票文档.docx", response.DocumentBody);
}

2. 使用Web API(适合.NET Core/.NET 5+或跨平台场景)

如果你的项目是基于.NET Core或需要跨平台,用Web API更灵活:

  • 用HttpClient发送POST请求到Dynamics 365的Web API端点:[你的组织URI]/api/data/v9.2/generateworddocument
  • 请求体需要包含三个关键参数,示例代码如下:
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("你的Dynamics 365组织URI");
// 设置身份验证(比如OAuth,具体根据你的认证方式调整)
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "你的访问令牌");

// 构造请求参数
var requestBody = new
{
    EntityId = "目标Invoice记录的GUID字符串",
    EntityName = "invoice",
    TemplateId = "对应的DocumentTemplate记录的GUID字符串"
};

var jsonContent = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("api/data/v9.2/generateworddocument", jsonContent);

if (response.IsSuccessStatusCode)
{
    // 获取生成的文档字节流并保存
    var documentBytes = await response.Content.ReadAsByteArrayAsync();
    await File.WriteAllBytesAsync(@"C:\生成的发票文档.docx", documentBytes);
}

关键权限注意事项

  • 确保你的应用使用的服务账号(或用户账号)拥有这些权限:
    • 对Invoice实体的读取权限
    • 对DocumentTemplate实体的读取权限
    • 安全角色中启用“生成Word文档”的权限

如果遇到生成失败的情况,建议先在Dynamics 365界面手动测试生成该模板的文档,确认模板本身没有问题,再排查代码中的参数、连接或权限问题。

内容的提问来源于stack exchange,提问作者Muhammad Naderi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:30:14