PowerApps: как исправить несколько таблиц SQL с помощью внешних ключей?

Я получаю ошибку SQL INSERT, когда пытаюсь использовать функцию Patch в PowerApps для таблицы, у которой есть внешний ключ, который опирается на первичный ключ второй таблицы, которая еще не была исправлена.

Что имеет смысл. Как можно разрешить исправление таблицы с пустой зависимостью? Так как это можно сделать?

Вот зависимости FK/PK всех 5 таблиц:

Пока что я пробовал:

  • Разрешить NULL в столбце FK
  • Удален CASCADE из FK ОБНОВЛЕНИЕ и УДАЛЕНИЕ

Есть еще идеи? Мне конкретно нужен пример Функции. Спасибо

2 ответа

Решение

Функция Patch будет возвращать обновленный (или вставленный) объект с заполненными полями с сервера, поэтому вы можете использовать его для сохранения и использования позже для получения сгенерированного сервером идентификатора. Использование Last будет работать большую часть времени, но может не работать, если в приложении одновременно работают два пользователя или если таблица начинает становиться слишком большой (и не все из них будут кэшироваться локально одновременно).

Set(
    patchResult,
    Patch(
        '[dbo].[dateTable]',
        Defaults('[dbo].[dateTable]'),
        {
            siteId: varSiteID,
            readingDate: Now()
        }));

//Patch values into readingTable

Patch(
    '[dbo].[readingTable]',
    Defaults('[dbo].[readingTable]'),
    {
        dateId: patchResult.dateId,
        unitNum: 1, 
        xzyName: 1,
        avgJJk: 1,
        prevLLk: 1,
        readingNotes: "This is awesome"
    }
);

Просто понял это:

Вы должны патчить их по порядку, чтобы сначала патчи были исправлены, а затем захвачены с помощью функции Last() и вставлены (как FK) в следующие патчи.

Надеюсь, это поможет кому-то еще.

Пример:

//Patch values into dateTable

Patch('[dbo].[dateTable]',
    Defaults('[dbo].[dateTable]'),
        {
            siteId: varSiteID,
            readingDate: Now()
        }
);

//Patch values into readingTable

Patch('[dbo].[readingTable]',
    Defaults(
        '[dbo].[readingTable]'),
        {
            dateId: Last('[dbo].[dateTable]').dateId, <--BINGO
            unitNum: 1, 
            xzyName: 1,
            zyxNum: 1,
            xkdFactor: 1, 
            supplyXya: 1, 
            supplyUio: 1, 
            sortNum: 1,
            currentUys: 1,
            avgJJk: 1,
            prevLLk: 1,
            readingNotes: "This is awesome"
        }
);

//Patch values into the imageTable

ForAll(
    colImageGallery,
    Patch(
        '[dbo].[imageTable]',
            Defaults('[dbo].[imageTable]'),
        {
            readingId: Last('[dbo].[readingTable]').readingId, <--BINGO
            photo: image,
            photoNotes: " "
        }
    )
);
Другие вопросы по тегам