介绍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=%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 =
    {
        "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});
    }
);


如何制作Word 模板来生成PDF呢,可以参考官方文档 Use Word templates to create standardized documents ,我以前也有博文介绍过。

上一篇:活动调度


下一篇:AcWing 790. 数的三次方根