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: " "
}
)
);