介绍Dynamics 365/Power Apps生成PDF的功能

宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述介绍Dynamics 365/Power Apps生成PDF的功能相关的知识,希望能为你提供帮助。
我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复437或者20210319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
以前要生成PDF可能需要借助第三方工具,现在呢?Dynamics 365/Power Apps提供了生成PDF功能,配置下就可以,方便多了,今天我们来介绍下生成PDF功能。
Dynamics 365 Sales Enterprise App提供了生成PDF的功能,根据文档 Create PDF files from sales records 的说法从2020 release wave 2更新开始支持到所有的自定义实体了。我们先来看看标准的Dynamics 365 Sales Enterprise App如何配置。我的环境 https://thomasdemo.crm.dynamics.com/ 并没有Dynamics 365 Sales Enterprise App,有一个Sales Team Member App,从左侧的导航栏看不到PDF设置界面,但是我可以通过类似 https://thomasdemo.crm.dynamics.com/main.aspx?appid=ed8d20c5-d285-eb11-b1ab-000d3a8c0d45& pagetype=control& controlName=MscrmControls.FieldControls.CCFadminsettings& data=https://www.songbingjia.com/android/%7B"id"%3A"enhance_pdf_generation"%7D 这样的URL(appid参数的值请替换成Dynamics 365 Sales Enterprise App或者Sales Team Member App的Id)来打开设置页面如下:

介绍Dynamics 365/Power Apps生成PDF的功能

文章图片

默认只为报价单(quote)实体启用了PDF功能,为其他实体启用则很简单,将前面的复选框选中后点击Save按钮即可,我这里为客户启用下,并保存。这个会立即生效,打开某条客户记录,可以看到命令栏中增加了 Export to PDF 按钮,如下图。

介绍Dynamics 365/Power Apps生成PDF的功能

文章图片



点击按钮出现的窗口如下,应该是使用的第一个Word模板来生成了PDF预览,如果有多个Word模板则可以选择某个来生成预览。
介绍Dynamics 365/Power Apps生成PDF的功能

文章图片



点击窗口中的 Download 按钮就会将该PDF下载,文件名就是 Save as中设定的文件名。如果点击的是 Email 按钮则会创建一个Email记录,将该PDF添加到了该Email记录中,如果发送的话当然会作为邮件的附件发送,当然这个Email记录还自动关联了当前记录。
介绍Dynamics 365/Power Apps生成PDF的功能

文章图片



如果点击的是【Save to Dynamics】按钮,则会将生成的PDF作为附件存储到当前记录,并显示在Timeline中,如下图。
介绍Dynamics 365/Power Apps生成PDF的功能

文章图片



如果我要点击按钮直接生成PDF呢?可以使用 exportPdf Action ,我这里提供个实例代码如下,如果是使用Chrome浏览器会直接在新窗口中打开这个PDF。
var req = new XMLHttpRequest(); req.open("POST", Xrm.Utility.getGlobalContext().getClientUrl() + "/api/data/v9.2/ExportPdfDocument", true); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.onreadystatechange = function () { if (this.readyState == 4) { req.onreadystatechange = null; if (this.status == 200) { var responseJSON = JSON.parse(this.responseText); window.open("data:application/pdf; base64," + responseJSON.PdfFile); Xrm.Navigation.openAlertDialog({"text":"生成PDF成功!"}); } else { var error = JSON.parse(this.response).error; Xrm.Navigation.openErrorDialog({message:error.message }); } } }; var reqContent = { "EntityTypeCode":1, "SelectedTemplate":{ "@odata.type":"Microsoft.Dynamics.CRM.documenttemplate", "documenttemplateid":"9d6916e4-1033-4e03-a0e3-d15a5b133a9a" }, "SelectedRecords":"[\\"86df3aa7-9888-eb11-b1ac-000d3a8c07a8\\"]" }; req.send(JSON.stringify(reqContent));



如果你的Dynamics 365/Power Apps环境没有Sales相关的App呢,如何启用?这里可以参考Debajit Dutta的文章 How to enable or disable “Export to PDF” option for entities in CDS/ Dynamics 365 through code. ,我这里不罗嗦了,直接上示例代码如下,这个要更改记录的GUID是固定的,改的字段是pdfsettingsjson,我这里的值包括了之前已经设置好的,之前我已经设置好了quote和account启用。执行后应该可以立即看到效果,如果看不到登出账号重新登陆下当前账号。
var data = https://www.songbingjia.com/android/{"pdfsettingsjson": "{\\"quote\\":true,\\"account\\":true,\\"contact\\":true}" } Xrm.WebApi.updateRecord("pdfsetting", "3e5d32bb-3fd3-424e-81f0-7d4faf5aee94", data).then( function success(result) { Xrm.Navigation.openAlertDialog({"text":"更改生成PDF设置成功!"}); }, function (error) { Xrm.Navigation.openErrorDialog({message:error.message}); } );



【介绍Dynamics 365/Power Apps生成PDF的功能】如何制作Word 模板来生成PDF呢,可以参考官方文档 Use Word templates to create standardized documents ,我以前也有博文介绍过。

    推荐阅读