Canvas App中点击图标生成PDF并保存到Dataverse中

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复472或者20220803可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

以前的文章​​Dynamics 365触发Microsoft Flow自动生成PDF并作为附件送邮件​​ 写了通过Word Connector来生成PDF文件,今天的文章更进一步,讲述了如何处理PDF中的列表数据,我这里是要展示选择客户的联系人清单都打印出来。

今天的文章以Canvas App为例进行演示,点击按钮调用Cloud Flow执行操作。

首先我先制作Word模板,前面博文讲过的我这里不赘述,就简单的讲述下列表如何处理,主要是参考​​Intermediate | Flow of the week: Create PDF Invoices Using Word Templates with Microsoft Flow​​ 文章。

主要是列表的话,只用到两行,一行是列表标题,另外一行是示例数据,需要选择这行示例数据后,点击Ribbon功能区的Developer这个Tab下的Repeat Section Content Control。然后每一列依然和其他的占位符一样,设置为Plain Text Content Control。

为了方便映射,我这里的两个名字分别设置为对应字段的逻辑名称fullname和emailaddress1 。

还需要将这个模板上传到Onedrive或者Onedrive for business上,我这里是上传到Onedrive上,如下图。到此,模板的准备工作完成了。

Canvas App中点击图标生成PDF并保存到Dataverse中

然后我来处理Canvas App中的工作,在记录的查看详情界面添加一个PDF document的图标(icon)。

Canvas App中点击图标生成PDF并保存到Dataverse中

再点击左侧的Power Automate图标,然后点击 Create new flow 按钮。

Canvas App中点击图标生成PDF并保存到Dataverse中

接下来的工作就是新建Flow了。出来的界面如下,没有我需要的模板,所以我点击 Create from blank 按钮。

Canvas App中点击图标生成PDF并保存到Dataverse中

首先新增一个 Initialize variable的变量,这个变量的Value从动态窗口中点击 Ask in PowerApps,这就是这个Flow接收的来自Canvas App的参数。记得保存flow之前为flow取个有意义的名字,自动生成的名字很不好看。

Canvas App中点击图标生成PDF并保存到Dataverse中

然后就是查询客户及其下面联系人的信息,根据父记录查询子记录的方法我这里有讲,请参考 ​​Dynamics 365查询父实体并返回子实体信息的方法​​ 。我这里只截图展示效果了。

Canvas App中点击图标生成PDF并保存到Dataverse中

下面就是添加 Word Online (Business) 这个Connector下面的 Populate a Microsoft Word template的Action。

前面这些placeholder字段的赋值很简单,列表的赋值需要先点击下图标记的 Switch to input entire array 按钮。

Canvas App中点击图标生成PDF并保存到Dataverse中

然后我用表达式outputs('Get_contact_info')?['body/contact_customer_accounts'] 为这个字段赋值,效果如下:

Canvas App中点击图标生成PDF并保存到Dataverse中

然后增加一个OneDrive for Business下面的Create file步骤,我的设置如下:

Canvas App中点击图标生成PDF并保存到Dataverse中

再增加一个Word Online (Business) 这个Connector下面的 Convert Word Document to PDF的Action。

Canvas App中点击图标生成PDF并保存到Dataverse中

我这里设置如下,用到的表达式是concat('/Outputs/客户_',variables('AccountId'),'.docx') 。

Canvas App中点击图标生成PDF并保存到Dataverse中

再添加Microsoft Dataverse Connector下的 Upload a file or an image 这个action。

Canvas App中点击图标生成PDF并保存到Dataverse中

我这里设置如下:

Content name 用到的表达式是concat('客户_',variables('AccountId'),'.pdf')

Canvas App中点击图标生成PDF并保存到Dataverse中

再添加一个最后的步骤,那就是PowerApps这个Connector下的 Respond to a PowerApp or flow,这是Canvas App调用flow的必须的最后步骤。

最后一个步骤就是将生成PDF的图标的OnSelect事件执行的代码改成如下:

GeneratePdfFile.Run(Text(BrowseGallery1.Selected.Account));
Refresh(Accounts);
Notify("生成PDF成功了!");

Canvas App中点击图标生成PDF并保存到Dataverse中

点击进行测试后生成的pdf效果如下:

Canvas App中点击图标生成PDF并保存到Dataverse中