Здравствуйте!
Делаю обработку события После сохранения записи (у операции). Необходимо пересчитать сумму в Документе по всем операциям, которые находятся в состоянии Завершена и связаны с этим документом.
Код:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrOperation");
var documentId = this.Entity.GetTypedColumnValue("UsrContractId");
decimal Summ=0;
var usrPrimaryAmount = esq.AddColumn("UsrPrimaryAmount");
var usrOperationType = esq.AddColumn("UsrOperationTypeId");
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrContract", documentId));
var entityCollection = esq.GetEntityCollection(this.UserConnection);
if (entityCollection.Count > 0) {
foreach(var entity in entityCollection) {
if(entity.GetTypedColumnValue(usrOperationType.Name)=='fd59e0da-6bc3-4259-b17d-593fa62305ae')
{
Summ+=entity.GetTypedColumnValue(usrPrimaryAmount.Name);
}
}
}
var update = new Update(context.UserConnection, "Document")
.Set("UsrRealPayment",Column.Parameter(Summ))
.Where("Id").IsEqual(Column.Parameter(documentId)) as Update;
update.Execute();
В результате выдается ошибка "Превышено допустимое количество символов в строковой константе". Как это исправить?
Нравится
Анастасия, GetTypedColumnValue - generic метод, необходимо указывать тип. В ESQ добавляются колонки объектов, если это колонка справочного типа, то постфикс Id не нужен.
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrOperation"); Guid documentId = Entity.GetTypedColumnValue<Guid>("UsrContractId"); decimal Summ = 0; esq.AddColumn("UsrPrimaryAmount"); esq.AddColumn("UsrOperationType"); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrContract", documentId)); var entityCollection = esq.GetEntityCollection(UserConnection); if (entityCollection.Count > 0) { foreach(var entity in entityCollection) { if (entity.GetTypedColumnValue<Guid>("UsrOperationTypeId") == new Guid("fd59e0da-6bc3-4259-b17d-593fa62305ae")) { Summ += entity.GetTypedColumnValue<decimal>("UsrPrimaryAmount"); } } }
Замечание Акмаля также верно.