PowerApps: как исправить несколько таблиц SQL с помощью внешних ключей? - PullRequest
0 голосов
/ 12 октября 2018

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

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

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

enter image description here

Пока ямы пробовали:

  • Разрешить NULL в столбце FK
  • Удален CASCADE из FK UPDATE и DELETE

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

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Функция 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"
    }
);
0 голосов
/ 12 октября 2018

Только что понял это:

Вы должны патчить их по порядку, чтобы сначала патчи для ПК были исправлены, затем захвачены с помощью функции 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: " "
        }
    )
);
...