midrange.com code scratchpad
Name:
Rick Chevalier
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
10/04/2011 10:02:17 pm
IP:
Logged
Description:
XML Toolkit is concatenating XML schemas on multiple calls.
Code:
  1.      p WriteECEAudit   b
  2.      d WriteECEAudit   pi
  3.      d  LetterID                           Like(IS3905UIEntryDS_t.LetterID)
  4.      d                                     Const
  5.  
  6.       // Pointer to DOMException return area.  Monitor this area for
  7.       // return codes indicating incorrect/unsuccessful apis
  8.      dDomExcDta@       s               *   INZ(%ADDR(Qxml_DOMEXCDATA))
  9.  
  10.       // Pointers used by the DOM parser
  11.      d DomImpl@        s               *
  12.      d DomDoct@        s               *
  13.      d RootElem@       s               *
  14.      d RootElem        s           1024a   Based(RootElem@)
  15.      d myDomDoc@       s               *
  16.      d myDomDoc        s           1024a   Based(myDomDoc@)
  17.      d DomNodeList@    s               *
  18.      d newAttr@        s               *
  19.      d lenAttr         s             10i 0
  20.      d TextBuf         s           1024a
  21.      d TextBuf@        s               *   Inz(%Addr(TextBuf))
  22.      d XMLString1@     s               *
  23.  
  24.       // Parser storage buffer
  25.      d StrgBuf         s           1024a
  26.      d StrgBuf@        s               *   Inz(%Addr(StrgBuf))
  27.  
  28.       // Final XML string
  29.      d XMLOut          s          32767a
  30.  
  31.       // Static audit record values
  32.      d SourceSystem    s             12a   Inz('NCP')
  33.      d TargetSystem    s             12a   Inz('RVI')
  34.  
  35.       // Audit timestamp
  36.      d iSeriesTmsp     ds                  Qualified
  37.      d  TmspIn                         z
  38.      d  Year                          4s 0 Overlay(iSeriesTmsp :1)
  39.      d  Month                         2s 0 Overlay(iSeriesTmsp :6)
  40.      d  Day                           2s 0 Overlay(iSeriesTmsp :9)
  41.      d  Hour                          2s 0 Overlay(iSeriesTmsp :12)
  42.      d  Minute                        2s 0 Overlay(iSeriesTmsp :15)
  43.      d  Second                        2s 0 Overlay(iSeriesTmsp :18)
  44.      d  MiliSecond                    6s 0 Overlay(iSeriesTmsp :21)
  45.  
  46.      d OracleTmsp      ds                  Qualified
  47.      d  Year                          4s 0
  48.      d  Sep1                          1a   Inz('-')
  49.      d  Month                         2s 0
  50.      d  Sep2                          1a   Inz('-')
  51.      d  Day                           2s 0
  52.      d  Sep3                          1a   Inz('T')
  53.      d  Hour                          2s 0
  54.      d  Sep4                          1a   Inz(':')
  55.      d  Minute                        2s 0
  56.      d  Sep5                          1a   Inz(':')
  57.      d  Second                        2s 0
  58.      d  Sep6                          1a   Inz('.')
  59.      d  MiliSecond                    6s 0
  60.      d  ExtraMiliSec                  1a   Inz('0')
  61.      d  GMTOffset                     6a   Inz('-06:00')
  62.  
  63.       /Free
  64.  
  65.         // Create a Document Implementation
  66.         QxmlInit(DomExcDta@);
  67.         DomImpl@ = QxmlDOMImplementation_getImplementation();
  68.         DomDoct@ = QxmlDOMDocumentType_null;
  69.  
  70.         // Create a Null Terminated String for Root
  71.         %Str(StrgBuf@ :%Size(StrgBuf)) = 'Audit';
  72.         myDomDoc@ = QxmlDOMImplementation_createDocument(DomImpl@
  73.                    :XMLString1@ :Qxml_UNICODE :0 :StrgBuf@
  74.                    :Qxml_CHARSTR :0 :DomDoct@);
  75.  
  76.         // Clean up objects no longer needed
  77.         QxmlDOMImplementation_delete(DomImpl@);
  78.         QxmlDOMDOCUMENTTYPE_delete(DomDoct@);
  79.  
  80.         // Retrieve the root element to append additional elements
  81.         RootElem@ = QxmlDOMDocument_getDocumentElement(myDomDoc@);
  82.  
  83.         // Add letter ID attribute
  84.         %Str(strgbuf@ :%Size(StrgBuf)) = 'letterID' + x'00';
  85.         lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf)));
  86.         newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr);
  87.         %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(LetterID) + x'00';
  88.         QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0
  89.                                    :textbuf@ :Qxml_CHARSTR :0);
  90.  
  91.         // Add source system attribute
  92.         %Str(strgbuf@ :%Size(StrgBuf)) = 'sourceSystem' + x'00';
  93.         lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf)));
  94.         newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr);
  95.         %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(SourceSystem) + x'00';
  96.         QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0
  97.                                    :textbuf@ :Qxml_CHARSTR :0);
  98.  
  99.         // Add target system attribute
  100.         %Str(strgbuf@ :%Size(StrgBuf)) = 'targetSystem' + x'00';
  101.         lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf)));
  102.         newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr);
  103.         %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(TargetSystem) + x'00';
  104.         QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0
  105.                                    :textbuf@ :Qxml_CHARSTR :0);
  106.  
  107.         // Add audit date attribute
  108.         iSeriesTmsp.TmspIn = %TimeStamp();
  109.         Eval-Corr OracleTmsp = iSeriesTmsp;
  110.         %Str(strgbuf@ :%Size(StrgBuf)) = 'auditDate' + x'00';
  111.         lenAttr = %Len(%Str(StrgBuf@ :%Size(StrgBuf)));
  112.         newAttr@ = QxmlTranscodeToUNICODE(strgbuf@ :Qxml_CHARSTR :lenAttr);
  113.         %Str(TextBuf@ :%Size(TextBuf)) = %TrimR(OracleTmsp) + x'00';
  114.         QxmlDOMElement_setAttribute(RootElem@ :newAttr@ :Qxml_UNICODE :0
  115.                                    :textbuf@ :Qxml_CHARSTR :0);
  116.  
  117.         // Verify document by getting all elements by tag name
  118.         %str(strgbuf@:512)='*';
  119.         DomNodeList@ = QxmlDOMDocument_getElementsByTagName(
  120.                   myDomDoc@ : strgbuf@ : Qxml_CHARSTR : 0 );
  121.  
  122.         // Clean up tags no longer used
  123.         QxmlDOMElement_delete(RootElem@);
  124.  
  125.         // Verify that the elements are all there
  126.         If QxmlDOMNodeList_getLength(DomNodeList@) < 1;
  127.           // Error creating the XML
  128.           QxmlDOMNodeList_delete(DomNodeList@);
  129.  
  130.         // If XML is OK then add to queue
  131.         Else;
  132.           QxmlDOMNodeList_delete(DomNodeList@);
  133.           XMLOut = %Trim(OutXMLDocument(myDomDoc@));
  134.           PlaceOnQueue(XMLOut);
  135.         Endif;
  136.  
  137.         // End XML Environment
  138.         QxmlDOMDocument_delete(myDomDoc@);
  139.         QxmlDOMImplementation_delete(DomImpl@);
  140.         QxmlTerm();
  141.  
  142.       /End-Free
  143.  
  144.      p WriteECEAudit   e 
© 2004-2019 by midrange.com generated in 0.008s valid xhtml & css