Назначение
Плагин db в hid предназначен для удаленной работы с ядром АСР "Гидра". Он позволяет выполнять хранимые процедуры и делать SQL-выборки из БД без установки непосредственного соединения с ней.
Принцип работы
Все хранимые процедуры СУБД отображаются в названия методов напрямую (например, для процедуры SI_USERS_PKG.SI_USERS_PUT используется соответствующий метод плагина SI_USERS_PKG.SI_USERS_PUT). В качестве аргумента методов хранимых процедур следует передавать структуру (хэш, словарь) с параметрами ее вызова. Методы хранимых процедур возвращают структуры переданных параметров, но с измененными во время выполнения значениями (например, если передавать в процедуру SI_USERS_PKG.SI_USERS_PUT в качестве значения num_N_USER_ID NULL, то на "выходе" процедуры в качестве значения num_N_USER_ID будет идентификатор созданного абонента).
Для получения выборок из БД следует использовать специальный метод SELECT(query, page_num), где query — SQL-запрос данных из БД, page_num — номер страницы результата (по умолчанию — 1). Для снижения нагрузки на БД выборки делаются постранично, т.е. весь результат запроса разбивается на страницы определенного размера (размер задается в конфиге hid). Если в качестве page_num передан 0, делается выборка без разбиения на страницы (при условии, что это разрешено в конфиге hid).
Метод SELECT возвращает структуру (хэш, словарь) следущего содержания:
{ 'RecordsNumber' => RecordsNumber, 'PagesNumber' => PagesNumber, 'SelectResult' => SelectResult, }
RecordsNumber
— количество записей результата выборки;PagesNumber
— количество страниц результата выборки;SelectResult
— список (массив) записей. Каждая запись представляется еще одним списком, элементы которого соответствуют выбираемым полям таблицы. Все числовые поля таблиц из БД представляются в виде строк.
Параметры конфига hid
db select page size
— размер страницы выборки. По умолчанию — 20.db allow unlimited select
— флаг разрешения выборок без ограничения (on
илиoff
). По умолчанию —off
.
Примеры
Редактирование (создание) физического лица
SI_PERSONS_PKG.SI_PERSONS_PUT({ 'num_N_PERSON_ID' => num_N_PERSON_ID, 'vch_VC_SURNAME' => 'Шварценгольд', 'vch_VC_SECOND_NAME' => 'Викторович', 'ch_C_SEX' => 'M', 'num_N_SUBJ_GROUP_ID' => 49001, 'vch_VC_INN' => '1234567891', 'num_N_DOC_AUTH_TYPE_ID' => 2015, 'vch_VC_DOC_SERIAL' => '01 06', 'vch_VC_DOC_NO' => '489635', 'dt_D_DOC' => DATE('24.01.2009', 'DD.MM.YYYY'), 'vch_VC_DOCUMENT' => 'Отделением по району Царицыно ОУФМС России по г. Москве в ЮАО', 'dt_D_BIRTH' => DATE('20.03.1955', 'DD.MM.YYYY'), 'vch_VC_BIRTH_PLACE' => 'г. Москва', 'num_N_SUBJ_STATE_ID' => 2011, 'num_N_CITIZENSHIP_ID' => 21101, })
num_N_PERSON_ID
— идентификатор физ. лица. Если равенNULL
— производится создание, иначе — редактированиеnum_N_SUBJ_GROUP_ID
— идентификатор группы физ. лиц (представлениеSI_V_SUBJ_GROUPS
)num_N_DOC_AUTH_TYPE_ID
— идентификатор типа документа, удостоверяющего личность (справочникREF_TYPE_Document
)num_N_SUBJ_STATE_ID
— идентификатор состояния СУ (справочникREF_TYPE_Subject_State
, SYS_CONTEXT('CONST', 'SUBJ_STATE_On') == 2011)num_N_CITIZENSHIP_ID
— идентификатор региона гражданства
Удаление физического лица
SI_PERSONS_PKG.SI_PERSONS_DEL({ 'num_N_PERSON_ID' => num_N_PERSON_ID, })
num_N_PERSON_ID
— идентификатор физ. лица.
Получение информации о юридическом лице
SELECT("SELECT * FROM SI_V_COMPANIES_JR WHERE N_COMPANY_ID = <num_N_COMPANY_ID>")
num_N_COMPANY_ID
— идентификатор юр. лица.
Услуги абонента
Список текущих услуг
SELECT("SELECT * FROM TABLE(SI_USERS_PKG_S.USERS_CURRENT_SERVS_LIST(<num_N_USER_ID>, 1))")
num_N_USER_ID
— идентификатор абонента
Список оказанных услуг
SELECT("SELECT * FROM TABLE(SI_USERS_PKG_S.USERS_BILLED_SERVS_LIST(<num_N_USER_ID>, TO_DATE('<dt_D_BEGIN>', 'DD.MM.YYYY HH24:MI:SS'), TO_DATE('<dt_D_END>', 'DD.MM.YYYY HH24:MI:SS'), 1))")
num_N_USER_ID
— идентификатор абонентаdt_D_BEGIN
— дата начала периода, за который получается список оказанных услугdt_D_END
— дата окончания периода, за который получается список оказанных услуг
Получение информации о текущей услуге
SELECT("SELECT * FROM TABLE(SI_USERS_PKG_S.USERS_CURRENT_SERVS_LIST(<num_N_USER_ID>, 1)) WHERE N_GOOD_ID = <num_N_GOOD_ID>")
num_N_USER_ID
— идентификатор абонентаnum_N_GOOD_ID
— идентификатор услуги из номенклатуры
Изменение состояния услуги доступа
SI_USERS_PKG.ACCESS_SERV_CHG_STATE({ 'num_N_GOOD_ID' => 40216501, 'num_N_PARENT_GOOD_ID' => 40161101, 'num_N_ACCOUNT_ID' => 52481101, 'num_N_OBJECT_ID' => 52482001, 'num_N_INVOICE_ID' => 52485101, 'b_Enable' => 1, })
num_N_GOOD_ID
— идентификатор услуги доступа из номенклатурыnum_N_PARENT_GOOD_ID
— идентификатор основной услуги (тарифного плана) из номенклатурыnum_N_ACCOUNT_ID
— идентификатор лицевого счета абонентаnum_N_OBJECT_ID
— идентификатор оборудованияnum_N_INVOICE_ID
— идентификатор инвойсаb_Enable
— флаг включения (значение 1) или выключения (значение 0) услуги
Получение детализации по трафику
—
Получение детализации по доп. услугам
SELECT("SELECT * FROM SI_V_USER_ADDSERVS WHERE N_DOC_ID = <num_N_DOC_ID> AND N_PARENT_GOOD_ID = <num_N_GOOD_ID>")
num_N_DOC_ID
— идентификатор абонентаnum_N_GOOD_ID
— идентификатор услуги (тарифного плана) из номенклатуры
Инвойсы
Список инвойсов абонента
SELECT("SELECT D.* FROM SD_V_INVOICES_JR D, SI_V_DOC_SUBJECTS_SIMPLE S WHERE S.N_DOC_ID = D.N_DOC_ID AND S.N_DOC_ROLE_ID = SYS_CONTEXT('CONST', 'SUBJ_ROLE_Receiver') AND S.N_SUBJECT_ID = <num_N_USER_ID>")
num_N_USER_ID
— идентификатор абонента
Получение заголовка инвойса
SELECT("SELECT * FROM SD_V_INVOICES_T WHERE N_DOC_ID = <num_N_DOC_ID>")
num_N_DOC_ID
— идентификатор инвойса
Получение состава инвойса
SELECT("SELECT * FROM SD_V_INVOICES_C WHERE N_DOC_ID = <num_N_DOC_ID>")
num_N_DOC_ID
— идентификатор инвойса
Изменение состояния инвойса
SD_DOCUMENTS_CHANGE_STATE( 'num_N_DOC_ID' => 52485101, 'num_N_New_DOC_STATE_ID' => 4003, })
num_N_DOC_ID
— идентификатор инвойсаdt_D_OPER
— идентификатор состояния документа (справочникREF_TYPE_Document_State
, лицевой счет — SYS_CONTEXT('CONST', 'DOC_STATE_Actual') == 4003)
Досрочное закрытие инвойса
SI_USERS_PKG.CHANGE_INVOICE_PERIOD({ 'num_N_DOC_ID' => 52485101, 'dt_D_OPER' => DATE('11.06.2010 23:11:02', 'DD.MM.YYYY HH24:MI:SS') })
num_N_DOC_ID
— идентификатор инвойсаdt_D_OPER
— время закрытия. Если не передано, используется текущее время системы
Подписки на службы
Получение информации о подписках на службы
SELECT("SELECT * FROM SI_V_SUBJ_SERVICES WHERE N_SUBJ_SERV_TYPE_ID = SYS_CONTEXT('CONST','SUBJ_SERV_ServiceUse')")
Получение информации о подписках на службы абонента
SELECT("SELECT * FROM SI_V_SUBJ_SERVICES WHERE N_SUBJ_SERV_TYPE_ID = SYS_CONTEXT('CONST','SUBJ_SERV_ServiceUse') AND N_SUBJECT_ID = <num_N_USER_ID>")
num_N_USER_ID
— идентификатор абонента
Получение информации о подписке на службу
SELECT("SELECT * FROM SI_V_SUBJ_SERVICES WHERE N_SUBJ_SERV_TYPE_ID = SYS_CONTEXT('CONST','SUBJ_SERV_ServiceUse') AND N_SUBJ_SERV_ID = <num_N_SUBJ_SERV_ID>")
num_N_SUBJ_SERV_ID
— идентификатор подписки на службу
Редактирование (добавление) подписки на службу
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_PUT({ 'num_N_SUBJ_SERV_ID' => num_N_SUBJ_SERV_ID, 'num_N_SUBJ_SERV_TYPE_ID' => 3066, 'num_N_SUBJECT_ID' => 52480701, 'num_N_SERVICE_ID' => 40176501, 'num_N_OBJECT_ID' => 54154801, 'num_N_AUTH_TYPE_ID' => 1019, 'vch_VC_LOGIN' => 'T0100001', })
num_N_SUBJ_SERV_ID
— идентификатор подписки на службы. Если равенNULL
— производится создание, иначе — редактированиеnum_N_SUBJ_SERV_TYPE_ID
— идентификатор типа привязки к службе (SYS_CONTEXT('CONST', 'SUBJ_SERV_ServiceUse') == 3066)num_N_SUBJECT_ID
— идентификатор абонентаnum_N_SERVICE_ID
— идентификатор сетевой службыnum_N_OBJECT_ID
— идентификатор компонента сетевой службыnum_N_AUTH_TYPE_ID
— идентификатор типа авторизации (SYS_CONTEXT('CONST', 'AUTH_TYPE_LoginPass') == 1019)
Удаление подписки на службу
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_DEL({ 'num_N_SUBJ_SERV_ID' => num_N_SUBJ_SERV_ID, })
num_N_SUBJ_SERV_ID
— идентификатор подписки на службы
Изменение пароля на подписку к службе
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_CHG_PASS({ 'num_N_SUBJ_SERV_ID' => 42231101, 'vch_VC_OLD_PASS' => NULL, 'vch_VC_NEW_PASS' => 'q123', })
num_N_SUBJ_SERV_ID
— идентификатор подписки на службеvch_VC_OLD_PASS
— старый пароль. Для новой подписки — NULLvch_VC_NEW_PASS
— новый пароль
Доступ к приложениям
Получение информации о доступе к приложениям
SELECT("SELECT * FROM SS_V_USERS_APP_BINDS")
Получение информации о доступе к приложениям по абоненту
SELECT("SELECT * FROM SS_V_USERS_APP_BINDS WHERE N_USER_ID = <num_N_USER_ID>")
num_N_USER_ID
— идентификатор абонента
Получение информации о доступе к приложению
SELECT("SELECT * FROM SS_V_USERS_APP_BINDS WHERE N_SUBJ_SERV_ID = <num_N_SUBJ_SERV_ID>")
num_N_SUBJ_SERV_ID
— идентификатор подписки на приложение
Редактирование (добавление) доступа в приложение
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_PUT({ 'num_N_SUBJ_SERV_ID' => num_N_SUBJ_SERV_ID, 'num_N_SUBJ_SERV_TYPE_ID' => 3066, 'num_N_SUBJECT_ID' => 52480701, 'num_N_SERVICE_ID' => 1005, 'num_N_AUTH_TYPE_ID' => 1019, 'vch_VC_LOGIN' => 'uralsky', })
num_N_SUBJ_SERV_ID
— идентификатор подписки на приложение. Если равенNULL
— производится создание, иначе — редактированиеnum_N_SUBJ_SERV_TYPE_ID
— идентификатор типа привязки к приложению (SYS_CONTEXT('CONST', 'SUBJ_SERV_AppAccess') == 1066)num_N_SUBJECT_ID
— идентификатор абонентаnum_N_SERVICE_ID
— идентификатор приложения (выборка из SS_V_AVAILABLE_SERV_APPS, АРМ Личный кабинет пользователя — 1005)num_N_AUTH_TYPE_ID
— идентификатор типа авторизации (SYS_CONTEXT('CONST', 'AUTH_TYPE_LoginPass') == 1019)
Удаление доступа к приложению
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_DEL({ 'num_N_SUBJ_SERV_ID' => num_N_SUBJ_SERV_ID, })
num_N_SUBJ_SERV_ID
— идентификатор подписки на приложение
Изменение пароля на доступ к приложению
SI_SUBJECTS_PKG.SI_SUBJ_SERVICES_CHG_PASS({ 'num_N_SUBJ_SERV_ID' => 42231101, 'vch_VC_OLD_PASS' => NULL, 'vch_VC_NEW_PASS' => 'q123', })
num_N_SUBJ_SERV_ID
— идентификатор подписки на приложениеvch_VC_OLD_PASS
— старый пароль. Для новой подписки — NULLvch_VC_NEW_PASS
— новый пароль