65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SAP 连接器构建 Teams Power App 第三部分:将数据从 Power App 写回 SAP

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2021年8月11日

CPOL

8分钟阅读

viewsIcon

4564

在本文中,我们将通过探索如何编辑这些数据并相应地更新 SAP 来结束。

在我们之前的两篇文章中,我们设置了从 SAP 检索产品列表并将其显示给 Teams 用户的环境。在最后一篇文章中,我们将创建一个编辑页面,显示产品供用户编辑,然后更新 SAP 上的数据以反映更改。

创建编辑页面

首先,我们需要为产品详细信息创建一个编辑屏幕。我们将使用此编辑屏幕显示产品的完整详细信息以及用户可以修改的各种字段,然后将这些更新推送回 SAP。

首先,我们创建布局,然后再连接功能。首先,我们点击左侧菜单中的新建屏幕按钮,然后选择空白屏幕选项。

我们从布局部分选择容器控件,创建一个简单的容器来容纳我们的字段。您也可以使用带有空白屏幕的从数据创建选项,但这会添加超出我们所需的内容。

接下来,让我们为产品列表中要修改的每个数据元素添加几个标签和文本框。我们将大部分字段添加到页面,但更新某些字段(例如产品 ID)没有意义。您也可以选择不允许更新其他字段,例如描述语言

我们将保存用户可以更新的值的文本框链接到一个未定义(目前)的变量selectedItem,以保留相关字段名。例如,名称文本框的值是“selectedItem.Name”。此变量使我们能够从上一个屏幕填充项目。

传递我们的产品

现在我们已经设置了表单,让我们研究如何将要编辑的产品传递给编辑表单。有两种方法可以做到这一点:我们可以使用每 15 分钟刷新一次的产品缓存版本,或者我们可以调用 SAP API 来获取产品的最新版本。这里我们使用产品的缓存版本,但我们还将展示如何调用我们的 API 来获取最新的产品详细信息。

首先,我们回到产品列表屏幕,并在我们的画廊控件中选择一个字段。为了让用户能够编辑我们的产品,我们为每个产品连接一个编辑按钮。为此,我们插入一个新按钮,它应该复制我们的字段。

我们使用按钮的OnSelect函数来调用导航函数,它允许我们切换窗口。我们可以通过函数栏旁边的下拉菜单或在选中按钮的情况下在高级下访问OnSelect

我们想要使用的完整命令是

Navigate(EditProduct, ScreenTransition.Fade, { selectedItem: ThisItem })

Navigate 函数接受三个参数

  • 您要导航到的屏幕
  • 当有人使用该函数时要应用的任何过渡效果
  • 任何用大括号括起来的对象(例如,{ object }),带变量名

在我们的例子中,我们切换到EditProduct屏幕,带淡入过渡,并将选定的行(使用ThisItem)作为selectedItem变量传输。

现在,当我们保存应用程序并点击预览时,产品旁边会出现按钮。当我们点击编辑时,它应该将我们带到编辑屏幕,查看产品详细信息,准备编辑。

 

我们还可以使用 API 的getProduct函数直接从 SAP 检索产品,如下所示

"Navigate(EditProduct, ScreenTransition.Fade, { selectedItem: 

'SAPODATA[Sample]Connector'.GetProduct(ThisItem.ProductID).d })".

如果您不经常刷新数据并希望确保在更新前检索最新信息,这是更好的解决方案。

扩展信息

现在,我们已经检索到产品准备编辑。我们需要再提取两个额外的信息,以确保我们能够成功编辑产品。我们需要供应商和类型代码列表来填充一些带有正确信息的下拉框。

我们使用与检索产品列表类似的方法来做到这一点。我们将以下两个命令添加到应用程序的OnStart方法以及计时器项中

ClearCollect(Supplier, 'SAPODATA[Sample]Connector'.ListBusinessPartner().d.results);

ClearCollect(TypeCode, 'SAPODATA[Sample]Connector'.ListProductTypeCode().d.results);

这两个命令为我们提供了两个新的数据集:供应商类型代码。现在我们将这些数据同步到应用程序中,我们可以用组合框替换编辑表单上的供应商文本框。

组合框的工作方式与常规字段略有不同。它可以在选择式列表中保存整行或数据。

首先,让我们删除当前的供应商和类型代码字段,并在其位置添加一个新的组合框。在组合框的属性选项卡中有一个选项可以指定我们需要的项目的数据源,将其设置为供应商表。我们还需要指定要链接到此组合框的字段。对于供应商,我们需要公司名称,以便用户轻松选择供应商,以及业务伙伴 ID,以便在我们的产品目录中填充正确的 ID。

此操作将使用所有必需的供应商填充组合框,但当我们传入选定的产品时,我们仍然需要设置控件的值。由于组合框没有我们可以设置的传统值,我们需要执行查找函数来选择与我们选定的产品匹配的正确记录。为此,我们将此命令添加到DefaultSelectedItems函数中

LookUp(Supplier, BusinessPartnerID = selectedItem.SupplierID)

此命令随后会查找与我们的产品记录具有相同 ID 的供应商记录。我们将对类型代码组合框执行类似的操作。

将数据保存回 SAP

现在我们已经配置了编辑屏幕并使用正确的数据填充了它,我们现在可以将数据发送回我们的 SAP 实例。为此,由于 SAP 处理跨站点伪造令牌的方式,我们需要链接到 PowerAutomate 以运行更新过程。如果我们没有要实现的特定逻辑,我们可以像使用 ProductList 函数一样,直接从 Power Apps 调用 API。

要切换到 Power Automate,我们点击更新按钮,选择设置旁边的更多菜单,然后选择Power Automate

在左侧出现的菜单中,我们然后点击创建新流程,使用与文档中相同的过程。我们选择第一个触发器为Power Apps,以便我们的应用程序将触发流程,然后在下一步添加SAP-ODATA-Demo连接器并指定我们的用户名和密码。

对于下一步,我们需要从 API 中指定获取产品函数。我们需要确保获取x-csrf-token

最后,我们需要添加更新产品函数并填写所需字段。对于我们需要从 Power App 中检索的任何字段,我们使用Power Apps部分下的在 Power Apps 中询问选项。根据文档,我们还需要设置上一步的x-csrf-token并使用动态表达式更新x-ms-cookie-header

replace(outputs('Get_product')['headers']['Set-Cookie'],',',';')

最后,我们可以使用上一步的产品填充我们不允许用户更新的任何其他字段。

保存此流程后,我们回到上一个屏幕并返回 Power Apps。我们现在应该在数据窗格中看到一个可用的新流程。我们确保更新按钮突出显示并且选择了函数OnSelect,然后点击可用的流程。此流程随后会将基本函数填充到此窗口中,我们可以填写所需的参数。

上面的助手将填写此函数所需的所有组件。我们的基本编辑字段需要语法<fieldname>.Value。我们的组合框需要稍有不同的语法<fieldname>.Selected.<IDName>,例如

Supplier.Selected.BusinessPartnerID

最后,下一步是使用以下方法导航回我们的产品列表

Navigate(ProductList, Fade)

现在,如果我们保存应用程序并编辑产品,当我们更新时,我们的流程会运行并更新 SAP。如果我们回到Power Automate门户,历史记录应该显示成功运行。

后续步骤

我们现在拥有一个功能齐全的 Teams 应用程序,可以显示和更新来自 SAP 的产品。

在第一篇文章中,我们创建了环境并添加了 SAP 连接器。在第二篇文章中,我们开发并发布了产品列表应用程序。最后,在当前文章中,我们提供了一种让用户编辑产品信息并将编辑后的数据发送回 SAP 的方法。

例如,我们可以通过让用户管理供应商和我们业务系统的其他组件来进一步构建此应用程序。希望这能让您了解 Power Apps 嵌入到 Teams 中可以实现什么。

将 Power Apps 与 Teams 结合使用对于获取通常锁定在复杂业务系统中的业务数据并在简单应用程序中公开它特别有用。您的同事或其他用户可以在他们已经协作的地方(在 Teams 中)访问此信息。

现在您知道在 Teams 中创建 Power Apps 有多快速和简单,您可以开始创建自己的应用程序了。您可以使用团队可以在他们已经交流的地方直接访问的强大应用程序来提高组织的生产力。浏览 Teams 商店中的示例应用程序以获取更多灵感。

© . All rights reserved.