Вопрос

Не изменяются Пользовательские поля в Активностях

Подскажите, пожалуйста, что я не так делаю. 

Я в Таблицу Активностей (Activity) добавил поля. При формировании счета есть необходимость при определенных условиях вносить в эти поля данные, чтобы они отобразились в счете.  Делаю я это при помощи Задания-сценария:

(код приблизительный)

var list = Get>("ReadDataUserTask9.ResultCompositeObjectList");

foreach (ICompositeObject item in list) {

    item.TryGetValue("UsrFloat1", out decimal uf1);    

    item.TryGetValue("UsrFloat2", out decimal uf2);

    item.TryGetValue("Id", out Guid id);    

    if ( UsrFloat1 > UsrFloat2 ) {

        new Update(UserConnection, "Activity")

                    .Set("UsrFloat1CAP", Column.Parameter(uf2))

                    .Set("UsrFloat2CAP", Column.Parameter(uf1))

                    .Where("Id").IsEqual(Column.Parameter(id))

                    .Execute();

        

    }

}

return true;

Может я что-то не дочитал, т.к. я новичек в этой системе, но ничего не происходит.

Буду благодарен любой подсказке в каком месте я не туда "копаю"...

Нравится

5 комментариев

Добрый день,

 

А Вам точно нужно использовать для этого задание - сценарий? И еще: Вы каждый раз будете отправлять в БД update запрос в foreach для каждого элемента в списке, если UsrFloat1 больше UsrFloat2. Это нагрузит БД, приложение будет работать медленно + очень вероятно, что это загрузит и процессор Web-сервера. Нужно изменить подход в реализации логики. Например все приготовления сделать до изменения данных, записать результат в параметры процесса через Set<> (тут примеры), а потом простым элементом Modify data проставить активности значение в нужной колонке.

Oscar Dylan,

Спасибо за ответ. Но я так и не нашел как менять значения в 

ICompositeObject, т.к. это набор активностей в одном счете, и присвоить значение SET-ом не пойму как.

Спасибо, вроде нашел как это делать....

 

Извиняюсь, но при Set("UsrFloat1CAP", uf2) выдает ошибку: У типі "ProcessComponentSet" відсутня властивість "UsrFloat1CAP". Все таки не получается использовать Set на объекте ICompositeObject. Не подскажите как присвивать значения полям на ICompositeObject?

Демчук,

 

Это сообщение не может возникать в коде, что Вы предоставили. Очень похоже на то, что процес вместо Set в UpdateQuery где-то прописан еще и процесс пытается проставить значение параметру процесса, которого не существует и отдает это сообщение об ошибке. В стэке или в журнале процессов в экземпляре процесса с ошибкой не указано на каком элементе свал?

Показать все комментарии