Расширение fault-сообщения для SaveItems (отдельное для элемента хранения и местоположения)

This commit is contained in:
Mikhail Chechnev 2019-02-07 20:43:57 +03:00
parent af27405432
commit c0a36a3c4d

View File

@ -141,7 +141,10 @@ create or replace package body UDO_PKG_EXS_INV as
STAG_FAULT constant varchar2(40) := 'Fault';
STAG_DETAIL constant varchar2(40) := 'detail';
STAG_MESSAGE constant varchar2(40) := 'Message';
STAG_STORAGEMESSAGE constant varchar2(40) := 'StorageMessage';
STAG_ITEMMESSAGE constant varchar2(40) := 'ItemMessage';
STAG_ERRORMESSAGE constant varchar2(40) := 'ErrorMessage';
STAG_ERRORMESSAGE_SSITEM constant varchar2(40) := 'ErrorSaveSheetItemMessage';
/* Êîíñòàíòû - òèïû âîçâðàùàåìûõ çíà÷åíèé */
SRESULT_TYPE_MNEMO constant varchar2(40):='MNEMO'; -- Ìíåìîêîä
@ -323,6 +326,39 @@ create or replace package body UDO_PKG_EXS_INV as
return CDATA;
end UTL_CREATEERRORRESPONSE;
/* Ôîðìèðîâàíèå îòâåòà ñ îøèáêîé äëÿ ïðîöåäóðû èìïîðòà ðåçóëüòàòîâ èíâåíòàðèçàöèè */
function UTL_CREATEERRORRESPONSE_SSITEM
(
SMSG_ELINVOBJECT in varchar2, -- Ñîîáùåíèå îá îøèáêå (äëÿ èíâåíòàðíîãî îáúåêòà)
SMSG_DICPLACE in varchar2 -- Ñîîáùåíèå îá îøèáêå (äëÿ ìåñòîíàõîæäåíèÿ)
) return clob -- Ðåçóëüòàò ðàáîòû
is
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
XFAULT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé óçåë
XDETAIL DBMS_XMLDOM.DOMNODE; -- Óçåë äëÿ äåòàëèçàöèè îøèáêè
XERRMSG DBMS_XMLDOM.DOMNODE; -- Óçåë ñ ñîîáùåíèåì îá îøèáêå
XMSG_ELINVOBJECT DBMS_XMLDOM.DOMNODE; -- Óçåë òåêñòîì ñîîáùåíèÿ (äëÿ èíâåíòàðíîãî îáúåêòà)
XMSG_DICPLACE DBMS_XMLDOM.DOMNODE; -- Óçåë òåêñòîì ñîîáùåíèÿ (äëÿ ìåñòîíàõîæäåíèÿ)
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ óçëà
CDATA clob; -- Áóôåð äëÿ ðåçóëüòàòà
begin
/* Ñîçäà¸ì äîêóìåíò äëÿ îòâåòà */
UTL_CREATERESPONSEDOC(XDOC => XDOC);
/* Ñîáèðàåì îøèáêó â îòâåò */
XFAULT := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_FAULT, SNS => SNS_SOAPENV);
XDETAIL := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_DETAIL);
XERRMSG := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ERRORMESSAGE_SSITEM, SNS => SNS_TSD);
XMSG_ELINVOBJECT := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_ITEMMESSAGE, SNS => SNS_TSD, SVAL => SMSG_ELINVOBJECT);
XMSG_DICPLACE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_STORAGEMESSAGE, SNS => SNS_TSD, SVAL => SMSG_DICPLACE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XERRMSG, NEWCHILD => XMSG_ELINVOBJECT);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XERRMSG, NEWCHILD => XMSG_DICPLACE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XDETAIL, NEWCHILD => XERRMSG);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XFAULT, NEWCHILD => XDETAIL);
CDATA := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XFAULT);
/* Âîçâðàùàåì ðåçóëüòàò */
return CDATA;
end UTL_CREATEERRORRESPONSE_SSITEM;
/* Ñ÷èòûâàíèå çíà÷åíèÿ ñòðóêòóðíîãî ýëåìåíòà èç èåðàðõèè àäðåñà ãåîãðàôè÷åñêîãî ïîíÿòèÿ */
function UTL_GEOGRAFY_GET_HIER_ITEM
(
@ -1126,6 +1162,8 @@ create or replace package body UDO_PKG_EXS_INV as
RELINVENTORY ELINVENTORY%rowtype; -- Çàïèñü ìîäèôèöèðóåìîé âåäîìîñòè èíâåíòàðèçàöèè
NELINVOBJECT PKG_STD.TREF; -- Ðåã. íîìåð ïîçèöèè âåäîìîñòè èíâåíòàðèçàöèè
SDICPLACE_BARCODE PKG_STD.TSTRING; -- Øòðèõ-êîä ìåñòîíàõîæäåíèÿ ÎÑ (äëÿ ïîçèöèè âåäîìîñòè èíâåíòàðèçàöèè)
SERR_ELINVOBJECT PKG_STD.TSTRING; -- Áóôåð äëÿ îøèáêè îáðàáîòêè èíâåíòàðíîé êàðòî÷êè
SERR_DICPLACE PKG_STD.TSTRING; -- Áóôåð äëÿ îøèáêè îáðàáîòêè ìåñòîíàõîæäåíèÿ
/* Ïîèñê ãåîãðàôè÷åñêîãî ïîíÿòèÿ ïî ïàðàìåòðàì */
function FIND_GEOGRAFY
@ -1533,6 +1571,7 @@ create or replace package body UDO_PKG_EXS_INV as
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NREQ_SHEET_CODE, SUNIT_TABLE => 'ELINVENTORY');
end;
/* Îáðàáàòûâàåì ìåñòîíàõîæäåíèå */
begin
PROCESS_DICPLACE(NCOMPANY => RELINVENTORY.COMPANY,
NIS_NEW => NREQ_STORAGE_ISNEW,
SMNEMO => SREQ_STORAGE_MNEMOCODE,
@ -1547,6 +1586,13 @@ create or replace package body UDO_PKG_EXS_INV as
SLATITUDE => SREQ_STORAGE_LATITUDE,
SLONGITUDE => SREQ_STORAGE_LONGITUDE,
SDICPLACE_BARCODE => SDICPLACE_BARCODE);
exception
when others then
SERR_DICPLACE := sqlerrm;
end;
/* Åñëè ìåòîíàõîæäåíèå îáðàáîòàíî óñïåøíî */
if (SERR_DICPLACE is null) then
begin
/* Îáðàáàòûâàåì ÎÑ */
PROCESS_INVENTORY(RELINVENTORY => RELINVENTORY,
SBARCODE => SREQ_ITEM_CODE,
@ -1563,9 +1609,18 @@ create or replace package body UDO_PKG_EXS_INV as
SITEM_LATITUDE => SREQ_ITEM_LATITUDE,
SITEM_LONGITUDE => SREQ_ITEM_LONGITUDE,
NITEM_QUANTITY => NREQ_ITEM_QUANTITY);
exception
when others then
SERR_ELINVOBJECT := sqlerrm;
end;
else
SERR_ELINVOBJECT := 'Âîçíèêëè îøèáêè ïðè îáðàáîòêå ìåñòà õðàíåíèÿ';
end if;
else
P_EXCEPTION(0, 'Â çàïðîñå íå óêàçàí èäåíòèôèêàòîð âåäîìîñòè.');
end if;
/* Åñëè îøèáîê íåò - âîçâðàùàåì ïîëîæèòåëüíûé îòâåò */
if ((SERR_ELINVOBJECT is null) and (SERR_DICPLACE is null)) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_SAVESHEETITEMRSPNS, SNS => SNS_TSD);
/* Ôîðìèðóåì ðåçóëüòàò */
@ -1573,8 +1628,13 @@ create or replace package body UDO_PKG_EXS_INV as
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
else
/* Áûëè îøèáêè - âåðí¸ì èõ */
CRESPONSE := UTL_CREATEERRORRESPONSE_SSITEM(SMSG_ELINVOBJECT => UTL_CORRECT_ERR(SERR => SERR_ELINVOBJECT),
SMSG_DICPLACE => UTL_CORRECT_ERR(SERR => SERR_DICPLACE));
end if;
exception
/* Перехватываем возможные ошибки */
/* Ïåðåõâàòûâàåì âîçìîæíûå íåîáðàáîòàííûå ðàíåå îøèáêè */
when others then
CRESPONSE := UTL_CREATEERRORRESPONSE(SMSG => UTL_CORRECT_ERR(SERR => sqlerrm));
end;