当前位置: 首页 > news >正文

Dynamics365 ExportPdfTemplateExportWordTemplate两个Action调用的body构造

      这两天在用ExportPdfTemplate做pdf导出功能时,遇到了如下问题InnerException : Microsoft.OData.ODataException: An unexpected 'StartArray' node was found when reading from the JSON reader. A 'PrimitiveValue' node was expected.

      我的场景是使用power automate根据单据的状态变化触发,向特定用户发送带pdf附件的邮件通知,pdf附件是基于Word模版生成而来

      主要是通过ExportPdfTemplate这个Action,在automate中一个http请求拿到base64的文件流后赋值给send mail操作的附件里

      参考的是这篇文章,在构造body的时候忽略了SelectedRecords这个参数的格式,浪费了我很多时间去解决问题

      如下是最初的错误body

{
  "SelectedTemplate": {
    "documenttemplateid": "5aac6ad6-af13-f011-998a-002248582342",
    "@odata.type": "Microsoft.Dynamics.CRM.documenttemplate"
  },
  "EntityTypeCode": 10629,
  "SelectedRecords": [
    "8b59ddeb-b00a-f011-bae3-000d3aa1971f"
  ]
}

    SelectedRecords接受的是一个字符串,而我设置成了数组,正确的是下面这样

{
  "SelectedTemplate": {
    "documenttemplateid": "5aac6ad6-af13-f011-998a-002248582342",
    "@odata.type": "Microsoft.Dynamics.CRM.documenttemplate"
  },
  "EntityTypeCode": 10629,
  "SelectedRecords": "[\"8b59ddeb-b00a-f011-bae3-000d3aa1971f"\]"
}

    下面是一段前端示例代码,在你登录D365的情况下,可以打开F12,在console中直接可以用,只需要把body中的EntityTypeCode,documenttemplateid, SelectedRecords中的参数替换成你的就行,可以用来测试

(async function () {

    const url = "https://xx-dev.crm5.dynamics.com/api/data/v9.2/ExportPdfDocument"; // 替换组织域名

var body={
  "EntityTypeCode": 10629,
  "SelectedTemplate": {
    "@odata.type": "Microsoft.Dynamics.CRM.documenttemplate",
    "documenttemplateid": "5aac6ad6-af13-f011-998a-002248582342"
  },
  "SelectedRecords": "[\"{8b59ddeb-b00a-f011-bae3-000d3aa1971f}\"]"
}

    const response = await fetch(url, {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "OData-MaxVersion": "4.0",
            "OData-Version": "4.0",
            "Accept": "application/json"
        },
        body: JSON.stringify(body)
    });

    if (!response.ok) {
        const errorText = await response.text();
        console.error("Error exporting PDF:", errorText);
    } else {
        const result = await response.json();
        console.log("PDF Exported:", result);
        // 可选:将结果中的 PDF 下载到本地
        const link = document.createElement('a');
        link.href = "data:application/pdf;base64," + result.PdfFile;
        link.download = "exported-document.pdf";
        link.click();
    }
})();

    如下是后端C#代码中的代码示例,主要关注body的构造


 public void ExportPDF()
 {
     string actionParams = "{    " +
         "\"EntityTypeCode\": 106029,    " +
         "\"SelectedTemplate\": {        " +
             "\"@odata.type\": \"Microsoft.Dynamics.CRM.documenttemplate\",        " +
             "\"documenttemplateid\": \"eb6b70cf-542e-ed11-9daf-0017fa02473a\"    " +
         "},    " +
         "\"SelectedRecords\": \"[\"{72AFD26F-F337-ED11-9DAF-0017FA055BEE}\"]\"" +
         "}";

     var _service = new MSCRMService();

     string result = _service.CallCrmAction("", "", "ExportPdfDocument", actionParams);

 }

     如下是power automate中的的body的构造参考

http://www.dtcms.com/a/126884.html

相关文章:

  • CASAIM自动化智能检测系统在螺杆转子数字化检测应用
  • 使用 Datadog 和 Slack Alerts 监控 minikube
  • Linux安装Elasticsearch详细教程
  • 乳腺癌识别:双模型融合
  • 行销和随销的区别
  • 深入理解 WebMvcConfigurer:定制 Spring MVC 的核心接口
  • AI与深度伪造技术:如何识别和防范AI生成的假视频和假音频?
  • CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤
  • 24FIC
  • 【数学建模】(智能优化算法)天牛须算法(Beetle Antennae Search, BAS)详解与Python实现
  • 利用 RNN 预测股票价格:从数据处理到可视化实战
  • 人工智能之数学基础:复矩阵
  • 机器人零位标定修正流程介绍
  • ZFS 数据恢复:从误删修复到 RAIDZ 恢复,原生工具与第三方软件对比
  • 【图像处理】:opencv实现模糊图像处理和对比度增强
  • 宝马集团加速 ERP 转型和上云之旅
  • 项目实战——苍穹外卖
  • 基于STM32、HAL库的CH224Q快充协议芯片简介及驱动程序设计
  • 关于“网络编程“组件之 “Buffer“
  • Python中的数值运算函数及math库详解
  • 【vant 手机端封装表格】
  • C# virtual 和 abstract 详解
  • Android 中如何配置 targetSdk 值
  • 操作系统 4.1-I/O与显示器
  • MySQL 进阶 - 2 ( 15000 字详解)
  • 使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标
  • 2025年- H7-Lc114-15.三数之和(双指针)--java版
  • oracle update 原理
  • C++的inline函数
  • 如何用MDM批量配置和管理TV Box(机顶盒)?