RPG Writing XML
Before XML-INTO RPG and a database could generate XML documents.
This is an example of an XML document being prepared by an application written in RPG. The XML tags are stored in a database file keyed by trading partner and form. The program reads the records, parsing the tags and scanning for replacement variables.
H/TITLE ** ADM275RP Format 856 XML **
H DEBUG(*YES)
H OPTION(*SRCSTMT : *NODEBUGIO) DFTACTGRP(*NO) ACTGRP('QILE')
H BNDDIR('SOFTCODE')
****************************************************************
* PROGRAM NAME - ADM275RP *
* *
* FUNCTION - This program prepares an ASN for EDI trading *
* partners through FurnishNet. *
* *
* PROGRAMMER - STEVE CROY 05/05/2009 *
****************************************************************
****************************************************************
* MODIFICATION LOG *
* *
* DATE PROGRAMMER DESCRIPTION *
* *
****************************************************************
FGPORTAFL UF E K DISK
FGPORPCFH UF E K DISK
FADMTPDL2 IF E K DISK
FEDPHDRLG IF E K DISK
FEDPDTLLA IF E K DISK
FADMTPCPF IF E K DISK
FADMXMLPF IF E K DISK
FEDP025L3 IF E K DISK
FtermspPF IF E K DISK
FFRCHDESC IF E K DISK
FEDP020l09 IF E K DISK
Fp4010sach iF E K DISK prefix(IN_)
F RENAME(sac:sach)
Fedp915l1 if e K DISK
Fedp850L3 UF E K DISK
FEDPCUSTMl1IF E K DISK
FEDP010 IF E K DISK prefix(C_)
FCMNTPEPF IF E K DISK
FSHPVIAPA IF E K DISK
FADM856PF O F 500 DISK
‚ /copy qrpglesrc,swcmmn_PR
D CheckContact PR
**************************
** Define Data Structures
**************************
D PGMDS ESDS EXTNAME(SWPSTSP)
DSAVREC E DS Extname(ADMXMLPF) INZ PREFIX(S_)
DTAGREC E DS Extname(ADMXMLPF) INZ
D OutRec DS
D DataOut 1 500
D DS
D DESC 1 24
D DESC1 1 12
D DESC2 13 24
D DS
D VNDR# 1 9
D VNDR1 1 3
D VNDR2 4 9
D DS
D DUNS 1 13
D DUNS1 1 9
D STOR2 10 13
**************************
* Define Stand Alone Fields
**************************
*
D ASNMethod S 10a inz('Motor')
D ASNFrtTerms S 10a
D ASNCarrier S 25a
D ASNDays S 10a
DKEYGRP S 48
Dgrpflag S 1 INZ(' ')
D x S 2 0
D y S 2 0
D@huccea S 15
D PO850 S 1
*
D Department S 30a
D MercType S 30a
D intID S 15a
D tradID S 9a
D in_pono S 22a
D discgiven S 4 2
D ThisDate S 8 0
D ThisTime S 6 0
D DataString S 500
D NewValue S 128
d qt s 1a inz(X'7D')
d dqt s 1a inz(X'7F')
D r S 5 0
D UCCEA S 15A
D gotpo S 10A
D wrkpo# S 22A
D XMLVersion s 5S 2 inz(1.0)
D XMLDoc s 3a inz('856')
D XMLHdr s 3a inz('HDR')
D XMLDtl s 3a inz('ITM')
D XMLTot s 3a inz('TOT')
D XMLTagID s 10a
D EndXMLtag s 128a
D upcitm s 10a inz('ITEM')
D upcqlf s 2a inz('UP')
D wrk6 s 6a
** inicators
D Set856Found S n
D ShipToStore S n
D CreateNewASN s n
D ShipViaFound s n
D UseTag s n
D WriteXML s n
** dates
D ASNDate S d
D InvoiceDate S d
D InvoiceDue S d
D DueDate S 8 0
D ItemTotal S 11 2
D ItemsInvoiced S 9 0
D SPInstructions S 74a
D SPIrec S 2 0 inz(33)
D ItemsShipped S 5 0
D ThisVia S 4 0
D PartialShip S 1
D OriginalInv S 8 0
D Work8a S 8a
D pieceID S 20a
D seller S 20a inz('ISOFTWERKS')
D ThisFrame S 10a
** DUNS NUMBERS
DCO1RM2 S 9 INZ('000000000')
DCO2RM2 S 9 INZ('000000001')
DCO3RM2 S 9 INZ('000000002')
DCO4RM2 S 9 INZ('000000003')
DCO5RM2 S 9 INZ('000000004')
DCO6RM2 S 9 INZ('000000005')
d formatXML PR 500
d formatString PR
d NewValue 128
D ADM275RP PR
D p_CMP 2 CONST
D p_OID 8 0 CONST
D ADM275RP PI
D p_CMP 2 CONST
D p_OID 8 0 CONST
*------------------------------*
* MAIN PROCESSING LOOP
*------------------------------*
ThisDate = DateToday() ;
ThisTime = TimeNow() ;
Department = *blanks ;
MercType = *blanks ;
uccea = *blanks ;
Set856Found = *off ;
ShipToStore = *off ;
//*----------------------------------------------------------
//*- Skip invoice if it was not transmitted via EDI.
//*----------------------------------------------------------
CHAIN (p_CMP:p_OID) GPORTAFL;
IF %found(GPORTAFL);
uccea = shpnoh;
IF uccea <> *blanks;
CHAIN (EXW10HOE:uccea) EDPCUSTML1; // find store
ShipToStore = %found(EDPCUSTML1);
ENDIF;
evalr gotpo = cstorz;
wrkpo# = gotpo;
PO850 = 'N';
intid = EXW10HOE;
tradid = EXW10HOE;
CreateNewASN = *off;
CHAIN (compnz:extw1h) EDPHDRLG;
IF %found(EDPHDRLG);
CreateNewASN = *on;
ENDIF;
IF CreateNewASN ;
department = '0' + hdptno;
evalr merctype = hmctyp;
CHAIN (intid:compnz) ADMTPCPF;
CHAIN (compnz:SPIrec:invnoz) CMNTPEPF;
IF %found(CMNTPEPF);
SPInstructions = cmntle;
ELSE;
SPInstructions = '*NONE';
ENDIF;
ThisVia = shpvaz;
CHAIN ThisVia SHPVIAPA;
IF %found(SHPVIAPA);
ShipViaFound = *ON;
ASNDays = exsw1s;
IF ASNDays = *blank;
ASNDays = '2';
ENDIF;
ASNCarrier = shpdss;
IF shpvas = 22;
ASNMethod = *blanks;
ELSE;
ASNMethod = 'Motor';
ENDIF;
SELECT;
WHEN mthpms = 'PP';
ASNFrtTerms = 'PrePaid';
WHEN mthpms = 'CC';
ASNFrtTerms = 'Collect';
OTHER;
ASNFrtTerms = *BLANK;
ENDSL;
ELSE;
ShipViaFound = *off;
ENDIF;
CHAIN compnz EDP010;
CHAIN termsz TERMSPPF;
IF extd3h = 0;
extd3h = ThisDate;
ENDIF;
IF sdateh = 0;
sdateh = ThisDate;
ENDIF;
InvoiceDate = %date(extd3h:*ISO);
InvoiceDue = InvoiceDate + %days(trmda9);
DueDate = %dec(InvoiceDue:*ISO);
ASNDate = %date(ThisDate:*ISO);
ItemsShipped = orqtyz - boqtyz;
//*----------------------------------------------------------
//*- Get header tags: Buyer/seller/ship-to XML tags
//*----------------------------------------------------------
XMLtagID = '856DOC' ;
SETLL (intid:XMLdoc:XMLhdr) ADMTPDL2 ;
DOU %eof(ADMTPDL2) ;
READE ( intid:XMLdoc:XMLhdr) ADMTPDL2 ;
IF not %eof(ADMTPDL2) ;
SETLL (docver:doctag) ADMXMLPF ;
DOU %eof(ADMXMLPF) ;
READE (docver:doctag) ADMXMLPF ;
IF not %eof(ADMXMLPF) ;
UseTag = *ON ;
IF XMLTAG = '810SHPE' ; // Check for Contact
IF xcntnq <> *BLANKS ;
savrec = tagrec ;
CheckContact() ;
tagrec = savrec ;
ENDIF ;
ENDIF ;
IF UseTag;
DataOut = formatXML() ;
IF WriteXML ;
WRITE ADM856PF OutRec ;
ENDIF ;
ENDIF ;
ENDIF ;
ENDDO ;
ENDIF ;
ENDDO ;
//*----------------------------------------------------------
//*- Get detail tags: Read order detail and item tags
//*---------------------------------------------------------- ItemTotal = 0 ;
ItemsInvoiced = 0 ;
SETLL (p_CMP:p_OID) GPORPCFH ;
DOU %eof(GPORPCFH) ;
READE (p_cmp:p_OID) GPORPCFH ;
IF not %eof(GPORPCFH) ;
thisFrame = %char(framec) ;
ItemTotal = ItemTotal + (slprcc * orqtyc) ;
ItemsInvoiced = ItemsInvoiced + orqtyc ;
CHAIN (extw1h:thisFrame:covr1c:
colr1c:covr2c:colr2c) EDPDTLLA ;
CHAIN (tradid:framec:covr1c:
colr1c:covr2c:colr2c) EDP025L3 ;
SETLL ( intid:XMLdoc:XMLdtl) ADMTPDL2 ;
DOU %eof(ADMTPDL2) ;
READE ( intid:XMLdoc:XMLdtl) ADMTPDL2 ;
IF not %eof(ADMTPDL2) ;
SETLL (docver:doctag) ADMXMLPF ;
DOU %eof(ADMXMLPF) ;
READE (docver:doctag) ADMXMLPF ;
IF not %eof(ADMXMLPF) ;
UseTag = *ON ;
IF UseTag ;
DataOut = formatXML() ;
IF WriteXML ;
WRITE ADM856PF OutRec ;
ENDIF ;
ENDIF ;
ENDIF ;
ENDDO ;
ENDIF ;
ENDDO ;
ENDIF ;
ENDDO ;
//*----------------------------------------------------------
//*- Prepare summary tags
//*----------------------------------------------------------
XMLtagID = '856DOC' ;
SETLL ( intid:XMLdoc:XMLtot) ADMTPDL2 ;
DOU %eof(ADMTPDL2) ;
READE ( intid:XMLdoc:XMLtot) ADMTPDL2 ;
IF not %eof(ADMTPDL2) ;
SETLL (docver:doctag) ADMXMLPF ;
DOU %eof(ADMXMLPF) ;
READE (docver:doctag) ADMXMLPF ;
IF not %eof(ADMXMLPF) ;
UseTag = *ON ;
IF UseTag ;
DataOut = formatXML() ;
IF WriteXML ;
WRITE ADM856PF OutRec ;
ENDIF ;
ENDIF ;
ENDIF ;
ENDDO ;
ENDIF ;
ENDDO ;
IF ItemsShipped <> orqtyc ;
PartialShip = 'Y' ;
ELSE ;
PartialShip = 'N' ;
ENDIF ;
ENDIF;
ENDIF;
*INLR = *ON;
RETURN;
*---------------------------------------------------------------------
* Parse the XML Statement
*---------------------------------------------------------------------
p formatXML B
d formatXML PI 500
D e s 3 0
D o s 3 0
D l s 3 0
D x s 3 0
D s s 3 0
D i s 3 0
D workString s 128
D Replacement s 10
D DateValue s 10
D Attribute s 128
D tagEnd s 128
D QuoteString s 1
/free
WriteXML = *ON ;
DataString = *blanks ;
r = %scan('&':xmldta:1) ;
IF r > 0 ;
DataString = %subst(xmldta:1:r-1) ; // get XML
WorkString = %subst(xmldta:r) ;
DOU r = 0 ;
s = %scan(' ':workString) ; // scan for space
l = (s - 1) ;
Replacement = %subst(workString:1:l) ;
NewValue = *blanks ;
SELECT ;
WHEN Replacement = '&NOTUSED' ;
WriteXML = *OFF ; // invoice number
WHEN Replacement = '&ASNREF' ;
NewValue = %trim(%char(invnoz)) ;
WHEN Replacement = '&ASNORD' ;
NewValue = %trim(%char(invnoz)) ;
WHEN Replacement = '&DOCTYP' ;
NewValue = 'Original' ;
WHEN Replacement = '&ASNDTE' ;
NewValue = %editw(ThisDate:' - - ') ;
WHEN Replacement = '&ASNTIM' ;
wrk6 = %editc(ThisTime:'X') ;
NewValue = %subst(wrk6:1:2) + ':' + %subst(wrk6:3:2) +
':' + %subst(wrk6:5:2) ;
WHEN Replacement = '&INVDTE' ;
NewValue = %editw(extd3h:' - - ') ; // invoice date
WHEN Replacement = '&SHPDTE' ;
NewValue = %editw(sdateh:' - - ') ; // ship date
WHEN Replacement = '&PARTNER' ;
NewValue = %trim( intid) ;
//---------------------------------------------------------> Bill to
WHEN Replacement = '&BTNAM' ;
NewValue = %trim(bllnmz) ;
WHEN Replacement = '&BSTORE' ;
NewValue = %trim( intid) ;
WHEN Replacement = '&BYRPO' ;
NewValue = %trim(cstorz) ;
WHEN Replacement = '&REFDTE' ;
NewValue = %editw(hpopdt:' - - ') ;
WHEN Replacement = '&LINE' ;
NewValue = %trim(%char(recnoc)) ;
WHEN Replacement = '&ITEM' ;
NewValue = %trim(dcitem) ;
WHEN Replacement = '&UOM' ;
NewValue = 'Each' ;
WHEN Replacement = '&QTY' ;
NewValue = %trim(%editC(orqtyc:'3')) ;
WHEN Replacement = '&UNTSHP' ;
NewValue = %trim(%editC(skunoc:'3')) ;
WHEN Replacement = '&PRICE' ;
NewValue = %trim(%editC(slprcc:'3')) ;
WHEN Replacement = '&LSTUPD' ;
IF exdt7h = 0 ;
WriteXML = *OFF ;
ELSE;
NewValue = %editw(exdt7h:' - - ') ;
ENDIF;
WHEN Replacement = '&BOLDTE' ;
WriteXML = *OFF ;
WHEN Replacement = '&BOL' ;
WriteXML = *OFF ;
WHEN Replacement = '&INVNBR' ;
NewValue = %trim(%char(invnoz)) ; // invoice number
WHEN Replacement = '&REFDTE' ;
NewValue = %editw(extd3h:' - - ') ;
WHEN Replacement = '&INVLIN' ; //Seller line number
NewValue = %trim(%char(recnoc)) ;
WHEN Replacement = '&ORDLIN' ; //Buyer line number
NewValue = %trim(%char(recnoc)) ;
WHEN Replacement = '&ALWNBR' ;
IF advcdh <> *blanks ;
NewValue = %trim(advcdh) ;
ELSE ;
WriteXML = *OFF ;
ENDIF ;
//--------------------------------------------------------> Buyer
WHEN Replacement = '&BYNAM' ;
NewValue = %trim(bllnmz) ;
WHEN Replacement = '&BYPART' ;
NewValue = %trim( intid) ;
WHEN Replacement = '&BSTORE' ;
NewValue = %trim(%char(cstnoh)) ;
WHEN Replacement = '&BYAD1' ;
NewValue = %trim(blad1z) ;
WHEN Replacement = '&BYAD2' ;
WriteXML = *OFF ;
WHEN Replacement = '&BYCTY' ;
NewValue = %trim(blctyz) ;
WHEN Replacement = '&BYST' ;
NewValue = %trim(blstaz) ;
WHEN Replacement = '&BYZIP' ;
NewValue = %editc(blzipz:'X') ;
WHEN Replacement = '&BYCTRY' ;
WriteXML = *off ;
WHEN Replacement = '&NOTE1' ;
NewValue = %trim(hnote1) ;
WHEN Replacement = '&BTID' ;
NewValue = %trim(hintid) ;
WHEN Replacement = '&BSTORE' ;
NewValue = %char(cstnoh) ;
WHEN Replacement = '&BTAD1' ;
NewValue = %trim(blad1z) ;
WHEN Replacement = '&BTAD2' ;
WriteXML = *OFF ;
WHEN Replacement = '&BTCTY' ;
NewValue = %trim(blctyz) ;
WHEN Replacement = '&BTSTA' ;
NewValue = %trim(blstaz) ;
WHEN Replacement = '&BTZIP' ;
NewValue = %editc(blzipz:'X') ;
WHEN Replacement = '&BTCTRY' ;
NewValue = 'USA' ;
//*-------------------------------------------------------> Order qty
WHEN Replacement = '&CARNAM' ;
NewValue = %trim(ASNCarrier) ;
WHEN Replacement = '&ASNMTD' ;
NewValue = %trim(ASNMethod) ;
IF NewValue = *blanks ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&TRNDAY' ;
NewValue = %trim(ASNDays) ;
WHEN Replacement = '&ASNFRT' ;
NewValue = %trim(ASNFrtTerms) ;
IF NewValue = *blanks ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&QTYSHP' ;
NewValue = %trim(%editC(ItemsShipped:'3')) ;
WHEN Replacement = '&QTYORD' ;
NewValue = %trim(%editC(orqtyz:'3')) ;
WHEN Replacement = '&PRTSHP' ;
IF ItemsShipped <> orqtyz ;
NewValue = '1' ;
ELSE ;
NewValue = '0' ;
ENDIF ;
//*-------------------------------------------------------> Seller
WHEN Replacement = '&IAVND' ;
NewValue = %trim(tpinpi) ;
WHEN Replacement = '&SLRID' ;
NewValue = %trim(tpinpi) ;
WHEN Replacement = '&SLRNAM' ;
NewValue = %trim(c_stnam) ;
WHEN Replacement = '&SLRAD1' ;
NewValue = %trim(c_stad1) ;
WHEN Replacement = '&SLRCTY' ;
NewValue = %trim(c_stcty) ;
WHEN Replacement = '&SLRSTA' ;
NewValue = %trim(c_ststa) ;
WHEN Replacement = '&SLRZIP' ;
NewValue = %trim(c_stzip) ;
//*-------------------------------------------------------> Ship-to
WHEN Replacement = '&CMNT' ;
NewValue = %trim(SPInstructions) ;
WHEN Replacement = '&STRID' ; // store
NewValue = %trim(hshpno) ;
WHEN Replacement = '&SHPSTR' ;
NewValue = %trim(hshpno) ;
WHEN Replacement = '&SHPNAM' ;
NewValue = %trim(shplnh) ;
WHEN Replacement = '&SHPAD1' ;
NewValue = %trim(shpadh) ;
WHEN Replacement = '&SHPAD2' ;
IF shpa2h <> *blanks ;
NewValue = %trim(shpa2h) ;
ELSE ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&SHPCTY' ;
NewValue = %trim(shpcth) ;
WHEN Replacement = '&SHPSTA' ;
NewValue = %trim(shpsth) ;
WHEN Replacement = '&SHPZIP' ;
NewValue = %trim(extr5h) ;
WHEN Replacement = '&SHPCCD' ;
NewValue = 'USA' ;
//*-------------------------------------------------------> Terms
WHEN Replacement = '&TRMDSC' ; //Terms description
NewValue = %trim(trmact) ;
WHEN Replacement = '&TRMDUE' ; //Net due date
NewValue = %editw(DueDate:' - - ') ;
WHEN Replacement = '&TRMDAY' ; //Terms description
NewValue = %trim(%char(trmda9)) ;
WHEN Replacement = '&DSC1' ; //Discount
NewValue =%trim(%editc(dsgvnz:'3')) ;
WHEN Replacement = '&ADD1' ; //Additional charge
WHEN Replacement = '&REFITM' ; // Buyer item
NewValue = %trim(dcitem) ;
WHEN Replacement = '&UPC' ; // UPC code
SELECT ; // if not mapped do not
WHEN upcno <> *blanks ; // inlcude the UPC
NewValue = %trim(upcno) ;
OTHER ;
WriteXML = *OFF ;
ENDSL ;
WHEN Replacement = '&EAN' ; // EAN code
WriteXML = *OFF ;
//--------------------------------------------------------> Totals
WHEN Replacement = '&ITMAMT' ; // Item amount
NewValue = %trim(%editc(ItemTotal:'3')) ;
WHEN Replacement = '&ADDCHG' ; //Additional charge
WriteXML = *OFF ;
WHEN Replacement = '&INVGRS' ; // Invoice gross
NewValue = %trim(%editc(slprcz:'3')) ;
WHEN Replacement = '&INVTOT' ; // Invoice total
NewValue = %trim(%editc(slprcz:'3')) ;
WHEN Replacement = '&INVFRT' ; // Invoice Freight
IF framtz <> 0 ;
NewValue =%trim(%editc(framtz:'3')) ;
ELSE ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&INVTAX' ; // Invoice tax
WriteXML = *OFF ; // tax not used
WHEN Replacement = '&INVALW' ; // Invoice allowance
IF advalz <> 0 ; // Ad allowance
NewValue = %trim(%editc(advalz:'3')) ;
ELSE ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&DSCAMT' ; // Invoice discount
IF dsgvnz <> 0 ; // discount given
NewValue =%trim(%editc(dsgvnz:'3')) ;
ELSE ;
WriteXML = *OFF ;
ENDIF ;
WHEN Replacement = '&QTYINV' ; // Invoice total
NewValue = %trim(%editc(ItemsInvoiced:'3')) ;
WHEN Replacement = '&PIECE' ; // Invoice total
NewValue = %trim(pieceID) ;
WHEN Replacement = '&REFLIN' ; // Invoice total
NewValue = %trim(%editc(recnoc:'3')) ;
WHEN Replacement = '&JACK' ; // Invoice total
NewValue = %trim(seller) ;
OTHER ;
WriteXML = *OFF ;
ENDSL ;
IF NewValue <> *blanks ;
formatString(NewValue) ;
ENDIF ;
workString = %trim(%subst(workstring:s)) ;
r = %scan('&':workString) ; // scan for replacment
IF r > 0 ;
DataString = %trim(DataString) + ' ' +
%trim(%subst(workstring:1:r-1)) ;
workString = %trim(%subst(workstring:r)) ; // left adjust string
ENDIF ;
ENDDO ;
ELSE ;
DataString = %trim(XMLdta) ;
ENDIF ;
IF xmluet <> *blanks ;
DataString = %trim(DataString) + xmlEnd ; // add tag end if required
ENDIF ;
r = %scan('pieceIdentification':DataString:1) ;
IF r > 0 and pieceID = *blank ;
WriteXML = *OFF ;
ENDIF ;
return DataString ;
/end-free
p formatXML e
*---------------------------------------------------------------------
* Parse the XML Statement
*---------------------------------------------------------------------
p formatString B
d formatString PI
d NewValue 128
/free
IF xmlqts = 'Y' ;
DataString= %trim(DataString) + dqt + %trim(NewValue) + dqt;
ELSE ;
DataString= %trim(DataString) + %trim(NewValue) ;
ENDIF ;
/end-free
p formatString e
*---------------------------------------------------------------------
* Check to see if Ship-to contact information is to be written
*---------------------------------------------------------------------
p CheckContact B
d CheckContact PI
d shpcon S 10a inz('810SHPC')
/free
SETLL (docver:shpcon) ADMXMLPF ;
DOU %eof(ADMXMLPF) ;
READE (docver:shpcon) ADMXMLPF ;
IF not %eof(ADMXMLPF) ;
DataOut = formatXML() ;
IF WriteXML ;
WRITE ADM856PF OutRec ;
ENDIF ;
ENDIF ;
ENDDO ;
/end-free
p CheckContact e
XML Test Output
<?xml version="1.0" encoding="utf-8"?> <tns:advanceShipNotice xmlns:tns="http://support.furnishnet.com/xml/schemas/fnASN_v1.9" xmlns:tnsa="http://support.furnishnet.com/xml/schemas/fnBase_v1.6" xmlns:tnsb="http://support.furnishnet.com/xml/schemas/fnItem_v1.6" xmlns:tnsc="http://support.furnishnet.com/xml/schemas/fnParty_v1.4" xmlns:tnsd="http://support.furnishnet.com/xml/schemas/fnBase v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://support.furnishnet.com/xml/schemas/fnASN_v1.9"> <shipment> <document id=&ASNORD status="Original"> <creationDate>&ASNDTE </creationDate> <creationTime>&ASNTIM </document> <shipmentReferenceNumber referenceNumberValue=&ASNREF referenceNumberQualifier="ShipNoticeNumber" /> <shipmentReferenceNumber referenceDocumentDate=&REFDTE referenceNumberValue=&BYRPO referenceNumberQualifier="BuyerSalesOrderNumber" /> <shipDate shipDateQualifier="Actual" shipDate=&SHPDTE /> <seller> <sellerIdentification xsi:type="tnsc:shipToPartyType" shippingInstructions="string"> </shipFrom> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="SenderAssigned" /> </sellerIdentification> </seller> <shipFrom> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="SenderAssigned" /> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:county>string </tnsc:county> <tnsc:postalCode>string </tnsc:postalCode> <partyContact /> <tnsc:FOBPoint>&FOB </tnsc:FOBPoint> <shipTo description="endConsumer" shippingInstructions="string" id="string"> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="SenderAssigned" /> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="GLN" /> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="DUNS" /> <tnsc:partyName>string </tnsc:partyName> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:addressLine>string </tnsc:addressLine> <tnsc:postalCode>string </tnsc:postalCode> <partyContact /> </shipTo> <markFor description="warehouse"> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="DUNS" /> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="ReceiverAssigned" /> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="ReceiverAssigned" /> <tnsc:partyIdentifier partyIdentifierCode="string" partyIdentifierQualifierCode="SenderAssigned" /> <tnsc:partyName>string </tnsc:partyName> <tnsc:county>string </tnsc:county> <tnsc:stateOrProvince>string </tnsc:stateOrProvince> <tnsc:country>string </tnsc:country> <tnsc:postalCode>string </tnsc:postalCode> </markFor> <productCategory>&ASNCAT </productCategory> <shipmentMethod>&ASNMTD </shipmentMethod> <freightTerms>&ASNFRT </freightTerms> <order> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <pack /> <pack /> </order> <order> <orderQuantity /> </order> <order> <orderReferenceNumber referenceDocumentDate="1979-04-23" referenceNumberValue="string" referenceNumberQualifier="BuyerSalesOrderNumber" /> <orderReferenceNumber referenceNumberValue="string" referenceNumberQualifier="WaybillNumber" /> <orderReferenceNumber referenceNumberValue="string" referenceNumberQualifier="ParentInvoiceNumber" /> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <pack /> <pack /> <pack /> <pack /> </order> <order> <orderReferenceNumber referenceNumberValue="string" referenceNumberQualifier="SellerSalesOrderLineNumber" /> <orderReferenceNumber referenceNumberValue="string" referenceNumberQualifier="AllowanceNumber" /> <orderReferenceNumber referenceNumberValue="string" referenceNumberQualifier="AllowanceNumber" /> <orderQuantity /> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <orderSystemReference> <systemReferenceDescription>string </systemReferenceDescription> <systemReferenceValue>string </systemReferenceValue> </orderSystemReference> <pack /> <pack /> </order> </shipment> </tns:advanceShipNotice>