Всем доброго времени суток.
Версия 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();
Если я сделаю вот так:
[javascript]
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);
[/javascript]
Сохранится ли запись под myGuid, вообще, возможно ли его таким образом сгенерировать?
UPD. По моему, работает.
Если делать на сервере C#-кодом, то Id можно вставить как и любое другое поле.
[csharp]
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);
}
[/csharp]
Уникальный GUID на C# генерится:
[csharp]
var UId = Guid.NewGuid();
[/csharp]