当前位置: 首页 > 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的构造参考

相关文章:

  • 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库详解
  • 先做网站后台还是前台/网站开发技术
  • 石家庄 做网站/南宁百度推广排名优化
  • 企业邮箱网易登录入口/最彻底的手机优化软件
  • 网站keyword如何排序/代发关键词包收录
  • wordpress会员设置/连云港seo优化
  • 在线网站搭建系统/百度搜索排名怎么收费