Довольно простая задача - прочитать параметр БП который содержит ID или текст. При следующем коде в Задание-сценарий:
Guid activityId = Get("Activity11");
String activity1 = Get("ActivityGuid");
return true;
Выдает всегда ошибку:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в Terrasoft.Common.ReflectionUtilities.GetPropertyValueByPath(Object source, String propertyPath)
в Terrasoft.Core.Process.ProcessModel.Get[T](String propertyPath)
в Terrasoft.Core.Process.UsrProcess17NvgIncident1MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
В чем может быть проблема ?
Нравится
Александр Че,
Проверьте, чтобы у Вас был интерпритируемый процесс (это в свойствах самого процесса устанавливается признак) и у скрипт такста был установлен признак 'Для интерпритируемого процесса' (точно не помню название).
Также посмотрите обсуждени по этой ссылке, чтобы было понятнее о чем речь.
Спасибо,
но как я понял из того же поста:
"Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set."
В расширенных настройках только поле с Именем есть теперь.
Есть еще идеи ?
Александр Че,
Служебное слово 'string' пишется с маленькой буквы, а у Вас с большой. Попробуйте написать правильно, вот так:
string activity1 = Get<string>("ActivityGuid");
И ещё меня смущает названия Ваших параметров: в строку пытаетесь получить параметр с названием 'ActivityGuid'. Вы точно правильно параметры приводите к соответствующим типам?
Александр Че пишет:
Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set
Да, это справедливо, но только для новых процессов. Если Вы, например, пытаетесь внести изменения в существующий процесс, который был создан ранее, то он может быть и не интерпритируемым.
Была идея что может указал системные переменные или слова.
Пересобрал БП. И добавил другие параметры:
И все равно та же ошибка с GET ..
Скриншоты БП ниже
А после изменения кода в скрипте компилировали процесс или только сохраняли?
Зверев Александр,
В текущей версии при сохранении он запрашивает на публикацию только, и соглашался с этим. Если это можно назвать компилированием - то да.
На 7.16.1 аналогичное работает нормально:
String ProcessSchemaParameter1 = Get<String>("ProcessSchemaParameter1"); Set("ProcessSchemaParameter2", ProcessSchemaParameter1); return true;
Но тут механизм параметров дорабатывался, добавили направление.
Сомневаюсь, что в 7.14.1 просто стандартное обращение к параметру не работало. Может, у Вас сначала было неправильно с типом или названием параметра, и это закешировалось?
Зверев Александр,
в 7.14 еще нет направления, и параметры указываются в коде через их имена, которые указаны в параметрах процесса.
Я тоже думал что закэшированно, и потому поднял быстро дефолтный Service и создал БП в пакете Custom и компилировал еще раз пакет уже в конфигурации, но ошибка так и не уходит.. такое ощущение что библиотеки не хватает.
Попробуйте создать другой тестовый БП с параметрами, чтобы убедиться, что воспроизводится стабильно, а не в конкретном БП.
Возможно, Ваш вопрос решит обновление.