p WriteECEAudit b d WriteECEAudit pi d LetterID Like(IS3905UIEntryDS_t.LetterID) d Const // Pointer to DOMException return area. Monitor this area for // return codes indicating incorrect/unsuccessful apis dDomExcDta@ s * INZ(%ADDR(Qxml_DOMEXCDATA)) // Pointers used by the DOM parser d DomImpl@ s * d DomDoct@ s * d RootElem@ s * d RootElem s 1024a Based(RootElem@) d myDomDoc@ s * d myDomDoc s 1024a Based(myDomDoc@) d DomNodeList@ s * d newAttr@ s * d lenAttr s 10i 0 d TextBuf s 1024a d TextBuf@ s * Inz(%Addr(TextBuf)) d XMLString1@ s * // Parser storage buffer d StrgBuf s 1024a d StrgBuf@ s * Inz(%Addr(StrgBuf)) // Final XML string d XMLOut s 32767a // Static audit record values d SourceSystem s 12a Inz('NCP') d TargetSystem s 12a Inz('RVI') // Audit timestamp d iSeriesTmsp ds Qualified d TmspIn z d Year 4s 0 Overlay(iSeriesTmsp :1) d Month 2s 0 Overlay(iSeriesTmsp :6) d Day 2s 0 Overlay(iSeriesTmsp :9) d Hour 2s 0 Overlay(iSeriesTmsp :12) d Minute 2s 0 Overlay(iSeriesTmsp :15) d Second 2s 0 Overlay(iSeriesTmsp :18) d MiliSecond 6s 0 Overlay(iSeriesTmsp :21) d OracleTmsp ds Qualified d Year 4s 0 d Sep1 1a Inz('-') d Month 2s 0 d Sep2 1a Inz('-') d Day 2s 0 d Sep3 1a Inz('T') d Hour 2s 0 d Sep4 1a Inz(':') d Minute 2s 0 d Sep5 1a Inz(':') d Second 2s 0 d Sep6 1a Inz('.') d MiliSecond 6s 0 d ExtraMiliSec 1a Inz('0') d GMTOffset 6a Inz('-06:00') /Free // Create a Document Implementation QxmlInit(DomExcDta@); DomImpl@ = QxmlDOMImplementation_getImplementation(); DomDoct@ = QxmlDOMDocumentType_null; // Create a Null Terminated String for Root %Str(StrgBuf@ :%Size(StrgBuf)) = 'Audit'; myDomDoc@ = QxmlDOMImplementation_createDocument(DomImpl@ :XMLString1@ :Qxml_UNICODE :0 :StrgBuf@ :Qxml_CHARSTR :0 :DomDoct@); // Clean up objects no longer needed QxmlDOMImplementation_delete(DomImpl@); QxmlDOMDOCUMENTTYPE_delete(DomDoct@); // Retrieve the root element to append additional elements RootElem@ = QxmlDOMDocument_getDocumentElement(myDomDoc@); // Add letter ID attribute %Str(strgbuf@ :%Size(StrgBuf)) = 'letterID' + x'00'; lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf))); newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr); %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(LetterID) + x'00'; QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0 :textbuf@ :Qxml_CHARSTR :0); // Add source system attribute %Str(strgbuf@ :%Size(StrgBuf)) = 'sourceSystem' + x'00'; lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf))); newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr); %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(SourceSystem) + x'00'; QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0 :textbuf@ :Qxml_CHARSTR :0); // Add target system attribute %Str(strgbuf@ :%Size(StrgBuf)) = 'targetSystem' + x'00'; lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf))); newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr); %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(TargetSystem) + x'00'; QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0 :textbuf@ :Qxml_CHARSTR :0); // Add audit date attribute iSeriesTmsp.TmspIn = %TimeStamp(); Eval-Corr OracleTmsp = iSeriesTmsp; %Str(strgbuf@ :%Size(StrgBuf)) = 'auditDate' + x'00'; lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf))); newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr); %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(OracleTmsp) + x'00'; QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0 :textbuf@ :Qxml_CHARSTR :0); // Verify document by getting all elements by tag name %str(strgbuf@:512)='*'; DomNodeList@ = QxmlDOMDocument_getElementsByTagName( myDomDoc@ : strgbuf@ : Qxml_CHARSTR : 0 ); // Clean up tags no longer used QxmlDOMElement_delete(RootElem@); // Verify that the elements are all there If QxmlDOMNodeList_getLength(DomNodeList@) < 1; // Error creating the XML QxmlDOMNodeList_delete(DomNodeList@); // If XML is OK then add to queue Else; QxmlDOMNodeList_delete(DomNodeList@); XMLOut = %Trim(OutXMLDocument(myDomDoc@)); PlaceOnQueue(XMLOut); Endif; // End XML Environment QxmlDOMDocument_delete(myDomDoc@); QxmlDOMImplementation_delete(DomImpl@); QxmlTerm(); /End-Free p WriteECEAudit e