Рефакторинг констант, функция проверки идентификатора устройства (временно заблокирована), вынес считывание тела запроса в отдельную унифицированную функцию
This commit is contained in:
parent
c9ef8f21d7
commit
7f584ed3f8
@ -60,66 +60,68 @@ end;
|
|||||||
/
|
/
|
||||||
create or replace package body UDO_PKG_EXS_INV as
|
create or replace package body UDO_PKG_EXS_INV as
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - ïðîñòðàíñòâà èì¸í */
|
||||||
|
SNS_TSD constant varchar2(40) := 'tsd';
|
||||||
|
SNS_SOAPENV constant varchar2(40) := 'soapenv';
|
||||||
|
|
||||||
/* Константы - тэги */
|
/* Константы - тэги */
|
||||||
STSD constant varchar2(40) := 'tsd';
|
STAG_CHECKAUTHRSPNS constant varchar2(40) := 'CheckAuthResponse';
|
||||||
SCHECKAUTHRESPONSE constant varchar2(40) := 'CheckAuthResponse';
|
STAG_GETUSERSRSPNS constant varchar2(40) := 'GetUsersResponse';
|
||||||
SGETUSERSRESPONSE constant varchar2(40) := 'GetUsersResponse';
|
STAG_GETSHEETTYPESRSPNS constant varchar2(40) := 'GetSheetTypesResponse';
|
||||||
SGETSHEETTYPESRESPONSE constant varchar2(40) := 'GetSheetTypesResponse';
|
STAG_GETSHEETSRSPNS constant varchar2(40) := 'GetSheetsResponse';
|
||||||
SGETSHEETSRESPONSE constant varchar2(40) := 'GetSheetsResponse';
|
STAG_GETSTORAGESRSPNS constant varchar2(40) := 'GetStoragesResponse';
|
||||||
SGETSTORAGESRESPONSE constant varchar2(40) := 'GetStoragesResponse';
|
STAG_GETSHEETITEMSRSPNS constant varchar2(40) := 'GetSheetItemsResponse';
|
||||||
SGETSHEETITEMSRESPONSE constant varchar2(40) := 'GetSheetItemsResponse';
|
STAG_SAVESHEETITEMRSPNS constant varchar2(40) := 'SaveSheetItemResponse';
|
||||||
SSAVESHEETITEMRESPONSE constant varchar2(40) := 'SaveSheetItemResponse';
|
STAG_DEVICEID constant varchar2(40) := 'DeviceID';
|
||||||
SDEVICEID constant varchar2(40) := 'DeviceID';
|
STAG_RESULT constant varchar2(40) := 'Result';
|
||||||
SRESULT constant varchar2(40) := 'Result';
|
STAG_ENVELOPE constant varchar2(40) := 'Envelope';
|
||||||
SSOAPENV constant varchar2(40) := 'soapenv';
|
STAG_HEADER constant varchar2(40) := 'Header';
|
||||||
SENVELOPE constant varchar2(40) := 'Envelope';
|
STAG_BODY constant varchar2(40) := 'Body';
|
||||||
SHEADER constant varchar2(40) := 'Header';
|
STAG_ITEM constant varchar2(40) := 'Item';
|
||||||
SBODY constant varchar2(40) := 'Body';
|
STAG_CODE constant varchar2(40) := 'Code';
|
||||||
SITEM constant varchar2(40) := 'Item';
|
STAG_NAME constant varchar2(40) := 'Name';
|
||||||
SCODE constant varchar2(40) := 'Code';
|
STAG_TYPECODE constant varchar2(40) := 'TypeCode';
|
||||||
SNAME constant varchar2(40) := 'Name';
|
STAG_PREFIX constant varchar2(40) := 'Prefix';
|
||||||
STYPECODE constant varchar2(40) := 'TypeCode';
|
STAG_NUMBER constant varchar2(40) := 'Number';
|
||||||
SPREFIX constant varchar2(40) := 'Prefix';
|
STAG_DATE constant varchar2(40) := 'Date';
|
||||||
SNUMBER constant varchar2(40) := 'Number';
|
STAG_SHEETCODE constant varchar2(40) := 'SheetCode';
|
||||||
SDATE constant varchar2(40) := 'Date';
|
STAG_MNEMOCODE constant varchar2(40) := 'MnemoCode';
|
||||||
SSHEETCODE constant varchar2(40) := 'SheetCode';
|
STAG_LATITUDE constant varchar2(40) := 'Latitude';
|
||||||
SMNEMOCODE constant varchar2(40) := 'MnemoCode';
|
STAG_LONGITUDE constant varchar2(40) := 'Longitude';
|
||||||
SLATITUDE constant varchar2(40) := 'Latitude';
|
STAG_POSTCODE constant varchar2(40) := 'Postcode';
|
||||||
SLONGITUDE constant varchar2(40) := 'Longitude';
|
STAG_COUNTRY constant varchar2(40) := 'Country';
|
||||||
SPOSTCODE constant varchar2(40) := 'Postcode';
|
STAG_REGION constant varchar2(40) := 'Region';
|
||||||
SCOUNTRY constant varchar2(40) := 'Country';
|
STAG_LOCALITY constant varchar2(40) := 'Locality';
|
||||||
SREGION constant varchar2(40) := 'Region';
|
STAG_STREET constant varchar2(40) := 'Street';
|
||||||
SLOCALITY constant varchar2(40) := 'Locality';
|
STAG_HOUSENUMBER constant varchar2(40) := 'HouseNumber';
|
||||||
SSTREET constant varchar2(40) := 'Street';
|
STAG_STORAGEMNEMOCODE constant varchar2(40) := 'StorageMnemoCode';
|
||||||
SHOUSENUMBER constant varchar2(40) := 'HouseNumber';
|
STAG_USERCODE constant varchar2(40) := 'UserCode';
|
||||||
SSTORAGEMNEMOCODE constant varchar2(40) := 'StorageMnemoCode';
|
STAG_ITEMCODE constant varchar2(40) := 'ItemCode';
|
||||||
SUSERCODE constant varchar2(40) := 'UserCode';
|
STAG_ITEMNAME constant varchar2(40) := 'ItemName';
|
||||||
SITEMCODE constant varchar2(40) := 'ItemCode';
|
STAG_ITEMMNEMOCODE constant varchar2(40) := 'ItemMnemoCode';
|
||||||
SITEMNAME constant varchar2(40) := 'ItemName';
|
STAG_ITEMNUMBER constant varchar2(40) := 'ItemNumber';
|
||||||
SITEMMNEMOCODE constant varchar2(40) := 'ItemMnemoCode';
|
STAG_QUANTITY constant varchar2(40) := 'Quantity';
|
||||||
SITEMNUMBER constant varchar2(40) := 'ItemNumber';
|
STAG_STORAGEISNEW constant varchar2(40) := 'StorageIsNew';
|
||||||
SQUANTITY constant varchar2(40) := 'Quantity';
|
STAG_STORAGECODE constant varchar2(40) := 'StorageCode';
|
||||||
SSTORAGEISNEW constant varchar2(40) := 'StorageIsNew';
|
STAG_STORAGENAME constant varchar2(40) := 'StorageName';
|
||||||
SSTORAGECODE constant varchar2(40) := 'StorageCode';
|
STAG_STORAGEPOSTCODE constant varchar2(40) := 'StoragePostcode';
|
||||||
SSTORAGENAME constant varchar2(40) := 'StorageName';
|
STAG_STORAGECOUNTRY constant varchar2(40) := 'StorageCountry';
|
||||||
SSTORAGEPOSTCODE constant varchar2(40) := 'StoragePostcode';
|
STAG_STORAGEREGION constant varchar2(40) := 'StorageRegion';
|
||||||
SSTORAGECOUNTRY constant varchar2(40) := 'StorageCountry';
|
STAG_STORAGELOCALITY constant varchar2(40) := 'StorageLocality';
|
||||||
SSTORAGEREGION constant varchar2(40) := 'StorageRegion';
|
STAG_STORAGESTREET constant varchar2(40) := 'StorageStreet';
|
||||||
SSTORAGELOCALITY constant varchar2(40) := 'StorageLocality';
|
STAG_STORAGEHOUSENUMBER constant varchar2(40) := 'StorageHouseNumber';
|
||||||
SSTORAGESTREET constant varchar2(40) := 'StorageStreet';
|
STAG_STORAGELATITUDE constant varchar2(40) := 'StorageLatitude';
|
||||||
SSTORAGEHOUSENUMBER constant varchar2(40) := 'StorageHouseNumber';
|
STAG_STORAGELONGITUDE constant varchar2(40) := 'StorageLongitude';
|
||||||
SSTORAGELATITUDE constant varchar2(40) := 'StorageLatitude';
|
STAG_CHECKDATE constant varchar2(40) := 'CheckDate';
|
||||||
SSTORAGELONGITUDE constant varchar2(40) := 'StorageLongitude';
|
STAG_COMMENT constant varchar2(40) := 'Comment';
|
||||||
SCHECKDATE constant varchar2(40) := 'CheckDate';
|
STAG_DISTANCETOSTORAGE constant varchar2(40) := 'DistanceToStorage';
|
||||||
SCOMMENT constant varchar2(40) := 'Comment';
|
STAG_FLOOR constant varchar2(40) := 'Floor';
|
||||||
SDISTANCETOSTORAGE constant varchar2(40) := 'DistanceToStorage';
|
STAG_ROOM constant varchar2(40) := 'Room';
|
||||||
SFLOOR constant varchar2(40) := 'Floor';
|
STAG_RACK constant varchar2(40) := 'Rack';
|
||||||
SROOM constant varchar2(40) := 'Room';
|
STAG_FAULT constant varchar2(40) := 'Fault';
|
||||||
SRACK constant varchar2(40) := 'Rack';
|
STAG_DETAIL constant varchar2(40) := 'detail';
|
||||||
SFAULT constant varchar2(40) := 'Fault';
|
STAG_MESSAGE constant varchar2(40) := 'Message';
|
||||||
SDETAIL constant varchar2(40) := 'detail';
|
STAG_ERRORMESSAGE constant varchar2(40) := 'ErrorMessage';
|
||||||
SMESSAGE constant varchar2(40) := 'Message';
|
|
||||||
SERRORMESSAGE constant varchar2(40) := 'ErrorMessage';
|
|
||||||
|
|
||||||
/* Нормализация сообщения об ошибке */
|
/* Нормализация сообщения об ошибке */
|
||||||
function UTL_CORRECT_ERR
|
function UTL_CORRECT_ERR
|
||||||
@ -136,19 +138,11 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
STMP := SERR;
|
STMP := SERR;
|
||||||
/* Удаляем лишние спецсимволы и техническую информацию из ошибки */
|
/* Удаляем лишние спецсимволы и техническую информацию из ошибки */
|
||||||
begin
|
begin
|
||||||
while (INSTR(STMP
|
while (INSTR(STMP, 'ORA') <> 0)
|
||||||
,'ORA') <> 0)
|
|
||||||
loop
|
loop
|
||||||
NB := INSTR(STMP
|
NB := INSTR(STMP, 'ORA');
|
||||||
,'ORA');
|
NE := INSTR(STMP, ':', NB);
|
||||||
NE := INSTR(STMP
|
STMP := trim(replace(STMP, trim(SUBSTR(STMP, NB, NE - NB + 1)), ''));
|
||||||
,':'
|
|
||||||
,NB);
|
|
||||||
STMP := trim(replace(STMP
|
|
||||||
,trim(SUBSTR(STMP
|
|
||||||
,NB
|
|
||||||
,NE - NB + 1))
|
|
||||||
,''));
|
|
||||||
end loop;
|
end loop;
|
||||||
SRES := STMP;
|
SRES := STMP;
|
||||||
exception
|
exception
|
||||||
@ -251,7 +245,7 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
/* Подготовим документ */
|
/* Подготовим документ */
|
||||||
XMAIN_NODE := DBMS_XMLDOM.MAKENODE(DOC => XDOC);
|
XMAIN_NODE := DBMS_XMLDOM.MAKENODE(DOC => XDOC);
|
||||||
/* Обернём его в конверт */
|
/* Обернём его в конверт */
|
||||||
XENVELOPE_EL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => SENVELOPE, NS => SSOAPENV);
|
XENVELOPE_EL := DBMS_XMLDOM.CREATEELEMENT(DOC => XDOC, TAGNAME => STAG_ENVELOPE, NS => SNS_SOAPENV);
|
||||||
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
DBMS_XMLDOM.SETATTRIBUTE(ELEM => XENVELOPE_EL,
|
||||||
name => 'xmlns:soapenv',
|
name => 'xmlns:soapenv',
|
||||||
NEWVALUE => 'http://schemas.xmlsoap.org/soap/envelope/');
|
NEWVALUE => 'http://schemas.xmlsoap.org/soap/envelope/');
|
||||||
@ -259,13 +253,13 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
name => 'xmlns:tsd',
|
name => 'xmlns:tsd',
|
||||||
NEWVALUE => 'http://www.example.org/TSDService/');
|
NEWVALUE => 'http://www.example.org/TSDService/');
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => XENVELOPE_EL);
|
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => XENVELOPE_EL);
|
||||||
DBMS_XMLDOM.SETPREFIX(N => XENVELOPE, PREFIX => SSOAPENV);
|
DBMS_XMLDOM.SETPREFIX(N => XENVELOPE, PREFIX => SNS_SOAPENV);
|
||||||
XENVELOPE := DBMS_XMLDOM.APPENDCHILD(N => XMAIN_NODE, NEWCHILD => XENVELOPE);
|
XENVELOPE := DBMS_XMLDOM.APPENDCHILD(N => XMAIN_NODE, NEWCHILD => XENVELOPE);
|
||||||
/* Сформируем заголовок */
|
/* Сформируем заголовок */
|
||||||
XHEADER := UTL_CREATENODE(XDOC => XDOC, STAG => SHEADER, SNS => SSOAPENV);
|
XHEADER := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_HEADER, SNS => SNS_SOAPENV);
|
||||||
XHEADER := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XHEADER);
|
XHEADER := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XHEADER);
|
||||||
/* Сформируем тело */
|
/* Сформируем тело */
|
||||||
XBODY := UTL_CREATENODE(XDOC => XDOC, STAG => SBODY, SNS => SSOAPENV);
|
XBODY := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_BODY, SNS => SNS_SOAPENV);
|
||||||
XBODY := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XBODY);
|
XBODY := DBMS_XMLDOM.APPENDCHILD(N => XENVELOPE, NEWCHILD => XBODY);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XBODY, NEWCHILD => XCONTENT);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XBODY, NEWCHILD => XCONTENT);
|
||||||
/* Конвертируем в CLOB */
|
/* Конвертируем в CLOB */
|
||||||
@ -293,10 +287,10 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
/* Создаём документ для ответа */
|
/* Создаём документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Собираем ошибку в ответ */
|
/* Собираем ошибку в ответ */
|
||||||
XFAULT := UTL_CREATENODE(XDOC => XDOC, STAG => SFAULT, SNS => SSOAPENV);
|
XFAULT := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_FAULT, SNS => SNS_SOAPENV);
|
||||||
XDETAIL := UTL_CREATENODE(XDOC => XDOC, STAG => SDETAIL);
|
XDETAIL := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_DETAIL);
|
||||||
XERRMSG := UTL_CREATENODE(XDOC => XDOC, STAG => SERRORMESSAGE, SNS => STSD);
|
XERRMSG := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ERRORMESSAGE, SNS => SNS_TSD);
|
||||||
XMSG := UTL_CREATENODE(XDOC => XDOC, STAG => SMESSAGE, SNS => STSD, SVAL => SMSG);
|
XMSG := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_MESSAGE, SNS => SNS_TSD, SVAL => SMSG);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XERRMSG, NEWCHILD => XMSG);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XERRMSG, NEWCHILD => XMSG);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XDETAIL, NEWCHILD => XERRMSG);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XDETAIL, NEWCHILD => XERRMSG);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XFAULT, NEWCHILD => XDETAIL);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XFAULT, NEWCHILD => XDETAIL);
|
||||||
@ -330,27 +324,56 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
return SRES;
|
return SRES;
|
||||||
end UTL_GEOGRAFY_GET_HIER_ITEM;
|
end UTL_GEOGRAFY_GET_HIER_ITEM;
|
||||||
|
|
||||||
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
/* Ïðîâåðêà èäåíòèôèêàòîðà óñòðîéñòâà */
|
||||||
procedure CHECKAUTH
|
procedure UTL_CHECK_DEVICEID
|
||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
SDEVICEID in varchar2 -- Èäåíòèôèêàòîð óñòðîéñòâà
|
||||||
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
)
|
||||||
|
is
|
||||||
|
SLIC_DEVICEIDS LICCTRLSPEC.SERIAL_NO%type; -- Ñïèñîê èäåíòèôèêàòîðîâ óñòðîéñòâ â ëèöåíçèè
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì èäåíòèôèêàòîðû óñòðîéñòâ èç ëèöåíçèè */
|
||||||
|
begin
|
||||||
|
select LS.SERIAL_NO
|
||||||
|
into SLIC_DEVICEIDS
|
||||||
|
from LICCTRL L,
|
||||||
|
LICCTRLSPEC LS
|
||||||
|
where L.LICENSE_TYPE = 0
|
||||||
|
and L.RN = LS.PRN
|
||||||
|
and LS.APPLICATION = 'Account'
|
||||||
|
and ROWNUM <= 1;
|
||||||
|
exception
|
||||||
|
when NO_DATA_FOUND then
|
||||||
|
SLIC_DEVICEIDS := null;
|
||||||
|
end;
|
||||||
|
/* Åñëè â ñîñòàâå ëèöåíçèè íåò ïåðåäàííîãî èäåíòèôèêàòîðà */
|
||||||
|
if (SLIC_DEVICEIDS like '%' || SDEVICEID || '%') then
|
||||||
|
/*
|
||||||
|
TODO: owner="mikha" created="16.01.2019"
|
||||||
|
text="Âêëþ÷èòü ïðè îòãðóçêå â ðåëèç"
|
||||||
|
*/
|
||||||
|
null;
|
||||||
|
/* Ñêàæåì îá ýòîì */
|
||||||
|
/*P_EXCEPTION(0,
|
||||||
|
'Èäåíòèôèêàòîð óñòðîâéñòâà "%s" íå îïðåäåë¸í â ëèöåíçèè.',
|
||||||
|
SDEVICEID);*/
|
||||||
|
end if;
|
||||||
|
end UTL_CHECK_DEVICEID;
|
||||||
|
|
||||||
|
/* Ïîëó÷åíèå êîðíåâîãî ýëåìåíòà òåëà èç ñîîáùåíèÿ î÷åðåäè îáìåíà */
|
||||||
|
procedure UTL_EXSQUEUE_MSG_GET_BODY_ROOT
|
||||||
|
(
|
||||||
|
NEXSQUEUE in number, -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
XNODE_ROOT out DBMS_XMLDOM.DOMNODE -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди
|
REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди
|
||||||
XCHECKAUTHRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
|
|
||||||
XRESULT DBMS_XMLDOM.DOMNODE; -- Ðåçóëüòàò àóòåíòèôèêàöèè
|
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
|
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Парсер
|
XMLPARCER DBMS_XMLPARSER.PARSER; -- Парсер
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Конверт
|
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Конверт
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Тело документа
|
XBODY DBMS_XMLDOM.DOMNODE; -- Тело документа
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Ветки тела документа
|
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Ветки тела документа
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
|
||||||
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
|
|
||||||
CREQ clob; -- Буфер для запроса
|
CREQ clob; -- Буфер для запроса
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
|
|
||||||
begin
|
|
||||||
begin
|
begin
|
||||||
/* Считаем запись очереди */
|
/* Считаем запись очереди */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
@ -365,26 +388,43 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
/* Считываем корневой элемент */
|
/* Считываем корневой элемент */
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
||||||
/* Считываем элемент тело */
|
/* Считываем элемент тело */
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => STAG_BODY);
|
||||||
/* Считываем дочерние элементы тела */
|
/* Считываем дочерние элементы тела */
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
||||||
/* Берем первый дочерний элемент */
|
/* Берем первый дочерний элемент */
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
||||||
|
end UTL_EXSQUEUE_MSG_GET_BODY_ROOT;
|
||||||
|
|
||||||
|
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
|
||||||
|
procedure CHECKAUTH
|
||||||
|
(
|
||||||
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
|
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
XCHECKAUTHRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
|
||||||
|
XRESULT DBMS_XMLDOM.DOMNODE; -- Ðåçóëüòàò àóòåíòèôèêàöèè
|
||||||
|
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
|
||||||
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
|
||||||
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
||||||
|
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
|
||||||
|
SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
|
||||||
|
begin
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Т.к. пока проверок нет никаких - всегда возвращаем положительный ответ */
|
/* Т.к. пока проверок нет никаких - всегда возвращаем положительный ответ */
|
||||||
XCHECKAUTHRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SCHECKAUTHRESPONSE, SNS => STSD);
|
XCHECKAUTHRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_CHECKAUTHRSPNS, SNS => SNS_TSD);
|
||||||
XRESULT := UTL_CREATENODE(XDOC => XDOC, STAG => SRESULT, SNS => STSD, SVAL => 'true');
|
XRESULT := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_RESULT, SNS => SNS_TSD, SVAL => 'true');
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XCHECKAUTHRESPONSE, NEWCHILD => XRESULT);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XCHECKAUTHRESPONSE, NEWCHILD => XRESULT);
|
||||||
/* Оборачиваем его в конверт */
|
/* Оборачиваем его в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XCHECKAUTHRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XCHECKAUTHRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -407,51 +447,27 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XGETUSERSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XGETUSERSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
XCODE DBMS_XMLDOM.DOMNODE; -- Код элемента ответного списка
|
XCODE DBMS_XMLDOM.DOMNODE; -- Код элемента ответного списка
|
||||||
XNAME DBMS_XMLDOM.DOMNODE; -- Нименование элемента ответного списка
|
XNAME DBMS_XMLDOM.DOMNODE; -- Нименование элемента ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XGETUSERSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETUSERSRESPONSE, SNS => STSD);
|
XGETUSERSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_GETUSERSRSPNS, SNS => SNS_TSD);
|
||||||
/* Обходим сотрудников-инвентаризаторов */
|
/* Обходим сотрудников-инвентаризаторов */
|
||||||
for REC in (select T.RN,
|
for REC in (select T.RN,
|
||||||
A.AGNABBR
|
A.AGNABBR
|
||||||
@ -461,16 +477,15 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
and T.AGNLIST = A.RN)
|
and T.AGNLIST = A.RN)
|
||||||
loop
|
loop
|
||||||
/* Собираем информацию по сотруднику в ответ */
|
/* Собираем информацию по сотруднику в ответ */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEM, SNS => SNS_TSD);
|
||||||
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.RN);
|
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_CODE, SNS => SNS_TSD, SVAL => REC.RN);
|
||||||
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SNAME, SNS => STSD, SVAL => REC.AGNABBR);
|
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_NAME, SNS => SNS_TSD, SVAL => REC.AGNABBR);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETUSERSRESPONSE, NEWCHILD => XITEM);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETUSERSRESPONSE, NEWCHILD => XITEM);
|
||||||
end loop;
|
end loop;
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETUSERSRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETUSERSRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -493,51 +508,27 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XGETSHEETTYPESRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XGETSHEETTYPESRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
XCODE DBMS_XMLDOM.DOMNODE; -- Код элемента ответного списка
|
XCODE DBMS_XMLDOM.DOMNODE; -- Код элемента ответного списка
|
||||||
XNAME DBMS_XMLDOM.DOMNODE; -- Нименование элемента ответного списка
|
XNAME DBMS_XMLDOM.DOMNODE; -- Нименование элемента ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XGETSHEETTYPESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETTYPESRESPONSE, SNS => STSD);
|
XGETSHEETTYPESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_GETSHEETTYPESRSPNS, SNS => SNS_TSD);
|
||||||
/* Обходим типы документов связанные с разделом "Электронные инвентаризации" */
|
/* Обходим типы документов связанные с разделом "Электронные инвентаризации" */
|
||||||
for REC in (select T.RN,
|
for REC in (select T.RN,
|
||||||
T.DOCCODE
|
T.DOCCODE
|
||||||
@ -549,16 +540,15 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
order by T.DOCCODE)
|
order by T.DOCCODE)
|
||||||
loop
|
loop
|
||||||
/* Собираем информацию по типу документа в ответ */
|
/* Собираем информацию по типу документа в ответ */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEM, SNS => SNS_TSD);
|
||||||
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.RN);
|
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_CODE, SNS => SNS_TSD, SVAL => REC.RN);
|
||||||
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SNAME, SNS => STSD, SVAL => REC.DOCCODE);
|
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_NAME, SNS => SNS_TSD, SVAL => REC.DOCCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETSHEETTYPESRESPONSE, NEWCHILD => XITEM);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETSHEETTYPESRESPONSE, NEWCHILD => XITEM);
|
||||||
end loop;
|
end loop;
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETTYPESRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETTYPESRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -581,7 +571,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XGETSHEETSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XGETSHEETSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
@ -592,13 +581,8 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
XNUMBER DBMS_XMLDOM.DOMNODE; -- Номер ведомости элемента ответного списка
|
XNUMBER DBMS_XMLDOM.DOMNODE; -- Номер ведомости элемента ответного списка
|
||||||
XDATE DBMS_XMLDOM.DOMNODE; -- Дата ведомости элемента ответного списка
|
XDATE DBMS_XMLDOM.DOMNODE; -- Дата ведомости элемента ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
NREQTYPECODE PKG_STD.TREF; -- Тип ведомости из запроса (параметр отбора)
|
NREQTYPECODE PKG_STD.TREF; -- Тип ведомости из запроса (параметр отбора)
|
||||||
SREQPREFIX PKG_STD.TSTRING; -- Префикс ведомости из запроса (параметр отбора)
|
SREQPREFIX PKG_STD.TSTRING; -- Префикс ведомости из запроса (параметр отбора)
|
||||||
@ -606,42 +590,24 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
DREQDATE PKG_STD.TLDATE; -- Дата ведомости из запроса (параметр отбора)
|
DREQDATE PKG_STD.TLDATE; -- Дата ведомости из запроса (параметр отбора)
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Считываем "Тип ведомости" (параметр отбора) */
|
/* Считываем "Тип ведомости" (параметр отбора) */
|
||||||
NREQTYPECODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STYPECODE));
|
NREQTYPECODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_TYPECODE));
|
||||||
/* Считываем "Префикс" (параметр отбора) */
|
/* Считываем "Префикс" (параметр отбора) */
|
||||||
SREQPREFIX := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SPREFIX);
|
SREQPREFIX := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_PREFIX);
|
||||||
/* Считываем "Номер" (параметр отбора) */
|
/* Считываем "Номер" (параметр отбора) */
|
||||||
SREQNUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SNUMBER);
|
SREQNUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_NUMBER);
|
||||||
/* Считываем "Дату" (параметр отбора) */
|
/* Считываем "Дату" (параметр отбора) */
|
||||||
DREQDATE := TO_DATE(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDATE), 'YYYY-MM-DD');
|
DREQDATE := TO_DATE(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DATE), 'YYYY-MM-DD');
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XGETSHEETSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETSRESPONSE, SNS => STSD);
|
XGETSHEETSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_GETSHEETSRSPNS, SNS => SNS_TSD);
|
||||||
/* Обходим записи раздела "Электронные инвентаризации" удовлетворяющие условиям отбора */
|
/* Обходим записи раздела "Электронные инвентаризации" удовлетворяющие условиям отбора */
|
||||||
for REC in (select T.RN,
|
for REC in (select T.RN,
|
||||||
T.DOC_TYPE,
|
T.DOC_TYPE,
|
||||||
@ -659,19 +625,19 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
and (DREQDATE is null or (DREQDATE is not null and T.DOC_DATE = DREQDATE)))
|
and (DREQDATE is null or (DREQDATE is not null and T.DOC_DATE = DREQDATE)))
|
||||||
loop
|
loop
|
||||||
/* Собираем информацию по ведомости в ответ */
|
/* Собираем информацию по ведомости в ответ */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEM, SNS => SNS_TSD);
|
||||||
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.RN);
|
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_CODE, SNS => SNS_TSD, SVAL => REC.RN);
|
||||||
XNAME := UTL_CREATENODE(XDOC => XDOC,
|
XNAME := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SNAME,
|
STAG => STAG_NAME,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => REC.DOC_TYPE_CODE || ', ' || REC.DOC_PREF || '-' || REC.DOC_NUMB || ', ' ||
|
SVAL => REC.DOC_TYPE_CODE || ', ' || REC.DOC_PREF || '-' || REC.DOC_NUMB || ', ' ||
|
||||||
TO_CHAR(REC.DOC_DATE, 'dd.mm.yyyy'));
|
TO_CHAR(REC.DOC_DATE, 'dd.mm.yyyy'));
|
||||||
XTYPECODE := UTL_CREATENODE(XDOC => XDOC, STAG => STYPECODE, SNS => STSD, SVAL => REC.DOC_TYPE);
|
XTYPECODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_TYPECODE, SNS => SNS_TSD, SVAL => REC.DOC_TYPE);
|
||||||
XPREFIX := UTL_CREATENODE(XDOC => XDOC, STAG => SPREFIX, SNS => STSD, SVAL => REC.DOC_PREF);
|
XPREFIX := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_PREFIX, SNS => SNS_TSD, SVAL => REC.DOC_PREF);
|
||||||
XNUMBER := UTL_CREATENODE(XDOC => XDOC, STAG => SNUMBER, SNS => STSD, SVAL => REC.DOC_NUMB);
|
XNUMBER := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_NUMBER, SNS => SNS_TSD, SVAL => REC.DOC_NUMB);
|
||||||
XDATE := UTL_CREATENODE(XDOC => XDOC,
|
XDATE := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SDATE,
|
STAG => STAG_DATE,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => TO_CHAR(REC.DOC_DATE, 'yyyy-mm-dd'));
|
SVAL => TO_CHAR(REC.DOC_DATE, 'yyyy-mm-dd'));
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
||||||
@ -683,7 +649,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
end loop;
|
end loop;
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETSRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETSRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -706,7 +671,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XGETSHEETITEMSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XGETSHEETITEMSRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
@ -718,47 +682,24 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
XITEMNUMBER DBMS_XMLDOM.DOMNODE; -- Номер ОС для элемента ответного списка
|
XITEMNUMBER DBMS_XMLDOM.DOMNODE; -- Номер ОС для элемента ответного списка
|
||||||
XQUANTITY DBMS_XMLDOM.DOMNODE; -- Количество ОС для элемента ответного списка
|
XQUANTITY DBMS_XMLDOM.DOMNODE; -- Количество ОС для элемента ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр отбора)
|
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр отбора)
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Считываем "Регистрационный номер ведомости" (параметр отбора) */
|
/* Считываем "Регистрационный номер ведомости" (параметр отбора) */
|
||||||
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
|
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_SHEETCODE));
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XGETSHEETITEMSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETITEMSRESPONSE, SNS => STSD);
|
XGETSHEETITEMSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_GETSHEETITEMSRSPNS, SNS => SNS_TSD);
|
||||||
/* Обходим типы документов связанные с разделом "Электронные инвентаризации" */
|
/* Обходим типы документов связанные с разделом "Электронные инвентаризации" */
|
||||||
for REC in (select T.RN NRN,
|
for REC in (select T.RN NRN,
|
||||||
T.COMPANY NCOMPANY,
|
T.COMPANY NCOMPANY,
|
||||||
@ -795,26 +736,35 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
and I.NOMENCLATURE = N1.RN)
|
and I.NOMENCLATURE = N1.RN)
|
||||||
loop
|
loop
|
||||||
/* Собираем информацию по элементам ведомости в ответ */
|
/* Собираем информацию по элементам ведомости в ответ */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEM, SNS => SNS_TSD);
|
||||||
XSTORAGEMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
|
XSTORAGEMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SSTORAGEMNEMOCODE,
|
STAG => STAG_STORAGEMNEMOCODE,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => REC.SSTORAGEMNEMOCODE);
|
SVAL => REC.SSTORAGEMNEMOCODE);
|
||||||
XUSERCODE := UTL_CREATENODE(XDOC => XDOC,
|
XUSERCODE := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SUSERCODE,
|
STAG => STAG_USERCODE,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => trim(REC.NINVPERSONS));
|
SVAL => trim(REC.NINVPERSONS));
|
||||||
XITEMCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SITEMCODE, SNS => STSD, SVAL => trim(REC.SIBARCODE));
|
XITEMCODE := UTL_CREATENODE(XDOC => XDOC,
|
||||||
XITEMNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SITEMNAME, SNS => STSD, SVAL => trim(REC.SNOM_NAME));
|
STAG => STAG_ITEMCODE,
|
||||||
|
SNS => SNS_TSD,
|
||||||
|
SVAL => trim(REC.SIBARCODE));
|
||||||
|
XITEMNAME := UTL_CREATENODE(XDOC => XDOC,
|
||||||
|
STAG => STAG_ITEMNAME,
|
||||||
|
SNS => SNS_TSD,
|
||||||
|
SVAL => trim(REC.SNOM_NAME));
|
||||||
XITEMMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
|
XITEMMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SITEMMNEMOCODE,
|
STAG => STAG_ITEMMNEMOCODE,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => trim(REC.SNOM_CODE));
|
SVAL => trim(REC.SNOM_CODE));
|
||||||
XITEMNUMBER := UTL_CREATENODE(XDOC => XDOC,
|
XITEMNUMBER := UTL_CREATENODE(XDOC => XDOC,
|
||||||
STAG => SITEMNUMBER,
|
STAG => STAG_ITEMNUMBER,
|
||||||
SNS => STSD,
|
SNS => SNS_TSD,
|
||||||
SVAL => trim(REC.SINV_NUMBER));
|
SVAL => trim(REC.SINV_NUMBER));
|
||||||
XQUANTITY := UTL_CREATENODE(XDOC => XDOC, STAG => SQUANTITY, SNS => STSD, SVAL => REC.SQUANTITY);
|
XQUANTITY := UTL_CREATENODE(XDOC => XDOC,
|
||||||
|
STAG => STAG_QUANTITY,
|
||||||
|
SNS => SNS_TSD,
|
||||||
|
SVAL => REC.SQUANTITY);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XSTORAGEMNEMOCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XSTORAGEMNEMOCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XUSERCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XUSERCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMCODE);
|
||||||
@ -834,7 +784,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
end loop;
|
end loop;
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETITEMSRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETITEMSRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -857,7 +806,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XGETSTORAGESRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XGETSTORAGESRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
@ -873,47 +821,24 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
XSTREET DBMS_XMLDOM.DOMNODE; -- Улица местоположения для элемента ответного списка
|
XSTREET DBMS_XMLDOM.DOMNODE; -- Улица местоположения для элемента ответного списка
|
||||||
XHOUSENUMBER DBMS_XMLDOM.DOMNODE; -- Номер дома местоположения для элемента ответного списка
|
XHOUSENUMBER DBMS_XMLDOM.DOMNODE; -- Номер дома местоположения для элемента ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр отбора)
|
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр отбора)
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Считываем "Регистрационный номер ведомости" (параметр отбора) */
|
/* Считываем "Регистрационный номер ведомости" (параметр отбора) */
|
||||||
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
|
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_SHEETCODE));
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
|
||||||
if (SREQDEVICEID is not null) then
|
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XGETSTORAGESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSTORAGESRESPONSE, SNS => STSD);
|
XGETSTORAGESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_GETSTORAGESRSPNS, SNS => SNS_TSD);
|
||||||
/* Обходим места хранения */
|
/* Обходим места хранения */
|
||||||
for REC in (select T.RN NRN,
|
for REC in (select T.RN NRN,
|
||||||
T.PLACE_MNEMO SMNEMOCODE,
|
T.PLACE_MNEMO SMNEMOCODE,
|
||||||
@ -944,18 +869,21 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
and EO.INVPACK = P.RN(+))))))
|
and EO.INVPACK = P.RN(+))))))
|
||||||
loop
|
loop
|
||||||
/* Собираем информацию по месту хранения в ответ */
|
/* Собираем информацию по месту хранения в ответ */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEM, SNS => SNS_TSD);
|
||||||
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.SBARCODE);
|
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_CODE, SNS => SNS_TSD, SVAL => REC.SBARCODE);
|
||||||
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SNAME, SNS => STSD, SVAL => REC.SNAME);
|
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_NAME, SNS => SNS_TSD, SVAL => REC.SNAME);
|
||||||
XMNEMOCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SMNEMOCODE, SNS => STSD, SVAL => REC.SMNEMOCODE);
|
XMNEMOCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_MNEMOCODE, SNS => SNS_TSD, SVAL => REC.SMNEMOCODE);
|
||||||
XLATITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => SLATITUDE, SNS => STSD, SVAL => REC.SLATITUDE);
|
XLATITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_LATITUDE, SNS => SNS_TSD, SVAL => REC.SLATITUDE);
|
||||||
XLONGITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => SLONGITUDE, SNS => STSD, SVAL => REC.SLONGITUDE);
|
XLONGITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_LONGITUDE, SNS => SNS_TSD, SVAL => REC.SLONGITUDE);
|
||||||
XPOSTCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SPOSTCODE, SNS => STSD, SVAL => REC.SPOSTCODE);
|
XPOSTCODE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_POSTCODE, SNS => SNS_TSD, SVAL => REC.SPOSTCODE);
|
||||||
XCOUNTRY := UTL_CREATENODE(XDOC => XDOC, STAG => SCOUNTRY, SNS => STSD, SVAL => REC.SCOUNTRY);
|
XCOUNTRY := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_COUNTRY, SNS => SNS_TSD, SVAL => REC.SCOUNTRY);
|
||||||
XREGION := UTL_CREATENODE(XDOC => XDOC, STAG => SREGION, SNS => STSD, SVAL => REC.SREGION);
|
XREGION := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_REGION, SNS => SNS_TSD, SVAL => REC.SREGION);
|
||||||
XLOCALITY := UTL_CREATENODE(XDOC => XDOC, STAG => SLOCALITY, SNS => STSD, SVAL => REC.SLOCALITY);
|
XLOCALITY := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_LOCALITY, SNS => SNS_TSD, SVAL => REC.SLOCALITY);
|
||||||
XSTREET := UTL_CREATENODE(XDOC => XDOC, STAG => SSTREET, SNS => STSD, SVAL => REC.SSTREET);
|
XSTREET := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_STREET, SNS => SNS_TSD, SVAL => REC.SSTREET);
|
||||||
XHOUSENUMBER := UTL_CREATENODE(XDOC => XDOC, STAG => SHOUSENUMBER, SNS => STSD, SVAL => REC.SHOUSENUMBER);
|
XHOUSENUMBER := UTL_CREATENODE(XDOC => XDOC,
|
||||||
|
STAG => STAG_HOUSENUMBER,
|
||||||
|
SNS => SNS_TSD,
|
||||||
|
SVAL => REC.SHOUSENUMBER);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XMNEMOCODE);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XMNEMOCODE);
|
||||||
@ -971,7 +899,6 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
end loop;
|
end loop;
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSTORAGESRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSTORAGESRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
@ -994,18 +921,12 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
||||||
XSAVESHEETITEMRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
XSAVESHEETITEMRESPONSE DBMS_XMLDOM.DOMNODE; -- Корневой элемент ответа
|
||||||
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
XNODE DBMS_XMLDOM.DOMNODE; -- Буфер для ветки ответа
|
||||||
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
XITEM DBMS_XMLDOM.DOMNODE; -- Элемент ответного списка
|
||||||
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Документ
|
||||||
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
|
|
||||||
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
|
|
||||||
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
|
|
||||||
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
|
|
||||||
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Корневой элемент первой ветки тела документа
|
||||||
CRESPONSE clob; -- Буфер для ответа
|
CRESPONSE clob; -- Буфер для ответа
|
||||||
CREQ clob; -- Áóôåð äëÿ çàïðîñà
|
|
||||||
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
SREQDEVICEID PKG_STD.TSTRING; -- Идентификатор устройства из запроса
|
||||||
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр сохранения)
|
NREQSHEETCODE PKG_STD.TREF; -- Ведомость из запроса (параметр сохранения)
|
||||||
NREQUSERCODE PKG_STD.TREF; -- Регистрационный номер МОЛ из запроса (параметр сохранения)
|
NREQUSERCODE PKG_STD.TREF; -- Регистрационный номер МОЛ из запроса (параметр сохранения)
|
||||||
@ -1028,8 +949,8 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NREQQUANTITY PKG_STD.TQUANT; -- Количество ОС из запроса (параметр сохранения)
|
NREQQUANTITY PKG_STD.TQUANT; -- Количество ОС из запроса (параметр сохранения)
|
||||||
DREQCHECKDATE PKG_STD.TLDATE; -- Дата проведения инвентаризации ОС из запроса (параметр сохранения)
|
DREQCHECKDATE PKG_STD.TLDATE; -- Дата проведения инвентаризации ОС из запроса (параметр сохранения)
|
||||||
SREQCOMMENT PKG_STD.TLSTRING; -- Комментарий МОЛ ОС из запроса (параметр сохранения)
|
SREQCOMMENT PKG_STD.TLSTRING; -- Комментарий МОЛ ОС из запроса (параметр сохранения)
|
||||||
NREQLATITUDE PKG_STD.TLNUMBER; -- Øèðîòà èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
|
NREQLATITUDE PKG_STD.TLNUMBER; -- Øèðîòà ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
|
||||||
NREQLONGITUDE PKG_STD.TLNUMBER; -- Äîëãîòà èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
|
NREQLONGITUDE PKG_STD.TLNUMBER; -- Äîëãîòà ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
|
||||||
NREQDISTANCETOSTORAGE PKG_STD.TLNUMBER; -- Расстояние до места хранения ОС из запроса (параметр сохранения)
|
NREQDISTANCETOSTORAGE PKG_STD.TLNUMBER; -- Расстояние до места хранения ОС из запроса (параметр сохранения)
|
||||||
SREQFLOOR PKG_STD.TSTRING; -- Этаж расположения ОС из запроса (параметр сохранения)
|
SREQFLOOR PKG_STD.TSTRING; -- Этаж расположения ОС из запроса (параметр сохранения)
|
||||||
SREQROOM PKG_STD.TSTRING; -- Помещение расположения ОС из запроса (параметр сохранения)
|
SREQROOM PKG_STD.TSTRING; -- Помещение расположения ОС из запроса (параметр сохранения)
|
||||||
@ -1046,88 +967,71 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NCOMPANY := 136018;
|
NCOMPANY := 136018;
|
||||||
/* Инициализируем ДС для хранения примечания */
|
/* Инициализируем ДС для хранения примечания */
|
||||||
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, SCODE => 'COMMENT', NRN => NPROPERTY);
|
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, SCODE => 'COMMENT', NRN => NPROPERTY);
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò òåëà ïîñûëêè */
|
||||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
UTL_EXSQUEUE_MSG_GET_BODY_ROOT(NEXSQUEUE => NEXSQUEUE, XNODE_ROOT => XNODE_ROOT);
|
||||||
/* Âîçüìåì òåêñò çàïðîñà */
|
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
|
||||||
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
|
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
|
||||||
/* Ðàçáèðàåì XML èç çàïðîñà */
|
|
||||||
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
|
|
||||||
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
|
|
||||||
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
|
|
||||||
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
|
|
||||||
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
|
|
||||||
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
|
|
||||||
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
|
|
||||||
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
|
|
||||||
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
|
|
||||||
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
|
|
||||||
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
|
|
||||||
/* Считываем идентификатор устройства */
|
/* Считываем идентификатор устройства */
|
||||||
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
|
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DEVICEID);
|
||||||
/* Считываем "Регистрационный номер ведомости" (параметр сохранения) */
|
/* Считываем "Регистрационный номер ведомости" (параметр сохранения) */
|
||||||
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
|
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_SHEETCODE));
|
||||||
/* Считываем "Регистрационный номер МОЛ" (параметр сохранения) */
|
/* Считываем "Регистрационный номер МОЛ" (параметр сохранения) */
|
||||||
NREQUSERCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SUSERCODE));
|
NREQUSERCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_USERCODE));
|
||||||
/* Считываем "Мнемокод места хранения" (параметр сохранения) */
|
/* Считываем "Мнемокод места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGEMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEMNEMOCODE);
|
SREQSTORAGEMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGEMNEMOCODE);
|
||||||
/* Считываем "Признак нового места хранения" (параметр сохранения) */
|
/* Считываем "Признак нового места хранения" (параметр сохранения) */
|
||||||
NREQSTORAGEISNEW := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEISNEW));
|
NREQSTORAGEISNEW := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGEISNEW));
|
||||||
/* Считываем "Штрих-код места хранения" (параметр сохранения) */
|
/* Считываем "Штрих-код места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGECODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGECODE);
|
SREQSTORAGECODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGECODE);
|
||||||
/* Считываем "Наименование места хранения" (параметр сохранения) */
|
/* Считываем "Наименование места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGENAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGENAME);
|
SREQSTORAGENAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGENAME);
|
||||||
/* Считываем "Почтовый индекс места хранения" (параметр сохранения) */
|
/* Считываем "Почтовый индекс места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGEPOSTCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEPOSTCODE);
|
SREQSTORAGEPOSTCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGEPOSTCODE);
|
||||||
/* Считываем "Страна места хранения" (параметр сохранения) */
|
/* Считываем "Страна места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGECOUNTRY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGECOUNTRY);
|
SREQSTORAGECOUNTRY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGECOUNTRY);
|
||||||
/* Считываем "Регион места хранения" (параметр сохранения) */
|
/* Считываем "Регион места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGEREGION := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEREGION);
|
SREQSTORAGEREGION := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGEREGION);
|
||||||
/* Считываем "Населенный пункт места хранения" (параметр сохранения) */
|
/* Считываем "Населенный пункт места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGELOCALITY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELOCALITY);
|
SREQSTORAGELOCALITY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGELOCALITY);
|
||||||
/* Считываем "Улица места хранения" (параметр сохранения) */
|
/* Считываем "Улица места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGESTREET := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGESTREET);
|
SREQSTORAGESTREET := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGESTREET);
|
||||||
/* Считываем "Номер дома места хранения" (параметр сохранения) */
|
/* Считываем "Номер дома места хранения" (параметр сохранения) */
|
||||||
SREQSTORAGEHOUSENUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEHOUSENUMBER);
|
SREQSTORAGEHOUSENUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGEHOUSENUMBER);
|
||||||
/* Считываем "Широта места хранения" (параметр сохранения) */
|
/* Считываем "Широта места хранения" (параметр сохранения) */
|
||||||
NREQSTORAGELATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELATITUDE));
|
NREQSTORAGELATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGELATITUDE));
|
||||||
/* Считываем "Долгота места хранения" (параметр сохранения) */
|
/* Считываем "Долгота места хранения" (параметр сохранения) */
|
||||||
NREQSTORAGELONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELONGITUDE));
|
NREQSTORAGELONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_STORAGELONGITUDE));
|
||||||
/* Считываем "Штрих-код ОС" (параметр сохранения) */
|
/* Считываем "Штрих-код ОС" (параметр сохранения) */
|
||||||
SREQITEMCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMCODE);
|
SREQITEMCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_ITEMCODE);
|
||||||
/* Считываем "Наименование номенклатуры ОС" (параметр сохранения) */
|
/* Считываем "Наименование номенклатуры ОС" (параметр сохранения) */
|
||||||
SREQITEMNAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMNAME);
|
SREQITEMNAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_ITEMNAME);
|
||||||
/* Считываем "Мнемокод номенклатуры ОС" (параметр сохранения) */
|
/* Считываем "Мнемокод номенклатуры ОС" (параметр сохранения) */
|
||||||
SREQITEMMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMMNEMOCODE);
|
SREQITEMMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_ITEMMNEMOCODE);
|
||||||
/* Считываем "Инвентарный номер ОС" (параметр сохранения) */
|
/* Считываем "Инвентарный номер ОС" (параметр сохранения) */
|
||||||
SREQITEMNUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMNUMBER);
|
SREQITEMNUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_ITEMNUMBER);
|
||||||
/* Считываем "Количество ОС" (параметр сохранения) */
|
/* Считываем "Количество ОС" (параметр сохранения) */
|
||||||
NREQQUANTITY := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SQUANTITY));
|
NREQQUANTITY := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_QUANTITY));
|
||||||
/* Считываем "Дата проведения инвентаризации ОС" (параметр сохранения) */
|
/* Считываем "Дата проведения инвентаризации ОС" (параметр сохранения) */
|
||||||
DREQCHECKDATE := TO_DATE(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SCHECKDATE),
|
DREQCHECKDATE := TO_DATE(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_CHECKDATE),
|
||||||
'YYYY-MM-DD"T"HH24:MI:SS');
|
'YYYY-MM-DD"T"HH24:MI:SS');
|
||||||
/* Считываем "Комментарий МОЛ ОС" (параметр сохранения) */
|
/* Считываем "Комментарий МОЛ ОС" (параметр сохранения) */
|
||||||
SREQCOMMENT := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SCOMMENT);
|
SREQCOMMENT := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_COMMENT);
|
||||||
/* Ñ÷èòûâàåì "Øèðîòà" (ïàðàìåòð ñîõðàíåíèÿ) */
|
/* Ñ÷èòûâàåì "Øèðîòà ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
|
||||||
NREQLATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SLATITUDE));
|
NREQLATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_LATITUDE));
|
||||||
/* Ñ÷èòûâàåì "Äîëãîòà" (ïàðàìåòð ñîõðàíåíèÿ) */
|
/* Ñ÷èòûâàåì "Äîëãîòà ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
|
||||||
NREQLONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SLONGITUDE));
|
NREQLONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_LONGITUDE));
|
||||||
/* Считываем "Расстояние до места хранения ОС" (параметр сохранения) */
|
/* Считываем "Расстояние до места хранения ОС" (параметр сохранения) */
|
||||||
NREQDISTANCETOSTORAGE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDISTANCETOSTORAGE));
|
NREQDISTANCETOSTORAGE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_DISTANCETOSTORAGE));
|
||||||
/* Считываем "Этаж расположения ОС" (параметр сохранения) */
|
/* Считываем "Этаж расположения ОС" (параметр сохранения) */
|
||||||
SREQFLOOR := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SFLOOR);
|
SREQFLOOR := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_FLOOR);
|
||||||
/* Считываем "Помещение расположения ОС" (параметр сохранения) */
|
/* Считываем "Помещение расположения ОС" (параметр сохранения) */
|
||||||
SREQROOM := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SROOM);
|
SREQROOM := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_ROOM);
|
||||||
/* Считываем "Стеллаж расположения ОС" (параметр сохранения) */
|
/* Считываем "Стеллаж расположения ОС" (параметр сохранения) */
|
||||||
SREQRACK := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SRACK);
|
SREQRACK := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => STAG_RACK);
|
||||||
/* Контроль индетификатора устройства по лицензии */
|
/* Контроль индетификатора устройства по лицензии */
|
||||||
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
|
UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID);
|
||||||
/* Подготавливаем документ для ответа */
|
/* Подготавливаем документ для ответа */
|
||||||
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
UTL_CREATERESPONSEDOC(XDOC => XDOC);
|
||||||
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
|
/* Ðàáîòàåì òîëüêî åñëè óêàçàí ðåãèñòðàöèîííûé íîìåð âåäîìîñòè */
|
||||||
if (SREQDEVICEID is not null) then
|
if (NREQSHEETCODE is not null) then
|
||||||
if ((NREQSHEETCODE is not null) and (DREQCHECKDATE is not null)) then
|
|
||||||
/*
|
/*
|
||||||
TODO: owner="root" created="14.01.2019"
|
TODO: owner="root" created="14.01.2019"
|
||||||
text="Понять зачем мы это делаем (дальше результаты проверки не идут).
|
text="Понять зачем мы это делаем (дальше результаты проверки не идут).
|
||||||
@ -1192,7 +1096,7 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
P_ELINVOBJECT_BASE_UPDATE(NCOMPANY => C.COMPANY,
|
P_ELINVOBJECT_BASE_UPDATE(NCOMPANY => C.COMPANY,
|
||||||
NRN => C.RN,
|
NRN => C.RN,
|
||||||
DUNLOAD_DATE => C.UNLOAD_DATE,
|
DUNLOAD_DATE => C.UNLOAD_DATE,
|
||||||
DINV_DATE => DREQCHECKDATE,
|
DINV_DATE => NVL(DREQCHECKDATE, sysdate),
|
||||||
NINVPERSONS => NREQUSERCODE,
|
NINVPERSONS => NREQUSERCODE,
|
||||||
SBARCODE => SDICPLACEBARCODE,
|
SBARCODE => SDICPLACEBARCODE,
|
||||||
NIS_LOADED => C.IS_LOADED);
|
NIS_LOADED => C.IS_LOADED);
|
||||||
@ -1224,13 +1128,12 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
/* Создаём пространство имён для ответа */
|
/* Создаём пространство имён для ответа */
|
||||||
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SSAVESHEETITEMRESPONSE, SNS => STSD);
|
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_SAVESHEETITEMRSPNS, SNS => SNS_TSD);
|
||||||
/* Формируем результат */
|
/* Формируем результат */
|
||||||
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SRESULT, SNS => STSD, SVAL => 'true');
|
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_RESULT, SNS => SNS_TSD, SVAL => 'true');
|
||||||
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
|
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
|
||||||
/* Оборачиваем ответ в конверт */
|
/* Оборачиваем ответ в конверт */
|
||||||
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
|
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
|
||||||
end if;
|
|
||||||
exception
|
exception
|
||||||
/* Перехватываем возможные ошибки */
|
/* Перехватываем возможные ошибки */
|
||||||
when others then
|
when others then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user