Доступ к данным в SQL Server
Прямой доступ:
Если при создании приложения выбран параметр Начало работы с данными, свойство Элементы коллекции содержит формулу Power Fx с именем источника данных, которая указывает непосредственно на таблицу базы данных.
Например, если у вас есть таблица BOOKLENDING
, вы увидите следующую формулу:
Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)
Представления и хранимые процедуры:
Распространенным шаблоном профессионального доступа к данным является использование представлений, а затем хранимых процедур для создания, обновления и удаления, а не предоставление прямого доступа. Если вы хотите использовать представления или хранимые процедуры, необходимо изменить пример формулы. Аналогичным образом, форма для записи также не использует встроенный прямой подход доступа формулы SubmitForm()
.
Триггеры:
Одним из шаблонов базы данных является использование триггеров для таблиц. Если у таблицы есть триггер, вы не можете использовать прямой шаблон Submit()
для создания, обновления и удаления. Submit()
имеет конфликт между обработкой триггеров SQL и встроенным поведением Power Apps, которое использует тот же выходной параметр.
Тем не менее вы можете напрямую обращаться к таблице для выполнения запросов, но для обработки Create
, Update
или Delete
необходимо вызвать хранимую процедуру.
Добавить источник данных
Использование представления
Представление — это сохраненный запрос, который отображается в виде одной таблицы данных.
Представления отображаются в списке таблиц, которые можно выбрать при добавлении источника данных. Представления поддерживают только запросы, но не обновления. Для обновлений необходимо использовать хранимую процедуру.
При создании таблицы с этим параметром Start with data
вы получаете экраны и формулы, отображающие записи в коллекции и форме. Вы увидите формулы и функции для создания, редактирования и удаления. Однако при использовании представления отображается только экран коллекции и формы.
Возможно, вам понадобятся автоматически сгенерированные экраны из Start with data
для представлений.
Для этого автоматически сгенерированного параметра:
- Выберите
Start with data
с базовой таблицей. - Удалите и замените источник данных таблицы.
Пример:
Например, если у вас есть таблица BOOKLENDINGVIEW
и вы добавили ее в качестве источника данных для Power Apps, формула может быть следующей:
BOOKLENDINGVIEW
Можно также заменить другие формулы создания, обновления и удаления представлением источника данных и вызовами хранимых процедур.
Использование хранимых процедур
При добавлении в приложение подключения SQL Server можно добавлять хранимые процедуры и вызывать их напрямую в Power Fx.
Заметка
Эта функция также работает с безопасными неявными подключениями.
После выбора хранимой процедуры появляется дочерний узел, и вы можете обозначить хранимую процедуру как безопасную для использования в галереях и таблицах.
Хранимая процедура безопасна, если она не выполняет никаких действий, которые могут быть нежелательными в определенных сценариях. Например, если хранимая процедура собрала все учетные записи из заданного города, а затем отправила им сообщение электронной почты. Возможно, вам не всегда будет нужно, чтобы сообщения электронной почты отправлялись каждый раз при вызове хранимой процедуры. Следовательно, хранимая процедура не должна быть помечена как безопасная.
Проверяйте хранимую процедуру на безопасность только в следующем случае:
Нет никаких побочных эффектов от вызова этой процедуры по запросу.
Процедуру можно вызывать несколько раз или всякий раз, когда Power Apps обновляет элемент управления. При использовании в сочетании со свойством Items галереи или таблицы Power Apps вызывает хранимую процедуру всякий раз, когда система определяет, что необходимо обновление. Вы не можете управлять тем, когда вызывается хранимая процедура.
В хранимой процедуре возвращается небольшой объем данных.
Вызовы действий, такие как хранимые процедуры, не имеют ограничения на количество получаемых строк. Они не разбиваются по страницам автоматически с шагом в 100 записей, как табличные источники данных, такие как таблицы или представления.
Если хранимая процедура возвращает слишком много данных (много тысяч записей), приложение может замедлиться или дать сбой. Из соображений производительности добавляйте менее 2000 записей.
Если хранимая процедура отмечена как безопасная, можно назначить хранимую процедуру в качестве свойства Items в коллекциях для таблиц, которые будут использоваться в приложении.
Важно
Схема возвращаемых значений хранимой процедуры должна быть статической, чтобы значения не менялись от вызова к вызову. Например, если хранимая процедура возвращает две таблицы, она всегда возвращает две таблицы. Можно работать как с типизированными, так и с нетипизированными результатами.
Структура результатов также должна быть статичной. Например, если схема результатов является динамической, то результаты являются нетипизированными, и для их использования в Power Apps необходимо указать тип. Дополнительные сведения см. в разделе Нетипизированные результаты.
Пространство имен SQL перед именем хранимой процедуры
Имя пространства имен SQL Server, в котором хранится процедура, добавляется к имени хранимой процедуры. Например, все хранимые процедуры в пространстве имен SQL Server под названием 'DBO' имеют префикс '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 и т. д.
Например, хранимая процедура, доступ к которой осуществляется из таблицы Paruntimedb
с именем dbo.spo_show_all_library_books()
, выглядит следующим образом:
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 в приложение и вызовите его. Необязательные аргументы передаются в виде записи "{ ... }". В следующем примере присутствуют все необязательные аргументы.