Довольно простая задача - прочитать параметр БП который содержит 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)

 

В чем может быть проблема ? 

Нравится

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

Добрый день.

 

Какую версию срм используете?

Алла Савельева,

7.14.1.935

Александр Че,

Проверьте, чтобы у Вас был интерпритируемый процесс (это в свойствах самого процесса устанавливается признак) и у скрипт такста был установлен признак 'Для интерпритируемого процесса' (точно не помню название).

Также посмотрите обсуждени по этой ссылке, чтобы было понятнее о чем речь.

Спасибо,

но как я понял из того же поста:

"Начиная с версии 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 и компилировал еще раз пакет уже в конфигурации, но ошибка так и не уходит.. такое ощущение что библиотеки не хватает.

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

 

Возможно, Ваш вопрос решит обновление.

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

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

Как реализовать бизнес-процесс, при запуске которого будет открываться страница с проводником. В проводнике на ПК выбирается файл (txt , xls, xml). В результате появляется на странице содержимое файла.

Интересует программная реализация

BPMOnline 7.7

Нравится

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

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

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

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

Если же данный функционал необходимо встроить в бизнес-процесс/, рекомендую Вам воспользоваться элементом бп "Преднастроенная страница".

"Мотков Илья" написал:

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

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

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

Если же данный функционал необходимо встроить в бизнес-процесс/, рекомендую Вам воспользоваться элементом бп "Преднастроенная страница".


Здравствуйте.
Спасибо большое.

Подскажите, в коде детали "Файлы и ссылки" (FileDetailV2) есть строки :
/**
* Обработчик события нажатия кнопки "Добавить файл".
* @private
*/
onAddFileClick: Terrasoft.emptyFn,

Не совсем понятно что здесь происходит. А где конкретно описывается обработчик кнопки "Добавить файл" ? Чтобы я мог использовать листинг обработчика для своей кнопки.

Код onAddFileClick: Terrasoft.emptyFn добавляет заглушку (пустую функцию). Это нужно для того, что бы событие onClick кнопки не отрабатывало.

Обратите внимание на строки

"fileUpload": true,
"filesSelected": {"bindTo": "onFileSelect"},

в описании элемента AddRecordButton.

Первая добавляет окно вызова файла при клике, filesSelected - отрабатывает после выбора файла.

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