Можно ли каким-то образом построить такой запрос на клиенте:
update KitTrackingInformation
set
TrackingNumber = @TrackingNumber
from KitTrackingInformation
join BTSample on BTSample.BTKitIDLookupId = KitTrackingInformation.KitId
join BTSampInShipment on BTSampInShipment.BTSampleIDId = BTSample.Id
where SampInShipment.BTShipmentId = @ShipmentId
Понятно, что это будет выглядеть приблизительно так:
var updateTrackingInfo = Ext.create("Terrasoft.UpdateQuery", {
rootSchemaName: "KitTrackingInformation"
});
updateTrackingInfo.setParameterValue("TrackingNumber", trackingNumber,
Terrasoft.DataValueType.SHORT_TEXT);
updateTrackingInfo.filters.addItem(updateTrackingInfo.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"<путь по связям для фильтрации>", shipmentId));
updateTrackingInfo.execute(function(response) {
if (response.success) {
debugger;
}
}, this);
Из всего вышеописанного следует 2 вопроса:
1) каким образом построить путь для фильтрации
2) можно ли вообще реализовать UpdateQuery с фильтрацией по полю связанной таблицы
Нравится
Алла, скорее всего, такое условие можно получить по обратным связям, когда пишется три поля через двоеточие в квадратных скобках. В этом случае две обратных связи подряд, то есть будет [::].[::].
Вот пример даже тройного join-а:
[SysAdminUnit:Contact:Owner].[SysUserInRole:SysUser:Id].[SysAdminUnit:Id:SysRole].Id
Ещё один:
[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole
Сработает ли для update, нужно тестировать, глядя на получающиеся запросы в SQL-профайлере.
Зверев Александр,
Спасибо за ответ.
А какие sql-запросы получаются в итоге по этим примерам?
К сожалению, нет возможности посмотреть в профайлере код запросов.
Это примеры из логики фильтрации запросов на выборку, во втором случае получают список контактов, пользователи которых входят в указанную группу.