Общие сведения
Python-скрипт (далее – скрипт) обеспечивает детализацию Drill-through, выполняя её по условиям, описанным в файле конфигурации config.json (см. Детализация Drill-through).
Скрипт необходимо зарегистрировать для приложения, чтобы приложение могло с ним работать.
При регистрации скрипта необходимо указывать его название, которое в приложении отображается в выпадающем списке варианта «Связанный сценарий» контекстного меню факта (см. Детализация Drill-through).
В приложении может быть зарегистрировано сколько угодно много скриптов. Для каждого зарегистрированного скрипта обязательно должен быть предоставлен файл конфигурации config.json (далее – файл конфигурации).
Если для какого-либо зарегистрированного скрипта файл конфигурации отсутствует или имеет недопустимую структуру и детализация включена параметром конфигурации приложения plm.user_interface.scenario_hyperlink_enabled, то в ЛЮБОМ воспроизведенном сценарии, для ЛЮБОЙ его мультисферы контекстное меню факта НЕ ОТКРЫВАЕТСЯ, а в лог приложения записывается ошибка вида, соответственно:
Failed to get list of registered python scripts: linked scenario script 'Имя сценария' config file not exists Failed to get list of registered python scripts: Rapidjson assertion error
Конфигурация зарегистрированного скрипта записывается в директорию /var/plmrepo/linkedscenarioscripts/идентификатор_конфигурации_зарегистрированного_скрипта.
Регистрировать и удалять можно только по одному скрипту за раз.
Предусловия
Перед регистрацией и удалением скрипта необходимо остановить работу приложения:
systemctl stop polymatica.service
Код скрипта
Регистрация скрипта
1. Создайте в системе хоста приложения директорию /var/plmrepo/pyscripts/директория_python-скрипта, создайте в ней файл с расширением .py, и вставьте в него код скрипта. Например:
/var/plmrepo/pyscripts/drill_through_on_population_ms/script.py
2. Откройте на редактирование файл plm-util.config:
nano /etc/polymatica/plm-util.conf
Добавьте в него строки:
create_pyscript pyscripts.create.name = Детализация по МС "Население" pyscripts.create.type = linked_scenario pyscripts.create.script = /var/plmrepo/pyscripts/drill_through_on_population_ms/script.py
где name – название, которое отображается во вложенном меню варианта «Связанный сценарий»;
type – тип регистрируемого скрипта, в данном случае всегда linked_scenario;
script – путь до регистрируемого скрипта из шага 1.
3. Сохраните изменение в plm-util.config и выполните команду:
plm-util -v
При успешном выполнении команды возвращается ответ вида:
[08:41:11.712][ info][util] Creating new python script resource ... [08:41:11.713][ info][util] Using following parameters: [08:41:11.713][ debug][util] -- pyscripts.create.name = Детализация по МС "Население" [08:41:11.713][ debug][util] -- pyscripts.create.type = linked_scenario [08:41:11.713][ debug][util] -- pyscripts.create.script = /var/plmrepo/pyscripts/drill_through_on_population_ms/script.py [08:41:11.713][ trace][util:RM] Request to create linked scenario python script 00000000 by aaaaaaaa-aaaaaaaa-aaaaaaaa-aaaaaaaa [08:41:11.713][ trace][util:RS] Request to save c4684bf2 into "/var/plmrepo/linkedscenarioscripts/c4684bf2" [08:41:11.714][ trace][util:RI] Adding entry for c4684bf2 type 276 saved at "/var/plmrepo/linkedscenarioscripts/c4684bf2" [08:41:11.714][ trace][util:RI] Saving entry to disk c4684bf2 [08:41:11.714][ info][util] Dump of created python script 'c4684bf2': [08:41:11.714][ info][util] >> [08:41:11.714][ info][util] -- name: Детализация по МС "Население" [08:41:11.714][ info][util] -- id: c4684bf2 [08:41:11.714][ info][util] -- creator: plm-util [08:41:11.714][ info][util] -- created at: Thu, 28 Mar 2024 08:41:11 +0000 [08:41:11.714][ info][util] -- updated at: Thu, 28 Mar 2024 08:41:11 +0000 [08:41:11.714][ info][util] -- type: linked_scenario [08:41:11.714][ info][util] -- python script path: "/var/plmrepo/pyscripts/drill_through_on_population_ms/script.py" (exists: true) [08:41:11.714][ info][util] <<
На этом шаге регистрация скрипта завершена. Можно запустить приложение:
systemctl start polymatica.service
Обратите внимание!
- После регистрации скрипта нужно убрать из файла plm-util.config добавленные на шаге 2 строки, иначе алгоритм будет выполняться при каждом вызове plm-util.
- Чтобы детализация начала работать, её необходимо включить параметром конфигурации приложения plm.user_interface.scenario_hyperlink_enabled.
- В директории зарегистрированного скрипта обязательно должен находиться файл конфигурации. Зарегистрированный скрипт без файла конфигурации блокирует работу контекстного меню факта для всех воспроизведенных сценариев (см. Общие сведения).
Удаление скрипта
1. Откройте на редактирование файл plm-util.config:
nano /etc/polymatica/plm-util.conf
Добавьте в него строки:
delete_pyscript pyscripts.delete.by_id = c4684bf2
где by_id – идентификатор конфигурации зарегистрированного скрипта. В примере с регистрацией идентификатор конфигурации "c4684bf2". Идентификатор можно найти в директории /var/plmrepo/linkedscenarioscripts/.
2. Выполните команду:
plm-util -v
При успешном выполнении команды возвращается ответ вида:
[08:36:42.171][ info][util] Removing python script resource ... [08:36:42.172][ info][util] Using following parameters: [08:36:42.172][ debug][util] -- pyscripts.delete.by_name = [08:36:42.172][ debug][util] -- pyscripts.delete.by_id = c4684bf2 [08:36:42.172][ info][util] Deleting python script resource by id 'c4684bf2' [08:36:42.172][ trace][util:RS] Request to erase c4684bf2 at "/var/plmrepo/linkedscenarioscripts/c4684bf2" (will be renamed instead of erasing)
На этом шаге удаление скрипта завершено. Можно запустить приложение:
systemctl start polymatica.service
Внимание!
После удаления скрипта нужно убрать из файла plm-util.config добавленные на шаге 1 строки, иначе алгоритм будет выполняться при каждом вызове plm-util.
Известные проблемы
Детализация не работает с ошибкой «Не удалось запустить связанный сценарий»
Вариант 1
Если в логе уровня plm.log.main.loglvl = 0 есть ошибка вида:
ModuleNotFoundError: No module named 'polymatica'
выполнить в консоли команду:
pip3 install polyapi --upgrade
после чего перезапустить приложение:
systemctl start polymatica.service
Вариант 2
Если в логе уровня plm.log.main.loglvl = 0 есть ошибка вида:
some pairs for dimensions "dict_keys(...)" not specified in config
в файле конфигурации не указана одна или несколько размерностей dict_keys – должны быть указаны все размерности, элементы которых участвуют в детализации (см. Детализация Drill-through).