Подключение к SQL Server из Power Apps

Вы можете подключаться либо к SQL Server в Azure, либо к локальной базе данных.

Примечание

Вновь созданные источники данных SQL больше не имеют префикса [dbo], как предыдущих версиях Power Apps.

Дополнительные сведения см. в статье Распространенные проблемы и способы их решения для Power Apps.

Автоматическое создание приложения

В зависимости от того, какой интерфейс Power Apps вы используете, ориентируйтесь на новый интерфейс или классический интерфейс для создания приложения.

  1. Войдите в Power Apps.

  2. На странице Главная выберите вариант одностраничная галерея или мобильное приложение с тремя экранами:

    • Чтобы создать одностраничное приложение-коллекцию с гибким макетом, выберите один из следующих вариантов:
      • Начать с данных > Выбрать внешние данные > Из SQL.
      • Начать с дизайна страницы > Галерея, подключенная к внешним данным > Из SQL.
    • Чтобы создать мобильное приложение с тремя экранами, выберите Начать с шаблона приложения > Из SQL.
  3. Выберите подключение к SQL, а затем выберите таблицу. Чтобы выбрать другое подключение, выберите меню переполнения ..., чтобы сменить подключение или создать новое подключение к SQL.

    Примечание

    Одновременно отображается только одно подключение.

  4. Закончив, нажмите Создать приложение.

Вызов хранимых процедур непосредственно в Power Fx (предварительная версия)

Теперь вы можете напрямую вызывать хранимые процедуры SQL Server Power Fx. По умолчанию этот новый переключатель должен быть включен. Если нет, вы можете включить его.

  1. Перейдите в Настройки > Обновления > Новое.
  2. Выполните поиск по словосочетанию хранимые процедуры.
  3. Установите в положение Вкл. переключатель Хранимые процедуры SQL Server.
  4. Сохраните и повторно откройте приложение.

Снимок экрана, на котором показан переключатель хранимых процедур SQL Server, установленный в положение «Вкл.».

При добавлении в приложение подключения к SQL Server вы теперь можете добавлять таблицы и представления или хранимые процедуры. Эта функция также работает с безопасными неявными соединениями.

Снимок экрана, на котором показаны списки таблиц, представлений и хранимых процедур, доступных для добавления в ваше приложение.

Если вы не видите нужную вам хранимую процедуру сразу же, быстрее будет воспользоваться поиском.

После выбора хранимой процедуры появляется дочерний узел, и вы можете обозначить хранимую процедуру как безопасную для использования в галереях и таблицах. Если вы установите этот флажок, вы сможете назначать хранимую процедуру в качестве свойства Items для галерей для таблиц, которые будут использоваться в вашем приложении.

Устанавливайте этот флажок только при условии, что:

  1. Многократный вызов этой процедуры по требованию всякий раз, когда Power Apps обновляет элемент управления, не приводит ни к каким побочным эффектам. При использовании в сочетании со свойством Items галереи или таблицы Power Apps вызывает хранимую процедуру всякий раз, когда система определяет, что необходимо обновление. Вы не можете управлять тем, когда вызывается хранимая процедура.
  2. Объем данных, которые вы возвращаете в хранимой процедуре, умеренный. Вызовы действий, такие как хранимые процедуры, не имеют ограничения на количество извлекаемых строк. Они не разбиваются по страницам автоматически с шагом в 100 записей, как табличные источники данных, такие как таблицы или представления. Итак, если хранимая процедура возвращает слишком много данных (многие тысячи записей), ваше приложение может замедлиться или завершиться сбоем. Из соображений производительности вам следует вносить менее 2000 записей.

Важно!

Схема возвращаемых значений хранимой процедуры должна быть статической. Это значит, что он не меняется от звонка к звонку. Например, если вы вызываете хранимую процедуру и она возвращает две таблицы, то она должна всегда возвращать две таблицы. Вы можете работать как с типизированными, так и с нетипизированными результатами. Структура результатов должна быть одинаковой от звонка к звонку. Если схема результатов является динамической, то результаты будут нетипизированными, и вам потребуется указать тип, чтобы использовать их в Power Apps. Для получения дополнительной информации перейдите в раздел Нетипизированные результаты.

Пространство имен SQL, добавленное к имени хранимой процедуры

Имя пространства имен SQL Server, в котором хранится хранимая процедура, добавляется к имени хранимой процедуры, созданной для нее в Power Apps. Например, все хранимые процедуры в пространстве имен 'DBO' SQL Server имеют 'dbo' в начале имени.

Пример

Добавляя хранимую процедуру, вы можете видеть в проекте несколько источников данных.

Снимок экрана, на котором показаны источники данных SQL.

Вызов хранимой процедуры

Чтобы использовать хранимую процедуру в Power Apps, сначала добавьте в начало имени хранимой процедуры имя связанного с ней соединителя и имя хранимой процедуры. «Paruntimedb.dbonewlibrarybook» в примере иллюстрирует этот шаблон. Когда Power Apps вводится хранимая процедура, она объединяет пространство имен и имя процедуры, и «dbo.newlibrarybook» становится «dbonewlibrarybook».

Аргументы передаются как Power Apps запись с именованными парами значений:

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

Не забывайте преобразовывать значения по мере необходимости при передаче их в хранимую процедуру, поскольку вы считываете текстовое значение в Power Apps. Например, если вы обновляете целое число в SQL, вам необходимо преобразовать текст в поле, используя «Value()».

Непосредственный вызов хранимых процедур.

Доступ к результатам

Хранимая процедура может возвращать код, значения из выходных параметров или результаты запросов. Для доступа к этим результатам используйте следующие шаблоны:

Код возврата

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ReturnCode

Используйте это для доступа к результатам оператора return.

Выходные параметры

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).OutputParameters.<parameterName>

Обратите внимание, что имя параметра следует использовать в том виде, в котором оно указано в полезных данных JSON.

Наборы результатов

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ResultSets.Table1

Доступ к дополнительным таблицам можно получить по их имени (например, Таблица1, Таблица2, Таблица3, ... )

Нетипизированные результаты

Некоторые сложные хранимые процедуры возвращают нетипизированный результат. Эти результаты недоступны напрямую. Сначала необходимо указать тип. Доступ к данным можно получить, используя следующий шаблон.

В этом примере мы сначала извлекаем результаты в переменную с именем «MyUntypedObject». Затем мы извлекаем «Table1» из этой переменной и помещаем ее в переменную с именем «table1». Этот шаг не является строго необходимым. Однако полезно поместить все результаты в переменную на определенный момент времени, а затем извлечь необходимые части. Затем мы проходим по таблице table1 и извлекаем элементы JSON в именованные пары значений. Обязательно сопоставьте имена с именами, которые возвращаются в полезной нагрузке JSON. Для проверки откройте Power Apps монитор и найдите запись в разделе тела узла данных.

Set(
    <MyUntypedObject>,
    <datasourceName>.<StoredprocedureName>( 
      { <paramName1>: "someString" }
    ).ResultSets
);
Set(
    table1,
    <MyUntypedObject>.Table1
);
Set(
    TypedTable,
    ForAll(
        table1,
        {
            BookID: Value(ThisRecord.BookID),
            BookName: Text(ThisRecord.BookName)
        }
    )
);

Вы можете получить доступ к хранимой процедуре для свойства 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);

Известные проблемы

Источники данных SQL больше не добавляют префикс [dbo] к имени источника данных

Префикс [dbo] не несет никакой практической пользы в Power Apps, поскольку неоднозначность в именах источников данных устраняется автоматически. Это изменение никак не влияет на существующие источники данных, однако у вновь добавленных источников данных SQL этого префикса не будет.

Если вам нужно обновить большое количество формул в одном из ваших приложений, для глобального поиска и замены можно использовать утилиту упаковки и распаковки исходных файлов Power Apps.

Примечание

Начиная с версии 3.21054, мы автоматически обновляем нарушенные ссылки на старые имя, заменяя их новым именем источника данных после повторного чтения этого источника данных.

Следующие шаги

Примечание

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).