Oracle Communications Billing and Revenue Management (Oracle BRM \, официально известный как Portal Infranet) предлагает два метода создания, редактирования и удаления настраиваемых полей и запоминаемых классов. Один из подходов заключается в использовании Storable Class Editor, входящего в состав приложения Developer Center, а другой - в использовании опкодов SDK. По ряду причин я предпочитаю последний вариант, и в этой заметке я рассмотрю манипулирование пользовательскими полями с помощью опкодов SDK.
Прежде чем начать, необходимо сделать одно изменение: сделать словарь данных доступным для записи. Вот как это сделать:
1. Откройте файл конфигурации Oracle DM или Microsoft SQL Server DM (BRM_HOME/sys/dm_oracle/pin.conf или BRM_HOME/sys/dm_odbc/pin.conf) в текстовом редакторе.
2. Разрешите манипулирование полями в словаре данных, установив следующую запись в 1:- dm dd_write_enable_fields 1
Наши цели заключаются в следующем:
1. Чтобы создать пользовательское поле
2. Чтобы отредактировать описание пользовательского поля
3. Чтобы удалить пользовательское поле из базы данных
4. Чтобы сделать пользовательское поле доступным для BRM
Создание нового пользовательского поля
Создание нового пользовательского поля и его фиксация в базе данных может быть осуществлена с помощью опкодов SDK или с помощью утилиты развертывания выводов. Как известно разработчикам, опкоды SDK обеспечивают более гибкий способ создания, редактирования и удаления пользовательских полей на этапе разработки. Утилита pin deploy, с другой стороны, использует PODL (Portal Object Definition Language) для экспорта и импорта определений полей и хранимых классов. Это более полезно, особенно на административном уровне, поскольку процесс можно упростить, поместив определения полей в управление исходным кодом, и тем самым снизить вероятность повреждения словаря данных производственной базы данных Oracle BRM.
Следующие опкоды SDK могут быть использованы для управления спецификациями полей:
1. PCM_OP_SDK_SET_FLD_SPECS - создание или изменение поля,
2. PCM_OP_SDK_GET_FLD_SPECS - получение спецификации поля,
3. PCM_OP_SDK_DEL_FLD_SPECS - удалить поле.
Для создания поля необходимо написать входной flist для опкода PCM_OP_SDK_SET_FLD_SPECS:
0 PIN_FLD_POID POID [0] 0.0.0.1 /dd/fields 0 0
0 МАССИВ PIN_FLD_FIELD [0]
1 PIN_FLD_DESCR STR [0] "пользовательское поле для хранения номера НДС"
1 PIN_FLD_FIELD_NAME STR [0] "C_FLD_VAT_NUMBER"
1 PIN_FLD_FIELD_NUM ENUM [0] 10000
1 PIN_FLD_FIELD_TYPE INT [0] 5
Теперь проверьте, что созданное поле существует в словаре данных базы данных, подав следующий входной список на опкод PCM_OP_SDK_GET_FLD_SPECS:
0 PIN_FLD_POID POID [0] 0.0.0.1 /dd/objects 0 0
0 МАССИВ PIN_FLD_FIELD [0]
1 PIN_FLD_FIELD_NAME STR [0] "C_FLD_VAT_NUMBER"
Редактирование описания пользовательского поля
Теперь, подтвердив существование нового пользовательского поля, можно изменить его описание, вызвав опкод PCM_OP_SDK_SET_FLD_SPECS со следующим входным списком:
0 PIN_FLD_POID POID [0] 0.0.0.1 /dd/fields 0 0
0 МАССИВ PIN_FLD_FIELD [0]
1 PIN_FLD_DESCR STR [0] "пользовательское поле - номер НДС"
1 PIN_FLD_FIELD_NAME STR [0] "C_FLD_VAT_NUMBER"
1 PIN_FLD_FIELD_NUM ENUM [0] 10000
1 PIN_FLD_FIELD_TYPE INT [0] 5
Опять же, спецификации поля могут быть получены, чтобы убедиться, что изменение было выполнено.
После этого удалите пользовательское поле из базы данных.
Наконец, предположим, что была допущена ошибка, и необходимо удалить поле. Предоставьте следующий входной flist опкоду PCM_OP_SDK_DEL_FLD_SPECS, который удалит поле:
0 PIN_FLD_POID POID [0] 0.0.0.1 /dd/fields 0 0
0 МАССИВ PIN_FLD_FIELD [0]
1 PIN_FLD_FIELD_NAME STR [0] "C_FLD_VAT_NUMBER"
Если опкод для получения спецификаций поля возвращает пустой список (только POID obj), то это означает, что поле не было найдено в словаре данных базы данных.
Создание пользовательских полей, доступных для BRM
Согласно стандартной практике, все, что разрабатывается на заказ, помещается в каталог BRM_HOME/custom, и поскольку в данном случае расширяется BRM_HOME/include/pin_flds.h, необходимо создать новый пользовательский заголовочный файл BRM_HOME/custom/include/custom_flds.h.
Теперь новое пользовательское поле может быть введено путем добавления следующей строки в файл custom_flds.h:
#define C_FLD_VAT_NUMBER PIN_MAKE_FLD(PIN_FLDT_STR, 10000)
Строка выше определяет пользовательское поле с именем "C_FLD_VAT_NUMBER" (обратите внимание на практику именования,
PIN_* для полей BRM и C_* для пользовательских полей) с типом данных "PIN_FLDT_STR" (STR означает строку)
и уникальный идентификатор "10000" (применительно к BRM_HOME/include/pin_flds.h). Типы данных являются статическими,
и определяется версией BRM, которую Вы используете; определения см. в BRM_HOME/include/pcm.h.
Далее выполните perl-скрипт parse_custom_ops_fields.pl на файле custom_flds.h, используя эту команду:
$BRM_HOME/bin/parse_custom_ops_fields.pl -L pcmc -I custom_flds.h -O $BRM_HOME/custom/include/custom_mapping.m
И, наконец, включите следующую строку в каждый pin.conf, где требуется, чтобы эти поля были видны: - - ops_fields_extension_file ${BRM_HOME}/custom/include/custom_mapping.m
ПРИМЕЧАНИЕ: При внедрении новых функциональных возможностей, использующих пользовательские поля, необходимо включить заголовочный файл custom_flds.h в ФМ, использующие эти поля