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

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

View File

@ -140,8 +140,11 @@ create or replace package body UDO_PKG_EXS_INV as
STAG_DISTANCETOSTORAGE constant varchar2(40) := 'DistanceToStorage';
STAG_FAULT constant varchar2(40) := 'Fault';
STAG_DETAIL constant varchar2(40) := 'detail';
STAG_MESSAGE constant varchar2(40) := 'Message';
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,48 +1571,70 @@ 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;
/* Îáðàáàòûâàåì ìåñòîíàõîæäåíèå */
PROCESS_DICPLACE(NCOMPANY => RELINVENTORY.COMPANY,
NIS_NEW => NREQ_STORAGE_ISNEW,
SMNEMO => SREQ_STORAGE_MNEMOCODE,
SNAME => SREQ_STORAGE_NAME,
SBARCODE => SREQ_STORAGE_CODE,
SADDR_POSTCODE => SREQ_STORAGE_POSTCODE,
SADDR_COUNTRY => SREQ_STORAGE_COUNTRY,
SADDR_REGION => SREQ_STORAGE_REGION,
SADDR_LOCALITY => SREQ_STORAGE_LOCALITY,
SADDR_STREET => SREQ_STORAGE_STREET,
SADDR_HOUSE => SREQ_STORAGE_HOUSE,
SLATITUDE => SREQ_STORAGE_LATITUDE,
SLONGITUDE => SREQ_STORAGE_LONGITUDE,
SDICPLACE_BARCODE => SDICPLACE_BARCODE);
/* Îáðàáàòûâàåì ÎÑ */
PROCESS_INVENTORY(RELINVENTORY => RELINVENTORY,
SBARCODE => SREQ_ITEM_CODE,
SINV_NUMBER => SREQ_ITEM_NUMBER,
NELINVOBJECT => NELINVOBJECT);
/* Îáðàáàòûâàåì ýëåìåíò âåäîìîñòè */
PROCESS_ELINVOBJECT(RELINVENTORY => RELINVENTORY,
NELINVOBJECT => NELINVOBJECT,
NINVPERSONS => NREQ_USER_CODE,
DINV_DATE => DREQ_ITEM_CHECKDATE,
SBARCODE => SDICPLACE_BARCODE,
SITEM_COMMENT => SREQ_ITEM_COMMENT,
NITEM_DISTANCE => NREQ_ITEM_DISTANCE,
SITEM_LATITUDE => SREQ_ITEM_LATITUDE,
SITEM_LONGITUDE => SREQ_ITEM_LONGITUDE,
NITEM_QUANTITY => NREQ_ITEM_QUANTITY);
begin
PROCESS_DICPLACE(NCOMPANY => RELINVENTORY.COMPANY,
NIS_NEW => NREQ_STORAGE_ISNEW,
SMNEMO => SREQ_STORAGE_MNEMOCODE,
SNAME => SREQ_STORAGE_NAME,
SBARCODE => SREQ_STORAGE_CODE,
SADDR_POSTCODE => SREQ_STORAGE_POSTCODE,
SADDR_COUNTRY => SREQ_STORAGE_COUNTRY,
SADDR_REGION => SREQ_STORAGE_REGION,
SADDR_LOCALITY => SREQ_STORAGE_LOCALITY,
SADDR_STREET => SREQ_STORAGE_STREET,
SADDR_HOUSE => SREQ_STORAGE_HOUSE,
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,
SINV_NUMBER => SREQ_ITEM_NUMBER,
NELINVOBJECT => NELINVOBJECT);
/* Îáðàáàòûâàåì ýëåìåíò âåäîìîñòè */
PROCESS_ELINVOBJECT(RELINVENTORY => RELINVENTORY,
NELINVOBJECT => NELINVOBJECT,
NINVPERSONS => NREQ_USER_CODE,
DINV_DATE => DREQ_ITEM_CHECKDATE,
SBARCODE => SDICPLACE_BARCODE,
SITEM_COMMENT => SREQ_ITEM_COMMENT,
NITEM_DISTANCE => NREQ_ITEM_DISTANCE,
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;
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_SAVESHEETITEMRSPNS, SNS => SNS_TSD);
/* Ôîðìèðóåì ðåçóëüòàò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_RESULT, SNS => SNS_TSD, SVAL => 'true');
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
/* Åñëè îøèáîê íåò - âîçâðàùàåì ïîëîæèòåëüíûé îòâåò */
if ((SERR_ELINVOBJECT is null) and (SERR_DICPLACE is null)) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_SAVESHEETITEMRSPNS, SNS => SNS_TSD);
/* Ôîðìèðóåì ðåçóëüòàò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => STAG_RESULT, SNS => SNS_TSD, SVAL => 'true');
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;