【问题标题】:Reusable Function in PowerAppsPowerApps 中的可重用函数
【发布时间】:2021-01-14 14:45:54
【问题描述】:

我们在应用程序的不同部分有“大块”相同的公式。鉴于 PA 缺乏实际的命名函数,是否有任何解决方法可以让我们重用函数/公式以防止“代码”(即公式)的重复?

【问题讨论】:

  • 在使用 Canvas 应用程序进行任何级别的专业/企业规模开发方面,不要让我开始说这是一个多大的遗漏。

标签: powerapps powerapps-canvas powerapps-formula


【解决方案1】:

这刚刚宣布,它允许制造商使用组件创建用户定义的公式:https://powerapps.microsoft.com/en-us/blog/enhanced-component-properties/

这是博客文章中的一个示例:

我们也可以在输入和输出属性中使用属性参数。一个很好的例子是数学实用程序库。我们目前不在 Power Apps 中提供 Excel 的 RandBetween 函数。但是,我们可以使用我们支持的 Rand 函数重新创建它。

让我们首先创建一个新的 MathUtils 组件,该组件具有 RandBetween 自定义属性,属性类型为 Output 和数据类型为 Number强>:

我们将为范围的该属性添加两个参数。 Excel 将这些参数命名为 BottomTop,它们的类型为 Number。这些都是 Excel 中的必需参数。

Top做同样的事情:

在组件中,我们将根据这些参数定义计算 RandBetween 的公式:

If( Top >= Bottom, 
    Round( Rand() * (Top - Bottom) + Bottom, 0 ),
    Blank()
)

现在我们可以在我们的应用程序中像调用函数一样调用它。我们需要在我们的应用程序中创建这个组件的一个实例,默认名称为 MathUtils_1。这里使用两个滑块控件作为输入,结果显示在标签控件中:

【讨论】:

    【解决方案2】:

    一个选项是创建一个隐藏按钮或其他可选项目,然后将公式分配给该按钮。每当您需要重新运行公式时,请使用 Select(Button1),而不是重新创建公式。

    例如,如果您需要一个添加到集合中的公式:

    1. 添加一个名为 Button1 的按钮。
      1. 将 Visible 属性设置为 False
      2. 将 OnSelect 属性设置为类似Collect(YourCollection,"A Value")
    2. 需要调用此函数的任何地方将 OnSelect 属性设置为Select(Button1)

    如果需要给这个集合设置动态值,可以先设置一个上下文变量

    1. 将 Button1 的 OnSelect 属性更改为 Collect(YourCollection,yourVariable)
    2. 将控件的 OnSelect 属性设置为UpdateContext({yourVariable,"A Value"});Select(Button1)

    当然这是一个非常简单的例子,可以扩展。

    当然,您也可以采用 Power Automate 路线,从您的 PowerApp 控件中调用 Flow 来完成您的工作,但如果您在 Flow 中执行复杂的工作并且必须解析返回值,则可能需要额外的许可。

    希望微软最终允许我们创建可以在 PowerApps 中调用的自定义函数。

    【讨论】:

    • 感谢您提供这个方法示例 -- 我会尝试一下!
    • 不幸的是,我似乎无法跨屏幕使用 Select()。是否有在不同屏幕上选择按钮的解决方法?
    • 我能够将 Robbert 的方法应用于我的应用程序中自定义组件的隐藏实例。我只是将想要重用的公式放入组件 OnReset 处理程序中,然后我可以通过调用 Reset(myCustomComponent) 从应用程序中的任何位置启动公式。到目前为止似乎工作,谢谢!由于组件还具有自定义的输入和输出属性,因此也可以利用这些属性来提供某种程度的封装——无论如何,对于 PowerApps。
    • @EngineRoom,这是一个很好的解决方案。感谢分享。
    • 关于此技术的另一个注意事项 - 自定义组件似乎无法访问应用程序中的全局变量,但它可以访问集合(据我所知)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2011-03-09
    • 2021-12-20
    • 2019-05-19
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多