? ? ? 這兩天在用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的構造參考