添加数据源
直接访问:
如果在创建应用时选择 “开始使用数据 ”选项,库的 Items 属性将使用 Power Fx 公式,该公式具有直接指向数据库表的数据源名称。
例如,如果你有一个 BOOKLENDING 表,则会看到以下公式:
Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)
视图和存储过程:
常见的专业数据访问模式是使用视图,然后使用存储过程来创建、更新和删除,而不是允许直接访问。 如果要使用视图或存储过程,请更改示例公式。 同样,记录的窗体不使用公式的 SubmitForm() 内置直接方法。
触发器:
一种数据库模式是在表中使用触发器。 如果表具有触发器,则不能使用直接模式 Submit() 来创建、更新和删除。
Submit() 与 SQL 触发器处理以及使用相同输出参数的内置 Power Apps 行为冲突。
可以直接访问表进行查询,但要处理Create或UpdateDelete调用存储过程。
备注
SQL Server 连接器(与处理关系数据的所有连接器一样)假定表具有主键。 主键对于查找要更新的特定记录至关重要。 如果 SQL Server 表没有主键,则数据为只读。 如果您具有 SQL Server 表的访问权限和编辑权限,请考虑添加自动生成的键。
使用视图
视图是保存的查询,显示为单个数据表。
视图显示在添加数据源时可以选择的表列表中。 视图仅支持查询,不支持更新。 若要更新数据,请使用 存储过程。
如果使用该选项创建表 Start with data ,则会收到显示库和窗体中的记录的屏幕和公式。 可以看到用于创建、编辑和删除记录的公式和功能。 但是,如果使用视图,则只会看到库和窗体的显示屏幕。
你可能希望从 Start with data 视图中自动生成的屏幕。
若要使用此自动生成的选项,请执行以下作:
- 使用
Start with data选择 。 - 删除和替换表数据源。
示例:
例如,如果你有一个 BOOKLENDINGVIEW 表并将其添加为 Power Apps 的数据源,则公式可能很简单:
BOOKLENDINGVIEW
还可以将其他创建、更新和删除公式替换为视图数据源和对存储过程的调用。
使用存储过程
向应用添加 SQL Server 连接时,您可以添加存储过程,然后直接在 Power Fx 中调用它们。
备注
此功能也适用于安全隐式连接。
选择存储过程后,会显示一个子节点,可以将存储过程指定为 “安全”用于库和表。
如果存储过程不执行某些情况下可能不需要的任何作,则存储过程 是安全的 。 例如,如果存储过程从给定城市收集所有帐户,然后向他们发送电子邮件,则每次调用存储过程时,可能并不总是希望发送电子邮件。 在这种情况下,不要将存储过程标记为安全。
应仅在以下情况下确认存储过程是安全的:
按需调用此程序没有副作用。
可以多次或每当 Power Apps 刷新控件时调用该过程。 将它与库或表的 Items 属性一起使用时,每当系统确定需要刷新时,Power Apps 就会调用存储过程。 您无法控制何时调用存储过程。
存储过程返回适度的数据量。
作调用(如存储过程)对检索的行数没有限制。 它们不会以 100 记录增量(如表格数据源(如表或视图)自动分页。
如果存储过程返回的数据过多(数千条记录),你的应用可能会减慢或崩溃。 出于性能原因,引入的记录少于 2,000 条。
如果检查存储过程是安全的,则可以将其指定为应用中库或表中的 Items 属性。
重要提示
存储过程返回值的架构应该是静态的,因此,值不会随着调用而变化。 例如,如果存储过程返回两个表,则 它始终 返回两个表。 可以使用特定或动态结果。
结果的结构也需要是静态的。 例如,如果结果的架构是 动态的,则结果是动态的,你必须提供特定类型才能在 Power Apps 中使用它们。 有关详细信息,请参阅 动态结果。
附加到存储过程名称之前的 SQL 命名空间
存储过程的 SQL Server 命名空间名称将添加到存储过程名称的开头。 例如,'DBO' SQL Server 命名空间中的所有存储过程在名称的开头都带有 'dbo'。
例如,添加存储过程时,您可能会在项目中看到多个数据源。
调用存储过程
若要在 Power Apps 中使用存储过程,请在存储过程名称之前添加连接器名称,例如 Paruntimedb.dbonewlibrarybook。
备注
当 Power Apps 引入存储过程时,它将合并命名空间和过程名称,以便 dbo.newlibrarybook 变为 dbonewlibrarybook。
参数作为具有命名值对的 Power Apps 记录传递:
<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})
小费
根据需要在将值传递到存储过程时转换值,因为从 Power Apps 中的文本值进行读取。 例如,如果要在 SQL 中更新整数,请使用 Value() 转换字段中的文本。
下面是将存储过程分配给 OnSelect 属性时存储过程可能呈现的状态的示例。
变量及所有存储过程
声明库安全后,访问库 的 Items 属性的存储过程。 引用数据源名称和存储过程的名称,后跟 ResultSets。 通过引用返回的表集(例如表 1、表 2 等)来访问多个结果。
例如,具有名称dbo.spo_show_all_library_books()的表中Paruntimedb的存储过程如下所示:
Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1
此查询使用记录填充库。 但是,存储过程是表格式模型上的操作行为。
Refresh() 仅适用于表格数据源,不适用于存储过程。 创建、更新或删除记录时刷新库。
备注
当您在表格数据源的窗体上使用 Submit() 时,它会在后台有效地调用 Refresh() 并更新库。
使用变量填充和刷新库
在 OnVisible 屏幕的属性中使用变量,并将存储过程设置为变量。
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
然后,您可以将库的 Items 属性设置为变量名称。
SP_Books
使用对存储过程的调用创建、更新或删除记录后,再次设置变量以刷新库。
Paruntimedb.dbonewlibrarybook({
book_name: DataCardValue3_2.Text,
author: DataCardValue1_2.Text,
...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
使用 Power Automate 调用存储过程
Power Automate 对异步操作的处理效果最好。 在业务流程中将存储过程作为一系列调用的一部分调用。
若要调用 Power Automate,然后调用存储过程,请在流中创建输入变量。
然后将您的输入变量传递到存储过程的调用中。
将此 Power Automate 流添加到您的应用并调用它。 将可选参数作为记录传递“{ ... }”传递。 以下示例包含所有可选参数。