Всем доброго времени суток.
Версия 7.10.
Есть insertQuery - создание записи в таблице. Примерно такой:
var insert = Ext.create("Terrasoft.InsertQuery", {
rootSchemaName: "UsrObject"
});
insert.setParameterValue("UsrId", "id", $this.Terrasoft.DataValueType.TEXT); //id
bq.add(insert);
bq.execute(function(response){
console.log(response);
}, this);
В респонсе вываливается что-то примерно такого вида:
Запись же при этом создаётся.
Вопрос как узнать именно Id созданной записи в рамках базы. Имеется в виду не пользовательский, а тот, который присваивается каждой записи вида "9bed938d-9e06-4176-8ff5-8ec6ab49ca9a"?
Нужно чтобы потом сделать в ту же запись Update.
Нравится
Добрый день, Денис!
К сожалению, сразу получить guid на клиент с помощью InsertQuery не получится, так как идентификатор формируется на уровне базы (newid()). В принципе, можно взять последний объект по дате создания, в большинстве случаев это он и будет. Средствами системы это можно сделать в БП, элемент Добавить данные - а потом элемент Изменить данные, и отфильтровать по Id = Id созданной записи элемента Добавить данные.
Илья, а если допустим создать сервис, или БП, и создавать внутри него (т.е. на бекенде прямо в базе), то можно ли будет его вернуть в качестве response от сервиса?
Денис, пожалуйста, все-таки можно. Execute возвращает только количество добавленных строк, поменять сигнатуру ядровых методов не получится. Но ведь мы можем сами сгенерировать Id в C#-
Guid.NewGuid(), и передать его в InsertQuery. После чего данный guid можно будет успешно использовать в других запросах.
Илья, спасибо, ещё один вопрос, чтобы прояснить все варианты.
Есть такая функция: Terrasoft.generateGUID();
Если я сделаю вот так:
var myGuid = Terrasoft.generateGUID(); var bq = this.Ext.create("Terrasoft.BatchQuery"); var insert = Ext.create("Terrasoft.InsertQuery", { rootSchemaName: "UsrObject" }); insert.setParameterValue("Id", myGuid, this.Terrasoft.DataValueType.GUID); //id insert.setParameterValue("UsrId", "id", this.Terrasoft.DataValueType.TEXT); //id bq.add(insert); bq.execute(function(response){ console.log(response); }, this);
Сохранится ли запись под myGuid, вообще, возможно ли его таким образом сгенерировать?
UPD. По моему, работает.
Если делать на сервере C#-кодом, то Id можно вставить как и любое другое поле.
using (var dbExecutor = UserConnection.EnsureDBConnection()) { var insert = new Insert(UserConnection) .Into("CampaignPurchaseQtyCount") .Set("Id", Column.Parameter(x.Id)) .Set("CreatedOn", Column.Parameter(DateTime.UtcNow)) .Set("CreatedById", Column.Parameter(UserConnection.CurrentUser.ContactId)) .Set("ModifiedOn", Column.Parameter(DateTime.UtcNow)) .Set("ModifiedById", Column.Parameter(UserConnection.CurrentUser.ContactId)) .Set("ProcessListeners", Column.Parameter(0)) .Set("PurchaseDate", Column.Parameter(PurchaseDate.Date)) .Set("CampaignId", Column.Parameter(x.CampaignId)) .Set("CardId", Column.Parameter(x.CardId)) .Set("IsRewarded", Column.Parameter(x.IsRewarded)); insert.Execute(dbExecutor); }
Уникальный GUID на C# генерится:
var UId = Guid.NewGuid();