Здравствуйте!

Я хочу в рамках бизнес-процесса добавить комментарий в ленту к лиду. Как это сделать так, чтобы комментарий появился в ленте у нужного лида?

Нравится

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

Добрый день, Павел!



Для создания нового сообщения в ленту необходимо добавлять запись в объект “Сообщение/комментарий”. Для указания объекта, в ленте которого необходимо создать запись, необходимо заполнить колонку “Экземпляр объекта”.

Пример элемента: http://prntscr.com/jhbo18

Анна Журавель,

Спасибо, Анна! А в поле "Экземпляр объекта" что указывается? 

Коробов Павел Анатольевич,

Добрый день!



В поле "Экземпляр процесса" Вам необходимо указать объект, в ленте которого Вы хотите создать сообщение . В данном случае это может быть или параметр процесса, или значение справочника, заданное статически.

Анна Журавель,

Подскажите, нужно ли заполнять поле "Схема" (если да, объясните откуда брать данные и что это за объект)? Если заполнить поля "Экземпляр объекта", "Сообщение/комментарий" и "Контакт" - запись не создается. 

http://prntscr.com/nogym3  - ошибка

http://prntscr.com/nogz4d - как заполнен БП

Туда нужно записывать Id той схемы (объекта в конфигурации, например «Лид»), к которой идёт комментарий. Посмотреть можно в адресной строке, открыв объект в дизайнере.

Evgenyi, данные берутся там из объекта, который так и называется "Схема", внутри которого есть Uid - именно он и требуется для заполнения поля "Схема".

 

Другими словами, например:

1. добавляете действие "Читать данные" и выбираете объект Схема, далее внутри указываете в фильтр по названию, например, название = "Канал" (тот в котором будет запись вашего сообщения ленты).

2. при добавлении записи в объект “Сообщение/комментарий” поле "Схема" заполняете из созданной вами в первом пункте объекта "Схема" и в параметре находите Uid

 

ps: сам проморочил голову, нигде никто не пишет подробно как вставить uid в поле схема.

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

Коллеги, добрый день!

Трабла - не обновляются до конца некоторые пакеты при обновлении из svn.

Есть площадка для разработки, с которой в svn публикуются пакеты. При обновлении из svn на препрод-площадку - пакеты не до конца обновляются - с таким сообщением об ошибках, может быть связанных с мультиязычием или ещё с чем либо.

Очистка кеша репозитория и смена самого репозитория не помогает устранить проблему.

 

В чем причина и как исправить? Заранее благодарен за советы / рецепты

 

Изображение удалено.

Нравится

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

Проблема возникла из-за того, что с одним и тем же ресурсом (схемой) параллельно работали два пользователя, вследствие чего, один из пользователей выполнил фиксацию своих изменений, а второй пользователь при попытке зафиксировать свои изменения был вынужден обновить этот пакет и получить статус соответствующих ресурсов "Conflict". Это значит, что эти ресурсы у второго пользователя остались в состоянии до последнего обновления (это не ошибка, это предупреждение о том, что при последующей фиксации его заливка затрет изменения предыдущего пользователя).

Сергей Кy6риш,

Да, спасибо. При повторных последовательных обновлениях этого пакета из svn - картина не меняется, т.е. на принимающей площадке ничего из конфликтующего - не перезатирается, и опять-таки появляется такое, как на рисунке сообщение.   

Если на первичной площадке внести изменение, например добавить или изменить какую-то схему, зафиксировать это в svn, и после обновлять пакет на принимающей площадке, то все внесённые значимые изменения применяются, за исключением указанных на рисунке, а при повторной попытке обновления - остаются только конфликты как на рисунке.

Почему-то конфликт не устраняется (ожидаемым) перезатиранием

 

Проблема заключается в том, что вы пытаетесь обновить из SVN ресурсы схемы, которые у него были изменены на принимающей стороне.

При обновлении ресурсов, всегда побеждают ресурсы, измененные локально у пользователя (сколько бы обновлений не делали).

А как устранить симптом? может быть закачать содержимое соответствующих таблиц в БД с образцовой площадки на ту, на которой наблюдается симптом?

При изминении ресурсов в базе сайта (таблица "SysPackageResourceChecksum")  для ресурсов пакетов устанавливается еденица в колонке "IsChanged".

Как обходное решение, можно проадейтить соответствующие значения в нули "0".

Сергей Кy6риш,

Добрый день, та же самая проблема, но в таблице 

SysPackageResourceChecksum просто нет записей для ресурсов, с которыми конфликт. Одновременно пользователи не работали, но при комите изменений постоянно появляется ошибка авторизации. В чем может быть проблема?

Елена Ефремова пишет:

постоянно появляется ошибка авторизации. В чем может быть проблема?

В неправильном логине или пароле?

Вообще, за 2 года могло многое поменяться и в системе, и в SVN, так что причина может быть и совсем не та, что у автора темы. Нужно больше информации, что Вы делали, скриншоты ошибок. Возможно, более подробно в момент неуспешной попытки обновления пишется в логи на веб-сервере. Если есть доступ, проверьте, что там.

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

Коллеги, добрый день!

Обнаружилась проблема - не работает вкладка управления правами в редакторе конфигурации. При попытке изменения прав для любого пакета, в которых нами проводилась разработка (названия начинаются с префикса IP) - никаких изменений не происходит и появляется сообщение об ошибке о наличии циклов в зависимостях пакетов  - см. рис 1.

Мы тщательно проверили зависимости и установили отсутствие циклов. Очистка кеша репозитория и смена самого репозитория не помогает устранить проблему.

 

При переносе через svn пакетов на другую площадку ситуация такая же, некорректная работа воспроизводится.

 

В чем причина и как исправить? Заранее благодарен за советы / рецепты.

 

Изображение удалено.

Нравится

1 комментарий

Коллеги, доброго времени суток!

Подскажите пожалуйста:

В разделе "Счета" при изменении количества/цен продуктов идет автоматический пересчет "Суммы" счета. Как я понял код, отвечающий за изменение находится в пакете Invoice => схеме объекта InvoiceProduct => подпроцессе SubProcessScriptAmountChange => внутри скрипта ScriptAmountChange, который отрабатывает при получении сообщения события InvoiceProductSaved или InvoiceProductDeleted. Поиск по сообществу показал, что видимо просто так переопределить код внутри скрипта нельзя, если он не вынесен в метод. Чтобы заменить логику его работы нужно создать свой подпроцесс с входами через те же сообщения (но со своими названиями) и в конце вызываемого скрипта перед return вписать

ActivatedEventElements.Remove("InvoiceProductSaved");

ActivatedEventElements.Remove("InvoiceProductDeleted");

что я и сделал, создал подпроцесс по образу и подобию с родительским (два входных сообщения через исключащее "ИЛИ" по безусловной связи идут в скрипт), однако после сохранения, публикации и обновлении стурктуры БД дополнительная логика не отрабатывает, из чего я делаю вывод, что до скрипта почему-то дело не доходит.

У моих входных событий совпадают с родительскими поля "Сообщение" (InvoiceProductSaved и InvoiceProductDeleted), но отличаются "Название" (иначе компилятор предупреждает, что override неправильно делаю, и получается только hide.. ну и всё равно не работает), поле "Условие" в связи от исключащего ИЛИ пустое, судя по "Исходному коду" это как раз то, что нужно, т.к. в этом случае функция всегда возвращает true.

Пытался и напрямую оба события на скрипт завязать - всё равно не работает.

Вопрос соответственно - что я делаю не так?

Нравится

4 комментария

Здравствуйте!

Описанное решение выглядит правильно. 

Для перекрытия логики по родительскому сигналу, необходимо в дочернем БП объекта подписаться на аналогичное событие объекта и в скрипте перед return true  вставить:

if (ActivatedEventElements.Contains("InvoiceProductSaved")) {

    ActivatedEventElements.Remove("InvoiceProductSaved")

}

Проверьте, что БП в дочернем объекте помещен в "Событийный подпроцесс".

Так же, вы хотите удалить сразу два сигнала. Поэтому, советую выполнять проверку какой сигнал пришел и удалять его( как в примере выше).

Спасибо!

Попробовал в другом объекте (OrderProduct) проверить. Создал в процессе замещающего объекта событийный подпроцесс, в него поместил одно начальное событие (сообщение OrderProductSaved) из него прямой переход на скрипт, в котором три строчки:

global::Common.Logging.ILog _Logger = global::Common.Logging.LogManager.GetLogger("Client");

_Logger.Info("Order product saved event test");

return true;

Одновременно в переопределенный метод RecalculateOrderAmount вписываю в начале:

global::Common.Logging.ILog _Logger = global::Common.Logging.LogManager.GetLogger("Client");

_Logger.Info("Order product saved event test 2, "+GetPropertiesData());

Метод вызывается только в родительском процессе по цепочке от сообщений OrderProductSaved или OrderProductDeleted.

В итоге когда модифицирую произвольный продукт заказа, из метода в лог информация пишется, из скрипта в подпроцессе - нет. При этом на момент логирования из метода элемент события в подпроцессе даже присутствует в массиве ActivatedEventElements, но почему-то так никогда и не запускается.

Что может быть не так или может быть есть какая-то статья или инструкция для чайников как правильно создавать дополнительные обработчики стандартных событий в процессах замещающих объектов?

Коллеги, подскажите пожалуйста, как правильно создавать подпроцессы в замещающих схемах, потому что теряюсь в догадках, почему вроде бы простой механизм не работает.

Добрый день!

Проверила ваш кейс у себя, всё получилось.

Вот как я делала:

Событийный подпроцесс - http://prntscr.com/jhpu81

Задание-сценарий - http://prntscr.com/jhpuoz

Добавила продукты в счете - http://prntscr.com/jhpuz6

Сумма не считается - http://prntscr.com/jhpv9a

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

Всем доброго времени суток. Версия 7.11.

При использовании элемента "Открытие страницы редактирования" в бизнес-процессах в системе создаётся специальная техническая активность, назначаемая на ответственного, которому открывается страница редактирования.

Существует другой БП, который при назначении ответственного на задачу (активность) отправляет уведомления по e-mail о назначении. Старт процесса - сигнал о создании активности.

Как я понимаю, в рамках основного процесса техническая активность становится доступна только после выполнения элемента "Открытие страницы редактирования", т.е. доступ к ней таким образом не получить.

Соответственно вопрос  - можно ли, наоборот, из технической активности вытащить в рамках БП ссылку (GUID) на страницу, которую открываем через "Открытие страницы редактирования". Задача состоит в том, что отправить в email ссылку сразу на эту страницу. В идеале - вытащить ещё некоторые сведения об объекте, страницу которого открываем, чтобы добавить их в письмо.

 

Нравится

1 комментарий

Дмитрий, добрый вечер!



Активность по элементам "Вопрос пользователю" и "Открыть страницу редактирования" создаются процессом в момент достижения этого элемента и до этого не существуют. Такие активности видны в разделе активностей и сохраняются после обработки эллемента и процесса в целом и данные о них можно будет использовать в Вашем кейсе.

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

Не могу установить параметр БП типа EntityCollection с именем ActualPOAs. Делаю в коде:

var esq = new EntitySchemaQuery(context.UserConnection.EntitySchemaManager, "UsrPowerOfAttorney");
esq.AddAllSchemaColumns();
EntityCollection ActualPOAs = esq.GetEntityCollection(context.UserConnection);
// Упадет в следующей строке
Set<EntityCollection>("ActualPOAs", ActualPOAs);

После чего получаю исключение (ниже). Что я делаю не так?

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: The best overloaded method match for 'Terrasoft.Core.Process.IProcessParameterStore.SetParameterValue(System.Guid, string, string)' has some invalid arguments at CallSite.Target(Closure , CallSite , IProcessParameterStore , Guid , String , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid4[T0,T1,T2,T3](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3) at Terrasoft.Core.Process.ProcessParameterInfoComposer.UpdateParameterInfoValue[T](Guid processUId, ProcessParameterInfo parameterInfo, String parameterPath, T value) at Terrasoft.Core.Process.ProcessModel.SetParameterValue[T](FoundParameterData result, T value) at Terrasoft.Core.Process.ProcessModel.TrySetValue[T](ProcessSchema processSchema, String propertyPath, T value) at Terrasoft.Core.Process.ProcessModel.Set[T](String propertyPath, T value) at Terrasoft.Core.Process.PowerOfAttorneyPackCheckMethodsWrapper.ScriptCheckPOAExecute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Нравится

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

Здравствуйте!

Необходимо параметру ActualPOAs просто присвоить полученную коллекцию:

ActualPOAs = esq.GetEntityCollection(context.UserConnection);

На элементе задание-сценарий перейти в расширенный решим и снять галочку "Для интерпретируемого процесса".

В настройках процесса установить галочку "Компилировать".

Demchenko Olha,

к сожалению, я не могу сделать процесс компилируемым, т.к. он запускается по таймеру, а на версии 7.11 таймер и компилируемый процесс - вещи не совместимые.

Извините, откуда у вас такая информация, что БП с таймером нельзя сделать компилируемым? 

В функционале БП во-первых, не предусмотрено присваивание коллекций методом Set в интерпретируемых процессах, во-вторых, таймеру все равно компилируемый процесс или интерпретируемый.

Золотарев Артем Андреевич,

https://community.terrasoft.ru/questions/startovyi-taimera-v-bp - отсюда, ответ Логвин Андрей Витальевич: "Запуск компилируемых процессов по стартовому таймеру реализован в версии 7.11.3 и выше."

Правильно я понимаю,что 

ActualPOAs = esq.GetEntityCollection(context.UserConnection); будет работать в интерпретируемом процессе?

 

Алексей-Карягин,

Попробуйте сделать, как написала Demchenko Olha и протестируйте работу БП.

Если не сработает ожидаемым способом и у вас версия до 7.11.3 отключите для БП признак "Компилируемый", а для задания-сценария уберите галочку "Для интерпретируемого процесса", это должно работать нормально.

А вот для 7.11.3 точно нормально работает и для компилируемого БП.

Алексей-Карягин,

ActualPOAs = esq.GetEntityCollection(context.UserConnection); - работает только для компилируемого задания-сценария

Золотарев Артем Андреевич,

Да, так работает интерпретируемый процесс и задание для компилируемого процесса. Хочу вас заодно попросить поправить документацию 

https://academy.terrasoft.ru/documents/technic-bpms/7-12/element-proces…, добавьте, что не методы Get и Set не работают для коллекций объектов. Иначе до этого догадаться, мягко говоря, непросто и отсюда начинаются бодания с ТП, которая просит денег (более дорогой пакет поддержки) за объяснение где ваша документация не соответствует реальности. А это уже просто не лезет ни в какие ворота!

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

Кейс:

Есть список контактов в системе

настроена интеграция с ЛДАП люди аторизуются все вроде ничего.

добавили учетку в ЛДАП с фио как в контактах и при синхронизации с лдап создалась учетная запись в BPM но мало того так еще и создался контакт одноименный

теперь у меня 2 одинаковых контакта что есть неверно.

Как настроить интеграцию с ЛДАП чтоб при попадание УЗ в BPM не создавались контакты а использовались те что уже есть.

р.ы. нельзя изменить процесс сперва контакты создаются в BPM

а учетка в ЛДАП потом.

Нравится

3 комментария

Добрый день, Алексей.

Уточните версию BPM - процесс значительно менялся со временем, возможно в новых версиях эта ошибка уже исправлена, так как по умолчанию он должен подтягивать уже существующий контакт.

Антон Малий,

 

bpm'online service enterprise 7.11.0.3122

если это было обновлено то как можно только часть отвечающую за интеграцию с ЛДАП обновить ?

Добрый день, Алексей.



Уточнил информацию у разработчиков - бизнес-процесс не проверяет наличие уже существующего контакта, а создает новый. Для решения Вашей проблемы можно либо вручную привязать нужные контакты к аккаунтам, либо самостоятельно заместить и модифицировать процесс синхронизации LDAP, так как в текущих релизах это сторона синхронизации не затрагивалась.

P.S. В любом случае рекомендуем обновиться до актуальной версии - 7.12.1. В новых релизах исправлены некоторые ошибки и добавлен новый функционал.

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

Добрый день

в тестовой конфигурации bpm online сделал модификации как форм, так и структуры некоторых таблиц.

Есть ли возможность перенести сделанные изменения, а не реализовывать их повторно в рабочей базе данных

Нравится

2 комментария

Да, есть несколько способов переноса доработок. Обычно переносят пакетами: выгружают доработки в один архив на первом сайте и загружают из этого файла на другом.

Важно, перед началом доработок на тестовом сайте нужно было переключить текущий пакет с Custom на свой, поскольку пакет Custom не предназначен для переноса.

спасибо большое

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

Есть потребность закрасить определенную ячейку в детали по определенной логике, расположенной на странице.

Было много вопросов на эту тему, но создаю еще, т.к. версия 7.12.

Если нет такой возможности, то возможно после полной загрузки(отображения) детали на странице получить контейнер и в нем изменить стиль в лоб. Но при каком событии деталь точно загружена?

Нравится

1 комментарий

Здравствуйте, Евгений!

Пока отсутствует возможность изменять цвет для определённой ячейки в зависимости от какой-то логики ( можно только для всей записи).

Собственно деталь загружается после выполнения метода onGridDataLoaded.

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

Добрый день.

Только начинаю разрабатывать в BPM, и одной из первых задач у меня стало создание правила расчета сроков в обращении.

Пытаюсь реализовать функционал расчета сроков в обращении используя пример https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-novogo-pravila-rascheta-srokov-v-obrashchenii

В данный пример (в исходный код "класс с механизмом получения временных параметров") внес небольшие изменения, а именно, мне нужно получить Категорию обращения (стандартное поле) из текущего обращения и добавить полученную категорию в фильтр справочника, в котором содержатся данные для расчета времени (аналогичный примеру, только с полем "Категория обращения").

Получить Категорию обращения я попытался таким способом:

public class UsrMKtermsStrategy: BaseTermStrategy<CaseTermInterval, CaseTermStates>
    {
        // Класс-контейнер для хранения данных, полученных из точки входа.
        protected class StrategyData
        {
            public Guid ServiceItemId {
                get;
                set;
            }
            public Guid PriorityId {
                get;
                set;
            }
            public Guid CategoryId {
                get;
                set;
            }
 
        }
        // Поле, хранящее данные, полученные из точки входа.
        protected StrategyData _strategyData;
        // Параметризированный конструктор, необходимый для корректной
        // инициализации классом-селектором.
        public UsrMKtermsStrategy(UserConnection userConnection, Dictionary<string, object> args)
            : base(userConnection) {
            _strategyData = args.ToObject<StrategyData>();
        }



В результате при добавлении фильтра в esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrCategory", _strategyData.CategoryId); у меня передается пустой GUID.

Я так понимаю, причина в том, что не передается аргумент CategoryId

Подскажите, как мне передать Категорию обращения в класс с механизмом получения временных параметров. Пробывал использовать аргумент CaseID и получать Категорию через EntitySchemaQuery. Вариант не подошел, т.к. на момент срабатывания правила и расчета сроков обращение еще не сохранено в БД, и расчет происходит только на сохраненном обращении.

Нравится

2 комментария

Здравствуйте, Антон!

Убедитесь, что вы добавили Категорию в созданный объект (по п.1 из инструкции).

Так как в инструкции указано, что поля, по которым будет выполнятся фильтрация, должны быть добавлены в объект (скриншоты из инструкции - http://prntscr.com/jgj5av, http://prntscr.com/jgj5i5).

Спасибо. Ссылки на Категорию в созданный объект добавил первым делом.

Удалось разобраться самостоятельно:

1) В клиентскую схему схему CasePage добавил пересоздание метода "prepareCaseTermCalculatorConditions" добавив "this.addToConditions(conditions, "Category");

prepareCaseTermCalculatorConditions: function() {
	var conditions = [];
	this.addToConditions(conditions, "ServiceItem");
	this.addToConditions(conditions, "ServicePact");
	this.addToConditions(conditions, "Priority");
	this.addToConditions(conditions, "Id");
	this.addToConditions(conditions, "SolutionOverdue");
	this.addToConditions(conditions, "Category");
	return conditions;
},

2) Исправил ошибки в исходном коде статьи, а именно:

a) Фильтры в EntitySchemaQuery создавались, но не добавлялись. Т.е. небыло esq.Filters.Add(esqFirstFilter); 

b) Не использовался «using Terrasoft.Configuration.SLMExtensions;» и перевод результата в минуты («result.ResponseTerm = term.ConvertToMinutes();»). В итоге сильнос сбивалась логика калькуляции паузы при переоткрытии обращения.



В итоге мой серверный исходный код получился следующий:

 

namespace Terrasoft.Configuration
{
	using System;
	using System.Collections.Generic;
	using Terrasoft.Common;
	using Terrasoft.Configuration.Calendars;
	using Terrasoft.Configuration.SLMExtensions;
	using Terrasoft.Core;
	using Terrasoft.Core.Entities;
	using CalendarsTimeUnit = Calendars.TimeUnit;
	using SystemSettings = Terrasoft.Core.Configuration.SysSettings;
	//
	using System.Collections.ObjectModel;
	using System.Data;
	using Terrasoft.Core.DB;
	public class UsrMKtermsStrategy: BaseTermStrategy&lt;CaseTermInterval, CaseTermStates&gt;
	{
		// Класс-контейнер для хранения данных, полученных из точки входа.
		protected class StrategyData
		{
			public Guid ServiceItemId {
				get;
				set;
			}
			public Guid CaseId {
				get;
				set;
			}
			public Guid PriorityId {
				get;
				set;
			}
			public Guid CategoryId {
				get;
				set;
			}
 
		}
		// Поле, хранящее данные, полученные из точки входа.
		protected StrategyData _strategyData;
		// Параметризированный конструктор, необходимый для корректной 
		// инициализации классом-селектором.
		public UsrMKtermsStrategy(UserConnection userConnection, Dictionary&lt;string, object&gt; args)
			: base(userConnection) {
			_strategyData = args.ToObject&lt;StrategyData&gt;();
		}
		// Метод, который получает данные и возвращает их в экземпляре класса CaseTermInterval. 
		public override CaseTermInterval GetTermInterval(CaseTermStates mask) {
			var result = new CaseTermInterval();
			// Создание EntitySchemaQuery запроса.
			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrTimeCalc");
			// Добавление колонок в запрос.
			string reactionTimeUnitColumnName = esq.AddColumn("UsrReactionTimeUnit.Code").Name;
			string reactionTimeValueColumnName = esq.AddColumn("UsrReactionTimeValue").Name;
			string solutionTimeUnitColumnName = esq.AddColumn("UsrSolutionTimeUnit.Code").Name;
			string solutionTimeValueColumnName = esq.AddColumn("UsrSolutionTimeValue").Name;
			string calendarColumnName = esq.AddColumn("UsrCalendarId.Id").Name;
			// Добавление фильтров в запрос.
 
			var esqFirstFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrPriority", _strategyData.PriorityId);
			//var esqSecondFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrCategory", categoryGuid);
			var esqSecondFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrCategory", _strategyData.CategoryId);
 
			esq.Filters.Add(esqFirstFilter);
			esq.Filters.Add(esqSecondFilter);
 
			// Выполнение и обработка результатов запроса.
			EntityCollection entityCollection = esq.GetEntityCollection(UserConnection);
			if (entityCollection.IsNotEmpty()) {
				// Добавление к возвращаемому значению времени реакции.
				if (!mask.HasFlag(CaseTermStates.ContainsResponse)) {
					var term  = new TimeTerm {
						Type = entityCollection[0].GetTypedColumnValue&lt;CalendarsTimeUnit&gt;(reactionTimeUnitColumnName),
						Value = entityCollection[0].GetTypedColumnValue&lt;int&gt;(reactionTimeValueColumnName),
						CalendarId = entityCollection[0].GetTypedColumnValue&lt;Guid&gt;(calendarColumnName)
					};
					result.ResponseTerm = term.ConvertToMinutes();
				}
				// Добавление к возвращаемому значению времени разрешения.
				if (!mask.HasFlag(CaseTermStates.ContainsResolve)) {
					var term  = new TimeTerm {
						Type = entityCollection[0].GetTypedColumnValue&lt;CalendarsTimeUnit&gt;(solutionTimeUnitColumnName),
						Value = entityCollection[0].GetTypedColumnValue&lt;int&gt;(solutionTimeValueColumnName),
						CalendarId = entityCollection[0].GetTypedColumnValue&lt;Guid&gt;(calendarColumnName)
					};
					result.ResolveTerm = term.ConvertToMinutes();
				}
			}
			return result;
		}
	}
}

 

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