Вопрос

Параметр БП типа EntityCollection

Не могу установить параметр БП типа 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 не работают для коллекций объектов. Иначе до этого догадаться, мягко говоря, непросто и отсюда начинаются бодания с ТП, которая просит денег (более дорогой пакет поддержки) за объяснение где ваша документация не соответствует реальности. А это уже просто не лезет ни в какие ворота!

Войдите или зарегистрируйтесь, чтобы комментировать