Expected data output for looping

working on an automation that reads, summarizes, and output invoices. not sure why but im having issues with the output data formatting to get it to loop correctly. as it sits now it is basically like this…

<root>
   <data>
      <invoice>
         <invoice lines/>
      </invoice>
      <invoice>
         <invoice lines/>
      </invoice>
   </data>
</root>

so when i send this through the extract output, i assumed data row should be “root/data” and data record should be “root/data/invoice” and that would allow the loop to read each invoice. it doesnt do that though.

what would be the proper setup to get the loop to function correctly?

The row is /root/data/invoice

The record is /root/data/invoice/invoice

to help clarify, there is header data in the invoice and then invoice lines is nested with multiple lines.

<root>
   <data>
      <invoice>
          data......data
         <invoice lines>
         <invoice lines>
         <invoice lines>
      </invoice>
      <invoice>
         <invoice lines/>
      </invoice>
   </data>
</root>

so if it were like that, i would need it to loop twice, once for each invoice. currently it seems to loop the right number of times but not pulling the lines correctly

edit: looking a little deeper i can see it is looping on the number of invoice lines, not the number of invoices. and with each loop it is only using one invoice line. so how would i get it to loop on the invoice level but still keep all of relevant lines with each invoice?

I have tried ever variation of data formatting and extract data settings i can think of and i cannot get it to pass correctly.

it seems to only want to loop on the number of the lowest child node (in this case the invoice lines).

If I have 2 invoices, one with 3 lines and one with 4 lines, how do i get it to loop twice so the first loop sees the first invoice with 3 lines and the second loop sees the second invoice with 4 lines? is there not a way to pass this from one action to loop through? do i need to do this all within one action?

Would need a test case to see what you are doing. Can you send the assembly UUID and instructions to see what is happening?

assembly: d1ed3af2b2e74eb980736e6dc80ea603

use credentials FastTekGlobal-imp

the basics are this reads an invoice that was generated by the system, then using line data it summarizes and splits to multiple invoices. at the end of script #19 the output in this test case should be 3 invoices (sodocument) each with its own disctinct lines section and multiple sodocumententry.

The output of this is passing to a loop that will create each invoice one at a time.

Sorry, that is way too complex of an assembly for me to understand.

I would need a skeleton assembly that just demonstrates by itself the problem you have, using nothing but inlined sample XML snippets and loops.

This is the sample assembly for the Loop module, maybe you can copy it and modify to demonstrate the issue: 1f19d3fa4b86475a8641cad56187ca3a

i think we are talking two different things here. I dont mean the data row loop module, i mean the automation loop.

the first action here is the assembly i mentioned above in a previous comment. the output of that is multiple records with detail rows within each (sample data attached at bottom). im trying to pass the output into that loop so each record is used to create a new invoice. in the sample file attached, there are 3 sodocument records, with 2, 2, and 1 sodocumententry line respectively. so my expectation is that the loop would see 3 iterations and create 3 new invoices (one with 2 lines, one with 2 lines, and one with 1 line). what i have happening is it will loop two times and create 2 invoices with one line each, those 1 line each are the two detail lines from the first invoice, as in it is looping the detail and not the parent record. I tried changing the extract data output to different ways but its mostly all the same. or it loops 5 times for all the detail rows with one line each (still incorrect though).

I assume it has to be in the way I am formatting the data coming out of the first action so the loop knows what record/detail is to be used for each loop.

does that help?

<root>
	<data>
		<sodocument>
			<RECORDNO><![CDATA[57]]></RECORDNO>
			<DOCNO><![CDATA[INV52]]></DOCNO>
			<DOCID><![CDATA[Pre-Billing-INV52]]></DOCID>
			<CREATEDFROM/>
			<STATE><![CDATA[Closed]]></STATE>
			<CLOSED/>
			<WHENCREATED><![CDATA[03/10/2022]]></WHENCREATED>
			<AUWHENCREATED><![CDATA[03/10/2022 14:40:32]]></AUWHENCREATED>
			<CREATEDBY><![CDATA[4]]></CREATEDBY>
			<MODIFIEDBY><![CDATA[4]]></MODIFIEDBY>
			<WHENMODIFIED><![CDATA[03/10/2022 14:40:33]]></WHENMODIFIED>
			<WHENDUE><![CDATA[03/10/2022]]></WHENDUE>
			<STATUS><![CDATA[active]]></STATUS>
			<PONUMBER/>
			<VENDORDOCNO/>
			<DOCPARID><![CDATA[Pre-Billing]]></DOCPARID>
			<DOCPARKEY><![CDATA[5]]></DOCPARKEY>
			<DOCPARCLASS><![CDATA[INVOICE]]></DOCPARCLASS>
			<UPDATES_INV><![CDATA[No]]></UPDATES_INV>
			<TERM.NAME/>
			<NOTE/>
			<WAREHOUSE.LOCATIONID/>
			<SHIPVIA/>
			<USER><![CDATA[4]]></USER>
			<CREATEDUSER><![CDATA[4]]></CREATEDUSER>
			<USERID><![CDATA[ExtUser|altavistatech|hmurray1]]></USERID>
			<CREATEDUSERID><![CDATA[ExtUser|altavistatech|hmurray1]]></CREATEDUSERID>
			<CONTACT.CONTACTNAME><![CDATA[CMS]]></CONTACT.CONTACTNAME>
			<CONTACT.PREFIX/>
			<CONTACT.FIRSTNAME/>
			<CONTACT.INITIAL/>
			<CONTACT.LASTNAME/>
			<CONTACT.COMPANYNAME><![CDATA[CMS]]></CONTACT.COMPANYNAME>
			<CONTACT.PRINTAS><![CDATA[CMS]]></CONTACT.PRINTAS>
			<CONTACT.PHONE1/>
			<CONTACT.PHONE2/>
			<CONTACT.CELLPHONE/>
			<CONTACT.PAGER/>
			<CONTACT.FAX/>
			<CONTACT.EMAIL1/>
			<CONTACT.EMAIL2/>
			<CONTACT.URL1/>
			<CONTACT.URL2/>
			<CONTACT.VISIBLE><![CDATA[true]]></CONTACT.VISIBLE>
			<CONTACT.MAILADDRESS.ADDRESS1/>
			<CONTACT.MAILADDRESS.ADDRESS2/>
			<CONTACT.MAILADDRESS.CITY/>
			<CONTACT.MAILADDRESS.STATE/>
			<CONTACT.MAILADDRESS.ZIP/>
			<CONTACT.MAILADDRESS.COUNTRY><![CDATA[United States]]></CONTACT.MAILADDRESS.COUNTRY>
			<CONTACT.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></CONTACT.MAILADDRESS.COUNTRYCODE>
			<SHIPTOKEY><![CDATA[877]]></SHIPTOKEY>
			<SHIPTO.CONTACTNAME><![CDATA[CMS]]></SHIPTO.CONTACTNAME>
			<SHIPTO.PREFIX/>
			<SHIPTO.FIRSTNAME/>
			<SHIPTO.INITIAL/>
			<SHIPTO.LASTNAME/>
			<SHIPTO.COMPANYNAME><![CDATA[CMS]]></SHIPTO.COMPANYNAME>
			<SHIPTO.PRINTAS><![CDATA[CMS]]></SHIPTO.PRINTAS>
			<SHIPTO.PHONE1/>
			<SHIPTO.PHONE2/>
			<SHIPTO.CELLPHONE/>
			<SHIPTO.PAGER/>
			<SHIPTO.FAX/>
			<SHIPTO.EMAIL1/>
			<SHIPTO.EMAIL2/>
			<SHIPTO.URL1/>
			<SHIPTO.URL2/>
			<SHIPTO.VISIBLE><![CDATA[true]]></SHIPTO.VISIBLE>
			<SHIPTO.MAILADDRESS.ADDRESS1/>
			<SHIPTO.MAILADDRESS.ADDRESS2/>
			<SHIPTO.MAILADDRESS.CITY/>
			<SHIPTO.MAILADDRESS.STATE/>
			<SHIPTO.MAILADDRESS.ZIP/>
			<SHIPTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></SHIPTO.MAILADDRESS.COUNTRY>
			<SHIPTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></SHIPTO.MAILADDRESS.COUNTRYCODE>
			<BILLTOKEY><![CDATA[877]]></BILLTOKEY>
			<BILLTO.CONTACTNAME><![CDATA[CMS]]></BILLTO.CONTACTNAME>
			<BILLTO.PREFIX/>
			<BILLTO.FIRSTNAME/>
			<BILLTO.INITIAL/>
			<BILLTO.LASTNAME/>
			<BILLTO.COMPANYNAME><![CDATA[CMS]]></BILLTO.COMPANYNAME>
			<BILLTO.PRINTAS><![CDATA[CMS]]></BILLTO.PRINTAS>
			<BILLTO.PHONE1/>
			<BILLTO.PHONE2/>
			<BILLTO.CELLPHONE/>
			<BILLTO.PAGER/>
			<BILLTO.FAX/>
			<BILLTO.EMAIL1/>
			<BILLTO.EMAIL2/>
			<BILLTO.URL1/>
			<BILLTO.URL2/>
			<BILLTO.VISIBLE><![CDATA[true]]></BILLTO.VISIBLE>
			<BILLTO.MAILADDRESS.ADDRESS1/>
			<BILLTO.MAILADDRESS.ADDRESS2/>
			<BILLTO.MAILADDRESS.CITY/>
			<BILLTO.MAILADDRESS.STATE/>
			<BILLTO.MAILADDRESS.ZIP/>
			<BILLTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></BILLTO.MAILADDRESS.COUNTRY>
			<BILLTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></BILLTO.MAILADDRESS.COUNTRYCODE>
			<MESSAGE/>
			<PRRECORDKEY/>
			<INVBATCHKEY/>
			<PRINVBATCHKEY><![CDATA[25]]></PRINVBATCHKEY>
			<ADDGLBATCHKEY/>
			<PRINTED><![CDATA[No]]></PRINTED>
			<BACKORDER><![CDATA[No]]></BACKORDER>
			<SUBTOTAL><![CDATA[3091.62]]></SUBTOTAL>
			<TOTAL><![CDATA[3091.62]]></TOTAL>
			<ENTGLGROUP/>
			<CURRENCY><![CDATA[USD]]></CURRENCY>
			<EXCHRATEDATE><![CDATA[03/10/2022]]></EXCHRATEDATE>
			<EXCHRATETYPES.NAME/>
			<EXCHRATE><![CDATA[1]]></EXCHRATE>
			<SCHOPKEY/>
			<SALESCONTRACT><![CDATA[N]]></SALESCONTRACT>
			<USEDASCONTRACT/>
			<TRX_SUBTOTAL><![CDATA[3091.62]]></TRX_SUBTOTAL>
			<TRX_TOTAL><![CDATA[3091.62]]></TRX_TOTAL>
			<EXCH_RATE_TYPE_ID/>
			<RENEWEDDOC/>
			<BASECURR><![CDATA[USD]]></BASECURR>
			<SYSTEMGENERATED><![CDATA[false]]></SYSTEMGENERATED>
			<INVOICERUNKEY><![CDATA[33]]></INVOICERUNKEY>
			<DOCPAR_IN_OUT><![CDATA[Increase]]></DOCPAR_IN_OUT>
			<WHENPOSTED/>
			<PRINTEDUSERID/>
			<DATEPRINTED/>
			<PRINTEDBY/>
			<ADJ><![CDATA[false]]></ADJ>
			<TAXSOLUTIONKEY/>
			<TAXSOLUTIONID/>
			<SHOWMULTILINETAX/>
			<TAXMETHOD/>
			<CUSTREC><![CDATA[64]]></CUSTREC>
			<CUSTVENDID><![CDATA[F00600]]></CUSTVENDID>
			<CUSTVENDNAME><![CDATA[CMS]]></CUSTVENDNAME>
			<CUSTVENDEMAILOPTIN><![CDATA[false]]></CUSTVENDEMAILOPTIN>
			<HASPOSTEDREVREC/>
			<CONTRACTID/>
			<CONTRACTDESC/>
			<TRX_TOTALPAID/>
			<TOTALPAID/>
			<TRX_TOTALENTERED/>
			<TOTALENTERED/>
			<TRX_TOTALDUE/>
			<TOTALDUE/>
			<PAYMENTSTATUS><![CDATA[Open]]></PAYMENTSTATUS>
			<SIGN_FLAG><![CDATA[1]]></SIGN_FLAG>
			<VSOEPRICELIST/>
			<VSOEPRCLSTKEY/>
			<ORIGDOCDATE/>
			<HASADVBILLING/>
			<INVOICERUN_EXPENSEPRICEMARKUP/>
			<INVOICERUN_DESCRIPTION><![CDATA[Invoice Run Created at 2022-03-10 14:40:32  GMT]]></INVOICERUN_DESCRIPTION>
			<PROJECTKEY/>
			<PROJECT/>
			<PROJECTNAME/>
			<CNCONTRACTKEY/>
			<CNCONTRACTID/>
			<CNCONTRACTNAME/>
			<NEEDBYDATE/>
			<SHIPBYDATE/>
			<CANCELAFTERDATE/>
			<DONOTSHIPBEFOREDATE/>
			<DONOTSHIPAFTERDATE/>
			<SERVICEDELIVERYDATE/>
			<TRACKINGNUMBER/>
			<SHIPPEDDATE/>
			<CUSTOMERPONUMBER/>
			<RETAINAGEPERCENTAGE/>
			<SCOPE/>
			<INCLUSIONS/>
			<EXCLUSIONS/>
			<TERMS/>
			<SCHEDULESTARTDATE/>
			<ACTUALSTARTDATE/>
			<SCHEDULEDCOMPLETIONDATE/>
			<REVISEDCOMPLETIONDATE/>
			<SUBSTANTIALCOMPLETIONDATE/>
			<ACTUALCOMPLETIONDATE/>
			<NOTICETOPROCEED/>
			<RESPONSEDUE/>
			<EXECUTEDON/>
			<SCHEDULEIMPACT/>
			<INTERNALREFNO/>
			<INTERNALINITIATEDBYKEY/>
			<INTERNALINITIATEDBY/>
			<INTERNALINITIATEDBYNAME/>
			<INTERNALVERBALBYKEY/>
			<INTERNALVERBALBY/>
			<INTERNALVERBALBYNAME/>
			<INTERNALISSUEDBYKEY/>
			<INTERNALISSUEDBY/>
			<INTERNALISSUEDBYNAME/>
			<INTERNALISSUEDON/>
			<INTERNALAPPROVEDBYKEY/>
			<INTERNALAPPROVEDBY/>
			<INTERNALAPPROVEDBYNAME/>
			<INTERNALAPPROVEDON/>
			<INTERNALSIGNEDBYKEY/>
			<INTERNALSIGNEDBY/>
			<INTERNALSIGNEDBYNAME/>
			<INTERNALSIGNEDON/>
			<INTERNALSOURCE/>
			<INTERNALSOURCEREFNO/>
			<EXTERNALREFNO/>
			<EXTERNALVERBALBYKEY/>
			<EXTERNALVERBALBY/>
			<EXTERNALAPPROVEDBYKEY/>
			<EXTERNALAPPROVEDBY/>
			<EXTERNALAPPROVEDON/>
			<EXTERNALSIGNEDBYKEY/>
			<EXTERNALSIGNEDBY/>
			<EXTERNALSIGNEDON/>
			<PERFORMANCEBONDREQUIRED/>
			<PERFORMANCEBONDRECEIVED/>
			<PERFORMANCEBONDAMOUNT/>
			<PERFORMANCESURETYCOMPANYKEY/>
			<PERFORMANCESURETYCOMPANY/>
			<PERFORMANCESURETYCOMPANYNAME/>
			<PAYMENTBONDREQUIRED/>
			<PAYMENTBONDRECEIVED/>
			<PAYMENTBONDAMOUNT/>
			<PAYMENTSURETYCOMPANYKEY/>
			<PAYMENTSURETYCOMPANY/>
			<PAYMENTSURETYCOMPANYNAME/>
			<HASCHANGE><![CDATA[false]]></HASCHANGE>
			<REVISEDTOTAL/>
			<REVISEDSUBTOTAL/>
			<TRX_REVISEDTOTAL/>
			<TRX_REVISEDSUBTOTAL/>
			<POSTEDCHANGESTOTAL/>
			<RELATEDDOCNO/>
			<CHANGELOGNUMBER/>
			<PROJECTCONTRACTID/>
			<PROJECTCONTRACTKEY/>
			<PCBEXTERNALREFNO/>
			<PCBDESCRIPTION/>
			<PCBDATE/>
			<ARCHITECTKEY/>
			<BILLTHROUGHDATE/>
			<BILLAPPLICATIONNO/>
			<ORGCONTRACTAMT/>
			<NETCHANGES/>
			<REVISEDCONTRACTAMT/>
			<TOTALCOMPLETEDTODATE/>
			<RETCOMPLETEDAMT/>
			<RETSTOREDMATERIALS/>
			<TOTALRETAINAGE/>
			<TOTALEARNEDLESSRET/>
			<LESSPRIORAPPLICATION/>
			<CURRENTAMTDUE/>
			<BALANCETOFINISH/>
			<TCAPMADDITION/>
			<TCAPMDEDUCTION/>
			<TCATMADDITION/>
			<TCATMDEDUCTION/>
			<TOTALNETCHANGESADDITION/>
			<TOTALNETCHANGESDEDUCTION/>
			<TOTALNETCHANGES/>
			<ARCHITECT/>
			<MEGAENTITYKEY/>
			<MEGAENTITYID/>
			<MEGAENTITYNAME/>
			<lines>
				<sodocumententry>
					<ITEMID><![CDATA[Regular]]></ITEMID>
					<UNIT><![CDATA[Each]]></UNIT>
					<QUANTITY><![CDATA[9]]></QUANTITY>
					<MEMO><![CDATA[7AV36486N-Harneet Grewal WE: 03/05/2022]]></MEMO>
					<EMPLOYEEID><![CDATA[7AV36486N]]></EMPLOYEEID>
					<LOCATIONID><![CDATA[MID]]></LOCATIONID>
					<CUSTOMERID><![CDATA[F00600]]></CUSTOMERID>
					<PROJECTID><![CDATA[10011]]></PROJECTID>
					<TASKID/>
					<COMMISSION/>
					<GROSS_MARGIN><![CDATA[8.58]]></GROSS_MARGIN>
					<SALESPERSON><![CDATA[Gerry DiPonio]]></SALESPERSON>
					<PRICE><![CDATA[65.45]]></PRICE>
				</sodocumententry>
				<sodocumententry>
					<ITEMID><![CDATA[Regular]]></ITEMID>
					<UNIT><![CDATA[Each]]></UNIT>
					<QUANTITY><![CDATA[9]]></QUANTITY>
					<MEMO><![CDATA[7AV36486N-Harneet Grewal WE: 03/12/2022]]></MEMO>
					<EMPLOYEEID><![CDATA[7AV36486N]]></EMPLOYEEID>
					<LOCATIONID><![CDATA[MID]]></LOCATIONID>
					<CUSTOMERID><![CDATA[F00600]]></CUSTOMERID>
					<PROJECTID><![CDATA[10011]]></PROJECTID>
					<TASKID/>
					<COMMISSION/>
					<GROSS_MARGIN><![CDATA[8.58]]></GROSS_MARGIN>
					<SALESPERSON><![CDATA[Gerry DiPonio]]></SALESPERSON>
					<PRICE><![CDATA[65.45]]></PRICE>
				</sodocumententry>
			</lines>
			<DESCRIPTION_HEADER><![CDATA[7AV36486N-Harneet Grewal WE: 03/12/2022]]></DESCRIPTION_HEADER>
		</sodocument>
		<sodocument>
			<RECORDNO><![CDATA[57]]></RECORDNO>
			<DOCNO><![CDATA[INV52]]></DOCNO>
			<DOCID><![CDATA[Pre-Billing-INV52]]></DOCID>
			<CREATEDFROM/>
			<STATE><![CDATA[Closed]]></STATE>
			<CLOSED/>
			<WHENCREATED><![CDATA[03/10/2022]]></WHENCREATED>
			<AUWHENCREATED><![CDATA[03/10/2022 14:40:32]]></AUWHENCREATED>
			<CREATEDBY><![CDATA[4]]></CREATEDBY>
			<MODIFIEDBY><![CDATA[4]]></MODIFIEDBY>
			<WHENMODIFIED><![CDATA[03/10/2022 14:40:33]]></WHENMODIFIED>
			<WHENDUE><![CDATA[03/10/2022]]></WHENDUE>
			<STATUS><![CDATA[active]]></STATUS>
			<PONUMBER/>
			<VENDORDOCNO/>
			<DOCPARID><![CDATA[Pre-Billing]]></DOCPARID>
			<DOCPARKEY><![CDATA[5]]></DOCPARKEY>
			<DOCPARCLASS><![CDATA[INVOICE]]></DOCPARCLASS>
			<UPDATES_INV><![CDATA[No]]></UPDATES_INV>
			<TERM.NAME/>
			<NOTE/>
			<WAREHOUSE.LOCATIONID/>
			<SHIPVIA/>
			<USER><![CDATA[4]]></USER>
			<CREATEDUSER><![CDATA[4]]></CREATEDUSER>
			<USERID><![CDATA[ExtUser|altavistatech|hmurray1]]></USERID>
			<CREATEDUSERID><![CDATA[ExtUser|altavistatech|hmurray1]]></CREATEDUSERID>
			<CONTACT.CONTACTNAME><![CDATA[CMS]]></CONTACT.CONTACTNAME>
			<CONTACT.PREFIX/>
			<CONTACT.FIRSTNAME/>
			<CONTACT.INITIAL/>
			<CONTACT.LASTNAME/>
			<CONTACT.COMPANYNAME><![CDATA[CMS]]></CONTACT.COMPANYNAME>
			<CONTACT.PRINTAS><![CDATA[CMS]]></CONTACT.PRINTAS>
			<CONTACT.PHONE1/>
			<CONTACT.PHONE2/>
			<CONTACT.CELLPHONE/>
			<CONTACT.PAGER/>
			<CONTACT.FAX/>
			<CONTACT.EMAIL1/>
			<CONTACT.EMAIL2/>
			<CONTACT.URL1/>
			<CONTACT.URL2/>
			<CONTACT.VISIBLE><![CDATA[true]]></CONTACT.VISIBLE>
			<CONTACT.MAILADDRESS.ADDRESS1/>
			<CONTACT.MAILADDRESS.ADDRESS2/>
			<CONTACT.MAILADDRESS.CITY/>
			<CONTACT.MAILADDRESS.STATE/>
			<CONTACT.MAILADDRESS.ZIP/>
			<CONTACT.MAILADDRESS.COUNTRY><![CDATA[United States]]></CONTACT.MAILADDRESS.COUNTRY>
			<CONTACT.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></CONTACT.MAILADDRESS.COUNTRYCODE>
			<SHIPTOKEY><![CDATA[877]]></SHIPTOKEY>
			<SHIPTO.CONTACTNAME><![CDATA[CMS]]></SHIPTO.CONTACTNAME>
			<SHIPTO.PREFIX/>
			<SHIPTO.FIRSTNAME/>
			<SHIPTO.INITIAL/>
			<SHIPTO.LASTNAME/>
			<SHIPTO.COMPANYNAME><![CDATA[CMS]]></SHIPTO.COMPANYNAME>
			<SHIPTO.PRINTAS><![CDATA[CMS]]></SHIPTO.PRINTAS>
			<SHIPTO.PHONE1/>
			<SHIPTO.PHONE2/>
			<SHIPTO.CELLPHONE/>
			<SHIPTO.PAGER/>
			<SHIPTO.FAX/>
			<SHIPTO.EMAIL1/>
			<SHIPTO.EMAIL2/>
			<SHIPTO.URL1/>
			<SHIPTO.URL2/>
			<SHIPTO.VISIBLE><![CDATA[true]]></SHIPTO.VISIBLE>
			<SHIPTO.MAILADDRESS.ADDRESS1/>
			<SHIPTO.MAILADDRESS.ADDRESS2/>
			<SHIPTO.MAILADDRESS.CITY/>
			<SHIPTO.MAILADDRESS.STATE/>
			<SHIPTO.MAILADDRESS.ZIP/>
			<SHIPTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></SHIPTO.MAILADDRESS.COUNTRY>
			<SHIPTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></SHIPTO.MAILADDRESS.COUNTRYCODE>
			<BILLTOKEY><![CDATA[877]]></BILLTOKEY>
			<BILLTO.CONTACTNAME><![CDATA[CMS]]></BILLTO.CONTACTNAME>
			<BILLTO.PREFIX/>
			<BILLTO.FIRSTNAME/>
			<BILLTO.INITIAL/>
			<BILLTO.LASTNAME/>
			<BILLTO.COMPANYNAME><![CDATA[CMS]]></BILLTO.COMPANYNAME>
			<BILLTO.PRINTAS><![CDATA[CMS]]></BILLTO.PRINTAS>
			<BILLTO.PHONE1/>
			<BILLTO.PHONE2/>
			<BILLTO.CELLPHONE/>
			<BILLTO.PAGER/>
			<BILLTO.FAX/>
			<BILLTO.EMAIL1/>
			<BILLTO.EMAIL2/>
			<BILLTO.URL1/>
			<BILLTO.URL2/>
			<BILLTO.VISIBLE><![CDATA[true]]></BILLTO.VISIBLE>
			<BILLTO.MAILADDRESS.ADDRESS1/>
			<BILLTO.MAILADDRESS.ADDRESS2/>
			<BILLTO.MAILADDRESS.CITY/>
			<BILLTO.MAILADDRESS.STATE/>
			<BILLTO.MAILADDRESS.ZIP/>
			<BILLTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></BILLTO.MAILADDRESS.COUNTRY>
			<BILLTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></BILLTO.MAILADDRESS.COUNTRYCODE>
			<MESSAGE/>
			<PRRECORDKEY/>
			<INVBATCHKEY/>
			<PRINVBATCHKEY><![CDATA[25]]></PRINVBATCHKEY>
			<ADDGLBATCHKEY/>
			<PRINTED><![CDATA[No]]></PRINTED>
			<BACKORDER><![CDATA[No]]></BACKORDER>
			<SUBTOTAL><![CDATA[3091.62]]></SUBTOTAL>
			<TOTAL><![CDATA[3091.62]]></TOTAL>
			<ENTGLGROUP/>
			<CURRENCY><![CDATA[USD]]></CURRENCY>
			<EXCHRATEDATE><![CDATA[03/10/2022]]></EXCHRATEDATE>
			<EXCHRATETYPES.NAME/>
			<EXCHRATE><![CDATA[1]]></EXCHRATE>
			<SCHOPKEY/>
			<SALESCONTRACT><![CDATA[N]]></SALESCONTRACT>
			<USEDASCONTRACT/>
			<TRX_SUBTOTAL><![CDATA[3091.62]]></TRX_SUBTOTAL>
			<TRX_TOTAL><![CDATA[3091.62]]></TRX_TOTAL>
			<EXCH_RATE_TYPE_ID/>
			<RENEWEDDOC/>
			<BASECURR><![CDATA[USD]]></BASECURR>
			<SYSTEMGENERATED><![CDATA[false]]></SYSTEMGENERATED>
			<INVOICERUNKEY><![CDATA[33]]></INVOICERUNKEY>
			<DOCPAR_IN_OUT><![CDATA[Increase]]></DOCPAR_IN_OUT>
			<WHENPOSTED/>
			<PRINTEDUSERID/>
			<DATEPRINTED/>
			<PRINTEDBY/>
			<ADJ><![CDATA[false]]></ADJ>
			<TAXSOLUTIONKEY/>
			<TAXSOLUTIONID/>
			<SHOWMULTILINETAX/>
			<TAXMETHOD/>
			<CUSTREC><![CDATA[64]]></CUSTREC>
			<CUSTVENDID><![CDATA[F00600]]></CUSTVENDID>
			<CUSTVENDNAME><![CDATA[CMS]]></CUSTVENDNAME>
			<CUSTVENDEMAILOPTIN><![CDATA[false]]></CUSTVENDEMAILOPTIN>
			<HASPOSTEDREVREC/>
			<CONTRACTID/>
			<CONTRACTDESC/>
			<TRX_TOTALPAID/>
			<TOTALPAID/>
			<TRX_TOTALENTERED/>
			<TOTALENTERED/>
			<TRX_TOTALDUE/>
			<TOTALDUE/>
			<PAYMENTSTATUS><![CDATA[Open]]></PAYMENTSTATUS>
			<SIGN_FLAG><![CDATA[1]]></SIGN_FLAG>
			<VSOEPRICELIST/>
			<VSOEPRCLSTKEY/>
			<ORIGDOCDATE/>
			<HASADVBILLING/>
			<INVOICERUN_EXPENSEPRICEMARKUP/>
			<INVOICERUN_DESCRIPTION><![CDATA[Invoice Run Created at 2022-03-10 14:40:32  GMT]]></INVOICERUN_DESCRIPTION>
			<PROJECTKEY/>
			<PROJECT/>
			<PROJECTNAME/>
			<CNCONTRACTKEY/>
			<CNCONTRACTID/>
			<CNCONTRACTNAME/>
			<NEEDBYDATE/>
			<SHIPBYDATE/>
			<CANCELAFTERDATE/>
			<DONOTSHIPBEFOREDATE/>
			<DONOTSHIPAFTERDATE/>
			<SERVICEDELIVERYDATE/>
			<TRACKINGNUMBER/>
			<SHIPPEDDATE/>
			<CUSTOMERPONUMBER/>
			<RETAINAGEPERCENTAGE/>
			<SCOPE/>
			<INCLUSIONS/>
			<EXCLUSIONS/>
			<TERMS/>
			<SCHEDULESTARTDATE/>
			<ACTUALSTARTDATE/>
			<SCHEDULEDCOMPLETIONDATE/>
			<REVISEDCOMPLETIONDATE/>
			<SUBSTANTIALCOMPLETIONDATE/>
			<ACTUALCOMPLETIONDATE/>
			<NOTICETOPROCEED/>
			<RESPONSEDUE/>
			<EXECUTEDON/>
			<SCHEDULEIMPACT/>
			<INTERNALREFNO/>
			<INTERNALINITIATEDBYKEY/>
			<INTERNALINITIATEDBY/>
			<INTERNALINITIATEDBYNAME/>
			<INTERNALVERBALBYKEY/>
			<INTERNALVERBALBY/>
			<INTERNALVERBALBYNAME/>
			<INTERNALISSUEDBYKEY/>
			<INTERNALISSUEDBY/>
			<INTERNALISSUEDBYNAME/>
			<INTERNALISSUEDON/>
			<INTERNALAPPROVEDBYKEY/>
			<INTERNALAPPROVEDBY/>
			<INTERNALAPPROVEDBYNAME/>
			<INTERNALAPPROVEDON/>
			<INTERNALSIGNEDBYKEY/>
			<INTERNALSIGNEDBY/>
			<INTERNALSIGNEDBYNAME/>
			<INTERNALSIGNEDON/>
			<INTERNALSOURCE/>
			<INTERNALSOURCEREFNO/>
			<EXTERNALREFNO/>
			<EXTERNALVERBALBYKEY/>
			<EXTERNALVERBALBY/>
			<EXTERNALAPPROVEDBYKEY/>
			<EXTERNALAPPROVEDBY/>
			<EXTERNALAPPROVEDON/>
			<EXTERNALSIGNEDBYKEY/>
			<EXTERNALSIGNEDBY/>
			<EXTERNALSIGNEDON/>
			<PERFORMANCEBONDREQUIRED/>
			<PERFORMANCEBONDRECEIVED/>
			<PERFORMANCEBONDAMOUNT/>
			<PERFORMANCESURETYCOMPANYKEY/>
			<PERFORMANCESURETYCOMPANY/>
			<PERFORMANCESURETYCOMPANYNAME/>
			<PAYMENTBONDREQUIRED/>
			<PAYMENTBONDRECEIVED/>
			<PAYMENTBONDAMOUNT/>
			<PAYMENTSURETYCOMPANYKEY/>
			<PAYMENTSURETYCOMPANY/>
			<PAYMENTSURETYCOMPANYNAME/>
			<HASCHANGE><![CDATA[false]]></HASCHANGE>
			<REVISEDTOTAL/>
			<REVISEDSUBTOTAL/>
			<TRX_REVISEDTOTAL/>
			<TRX_REVISEDSUBTOTAL/>
			<POSTEDCHANGESTOTAL/>
			<RELATEDDOCNO/>
			<CHANGELOGNUMBER/>
			<PROJECTCONTRACTID/>
			<PROJECTCONTRACTKEY/>
			<PCBEXTERNALREFNO/>
			<PCBDESCRIPTION/>
			<PCBDATE/>
			<ARCHITECTKEY/>
			<BILLTHROUGHDATE/>
			<BILLAPPLICATIONNO/>
			<ORGCONTRACTAMT/>
			<NETCHANGES/>
			<REVISEDCONTRACTAMT/>
			<TOTALCOMPLETEDTODATE/>
			<RETCOMPLETEDAMT/>
			<RETSTOREDMATERIALS/>
			<TOTALRETAINAGE/>
			<TOTALEARNEDLESSRET/>
			<LESSPRIORAPPLICATION/>
			<CURRENTAMTDUE/>
			<BALANCETOFINISH/>
			<TCAPMADDITION/>
			<TCAPMDEDUCTION/>
			<TCATMADDITION/>
			<TCATMDEDUCTION/>
			<TOTALNETCHANGESADDITION/>
			<TOTALNETCHANGESDEDUCTION/>
			<TOTALNETCHANGES/>
			<ARCHITECT/>
			<MEGAENTITYKEY/>
			<MEGAENTITYID/>
			<MEGAENTITYNAME/>
			<lines>
				<sodocumententry>
					<ITEMID><![CDATA[Regular]]></ITEMID>
					<UNIT><![CDATA[Each]]></UNIT>
					<QUANTITY><![CDATA[12]]></QUANTITY>
					<MEMO><![CDATA[7AV96850N-Gurukaran Kochar WE: 03/05/2022]]></MEMO>
					<EMPLOYEEID><![CDATA[7AV96850N]]></EMPLOYEEID>
					<LOCATIONID><![CDATA[MID]]></LOCATIONID>
					<CUSTOMERID><![CDATA[F00600]]></CUSTOMERID>
					<PROJECTID><![CDATA[10011]]></PROJECTID>
					<TASKID/>
					<COMMISSION/>
					<GROSS_MARGIN><![CDATA[10.46]]></GROSS_MARGIN>
					<SALESPERSON><![CDATA[Gerry DiPonio]]></SALESPERSON>
					<PRICE><![CDATA[79.73]]></PRICE>
				</sodocumententry>
				<sodocumententry>
					<ITEMID><![CDATA[Regular]]></ITEMID>
					<UNIT><![CDATA[Each]]></UNIT>
					<QUANTITY><![CDATA[12]]></QUANTITY>
					<MEMO><![CDATA[7AV96850N-Gurukaran Kochar WE: 03/12/2022]]></MEMO>
					<EMPLOYEEID><![CDATA[7AV96850N]]></EMPLOYEEID>
					<LOCATIONID><![CDATA[MID]]></LOCATIONID>
					<CUSTOMERID><![CDATA[F00600]]></CUSTOMERID>
					<PROJECTID><![CDATA[test]]></PROJECTID>
					<TASKID/>
					<COMMISSION/>
					<GROSS_MARGIN><![CDATA[10.46]]></GROSS_MARGIN>
					<SALESPERSON><![CDATA[Gerry DiPonio]]></SALESPERSON>
					<PRICE><![CDATA[79.73]]></PRICE>
				</sodocumententry>
			</lines>
			<DESCRIPTION_HEADER><![CDATA[7AV96850N-Gurukaran Kochar WE: 03/12/2022]]></DESCRIPTION_HEADER>
		</sodocument>
		<sodocument>
			<RECORDNO><![CDATA[57]]></RECORDNO>
			<DOCNO><![CDATA[INV52]]></DOCNO>
			<DOCID><![CDATA[Pre-Billing-INV52]]></DOCID>
			<CREATEDFROM/>
			<STATE><![CDATA[Closed]]></STATE>
			<CLOSED/>
			<WHENCREATED><![CDATA[03/10/2022]]></WHENCREATED>
			<AUWHENCREATED><![CDATA[03/10/2022 14:40:32]]></AUWHENCREATED>
			<CREATEDBY><![CDATA[4]]></CREATEDBY>
			<MODIFIEDBY><![CDATA[4]]></MODIFIEDBY>
			<WHENMODIFIED><![CDATA[03/10/2022 14:40:33]]></WHENMODIFIED>
			<WHENDUE><![CDATA[03/10/2022]]></WHENDUE>
			<STATUS><![CDATA[active]]></STATUS>
			<PONUMBER/>
			<VENDORDOCNO/>
			<DOCPARID><![CDATA[Pre-Billing]]></DOCPARID>
			<DOCPARKEY><![CDATA[5]]></DOCPARKEY>
			<DOCPARCLASS><![CDATA[INVOICE]]></DOCPARCLASS>
			<UPDATES_INV><![CDATA[No]]></UPDATES_INV>
			<TERM.NAME/>
			<NOTE/>
			<WAREHOUSE.LOCATIONID/>
			<SHIPVIA/>
			<USER><![CDATA[4]]></USER>
			<CREATEDUSER><![CDATA[4]]></CREATEDUSER>
			<USERID><![CDATA[ExtUser|altavistatech|hmurray1]]></USERID>
			<CREATEDUSERID><![CDATA[ExtUser|altavistatech|hmurray1]]></CREATEDUSERID>
			<CONTACT.CONTACTNAME><![CDATA[CMS]]></CONTACT.CONTACTNAME>
			<CONTACT.PREFIX/>
			<CONTACT.FIRSTNAME/>
			<CONTACT.INITIAL/>
			<CONTACT.LASTNAME/>
			<CONTACT.COMPANYNAME><![CDATA[CMS]]></CONTACT.COMPANYNAME>
			<CONTACT.PRINTAS><![CDATA[CMS]]></CONTACT.PRINTAS>
			<CONTACT.PHONE1/>
			<CONTACT.PHONE2/>
			<CONTACT.CELLPHONE/>
			<CONTACT.PAGER/>
			<CONTACT.FAX/>
			<CONTACT.EMAIL1/>
			<CONTACT.EMAIL2/>
			<CONTACT.URL1/>
			<CONTACT.URL2/>
			<CONTACT.VISIBLE><![CDATA[true]]></CONTACT.VISIBLE>
			<CONTACT.MAILADDRESS.ADDRESS1/>
			<CONTACT.MAILADDRESS.ADDRESS2/>
			<CONTACT.MAILADDRESS.CITY/>
			<CONTACT.MAILADDRESS.STATE/>
			<CONTACT.MAILADDRESS.ZIP/>
			<CONTACT.MAILADDRESS.COUNTRY><![CDATA[United States]]></CONTACT.MAILADDRESS.COUNTRY>
			<CONTACT.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></CONTACT.MAILADDRESS.COUNTRYCODE>
			<SHIPTOKEY><![CDATA[877]]></SHIPTOKEY>
			<SHIPTO.CONTACTNAME><![CDATA[CMS]]></SHIPTO.CONTACTNAME>
			<SHIPTO.PREFIX/>
			<SHIPTO.FIRSTNAME/>
			<SHIPTO.INITIAL/>
			<SHIPTO.LASTNAME/>
			<SHIPTO.COMPANYNAME><![CDATA[CMS]]></SHIPTO.COMPANYNAME>
			<SHIPTO.PRINTAS><![CDATA[CMS]]></SHIPTO.PRINTAS>
			<SHIPTO.PHONE1/>
			<SHIPTO.PHONE2/>
			<SHIPTO.CELLPHONE/>
			<SHIPTO.PAGER/>
			<SHIPTO.FAX/>
			<SHIPTO.EMAIL1/>
			<SHIPTO.EMAIL2/>
			<SHIPTO.URL1/>
			<SHIPTO.URL2/>
			<SHIPTO.VISIBLE><![CDATA[true]]></SHIPTO.VISIBLE>
			<SHIPTO.MAILADDRESS.ADDRESS1/>
			<SHIPTO.MAILADDRESS.ADDRESS2/>
			<SHIPTO.MAILADDRESS.CITY/>
			<SHIPTO.MAILADDRESS.STATE/>
			<SHIPTO.MAILADDRESS.ZIP/>
			<SHIPTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></SHIPTO.MAILADDRESS.COUNTRY>
			<SHIPTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></SHIPTO.MAILADDRESS.COUNTRYCODE>
			<BILLTOKEY><![CDATA[877]]></BILLTOKEY>
			<BILLTO.CONTACTNAME><![CDATA[CMS]]></BILLTO.CONTACTNAME>
			<BILLTO.PREFIX/>
			<BILLTO.FIRSTNAME/>
			<BILLTO.INITIAL/>
			<BILLTO.LASTNAME/>
			<BILLTO.COMPANYNAME><![CDATA[CMS]]></BILLTO.COMPANYNAME>
			<BILLTO.PRINTAS><![CDATA[CMS]]></BILLTO.PRINTAS>
			<BILLTO.PHONE1/>
			<BILLTO.PHONE2/>
			<BILLTO.CELLPHONE/>
			<BILLTO.PAGER/>
			<BILLTO.FAX/>
			<BILLTO.EMAIL1/>
			<BILLTO.EMAIL2/>
			<BILLTO.URL1/>
			<BILLTO.URL2/>
			<BILLTO.VISIBLE><![CDATA[true]]></BILLTO.VISIBLE>
			<BILLTO.MAILADDRESS.ADDRESS1/>
			<BILLTO.MAILADDRESS.ADDRESS2/>
			<BILLTO.MAILADDRESS.CITY/>
			<BILLTO.MAILADDRESS.STATE/>
			<BILLTO.MAILADDRESS.ZIP/>
			<BILLTO.MAILADDRESS.COUNTRY><![CDATA[United States]]></BILLTO.MAILADDRESS.COUNTRY>
			<BILLTO.MAILADDRESS.COUNTRYCODE><![CDATA[US]]></BILLTO.MAILADDRESS.COUNTRYCODE>
			<MESSAGE/>
			<PRRECORDKEY/>
			<INVBATCHKEY/>
			<PRINVBATCHKEY><![CDATA[25]]></PRINVBATCHKEY>
			<ADDGLBATCHKEY/>
			<PRINTED><![CDATA[No]]></PRINTED>
			<BACKORDER><![CDATA[No]]></BACKORDER>
			<SUBTOTAL><![CDATA[3091.62]]></SUBTOTAL>
			<TOTAL><![CDATA[3091.62]]></TOTAL>
			<ENTGLGROUP/>
			<CURRENCY><![CDATA[USD]]></CURRENCY>
			<EXCHRATEDATE><![CDATA[03/10/2022]]></EXCHRATEDATE>
			<EXCHRATETYPES.NAME/>
			<EXCHRATE><![CDATA[1]]></EXCHRATE>
			<SCHOPKEY/>
			<SALESCONTRACT><![CDATA[N]]></SALESCONTRACT>
			<USEDASCONTRACT/>
			<TRX_SUBTOTAL><![CDATA[3091.62]]></TRX_SUBTOTAL>
			<TRX_TOTAL><![CDATA[3091.62]]></TRX_TOTAL>
			<EXCH_RATE_TYPE_ID/>
			<RENEWEDDOC/>
			<BASECURR><![CDATA[USD]]></BASECURR>
			<SYSTEMGENERATED><![CDATA[false]]></SYSTEMGENERATED>
			<INVOICERUNKEY><![CDATA[33]]></INVOICERUNKEY>
			<DOCPAR_IN_OUT><![CDATA[Increase]]></DOCPAR_IN_OUT>
			<WHENPOSTED/>
			<PRINTEDUSERID/>
			<DATEPRINTED/>
			<PRINTEDBY/>
			<ADJ><![CDATA[false]]></ADJ>
			<TAXSOLUTIONKEY/>
			<TAXSOLUTIONID/>
			<SHOWMULTILINETAX/>
			<TAXMETHOD/>
			<CUSTREC><![CDATA[64]]></CUSTREC>
			<CUSTVENDID><![CDATA[F00600]]></CUSTVENDID>
			<CUSTVENDNAME><![CDATA[CMS]]></CUSTVENDNAME>
			<CUSTVENDEMAILOPTIN><![CDATA[false]]></CUSTVENDEMAILOPTIN>
			<HASPOSTEDREVREC/>
			<CONTRACTID/>
			<CONTRACTDESC/>
			<TRX_TOTALPAID/>
			<TOTALPAID/>
			<TRX_TOTALENTERED/>
			<TOTALENTERED/>
			<TRX_TOTALDUE/>
			<TOTALDUE/>
			<PAYMENTSTATUS><![CDATA[Open]]></PAYMENTSTATUS>
			<SIGN_FLAG><![CDATA[1]]></SIGN_FLAG>
			<VSOEPRICELIST/>
			<VSOEPRCLSTKEY/>
			<ORIGDOCDATE/>
			<HASADVBILLING/>
			<INVOICERUN_EXPENSEPRICEMARKUP/>
			<INVOICERUN_DESCRIPTION><![CDATA[Invoice Run Created at 2022-03-10 14:40:32  GMT]]></INVOICERUN_DESCRIPTION>
			<PROJECTKEY/>
			<PROJECT/>
			<PROJECTNAME/>
			<CNCONTRACTKEY/>
			<CNCONTRACTID/>
			<CNCONTRACTNAME/>
			<NEEDBYDATE/>
			<SHIPBYDATE/>
			<CANCELAFTERDATE/>
			<DONOTSHIPBEFOREDATE/>
			<DONOTSHIPAFTERDATE/>
			<SERVICEDELIVERYDATE/>
			<TRACKINGNUMBER/>
			<SHIPPEDDATE/>
			<CUSTOMERPONUMBER/>
			<RETAINAGEPERCENTAGE/>
			<SCOPE/>
			<INCLUSIONS/>
			<EXCLUSIONS/>
			<TERMS/>
			<SCHEDULESTARTDATE/>
			<ACTUALSTARTDATE/>
			<SCHEDULEDCOMPLETIONDATE/>
			<REVISEDCOMPLETIONDATE/>
			<SUBSTANTIALCOMPLETIONDATE/>
			<ACTUALCOMPLETIONDATE/>
			<NOTICETOPROCEED/>
			<RESPONSEDUE/>
			<EXECUTEDON/>
			<SCHEDULEIMPACT/>
			<INTERNALREFNO/>
			<INTERNALINITIATEDBYKEY/>
			<INTERNALINITIATEDBY/>
			<INTERNALINITIATEDBYNAME/>
			<INTERNALVERBALBYKEY/>
			<INTERNALVERBALBY/>
			<INTERNALVERBALBYNAME/>
			<INTERNALISSUEDBYKEY/>
			<INTERNALISSUEDBY/>
			<INTERNALISSUEDBYNAME/>
			<INTERNALISSUEDON/>
			<INTERNALAPPROVEDBYKEY/>
			<INTERNALAPPROVEDBY/>
			<INTERNALAPPROVEDBYNAME/>
			<INTERNALAPPROVEDON/>
			<INTERNALSIGNEDBYKEY/>
			<INTERNALSIGNEDBY/>
			<INTERNALSIGNEDBYNAME/>
			<INTERNALSIGNEDON/>
			<INTERNALSOURCE/>
			<INTERNALSOURCEREFNO/>
			<EXTERNALREFNO/>
			<EXTERNALVERBALBYKEY/>
			<EXTERNALVERBALBY/>
			<EXTERNALAPPROVEDBYKEY/>
			<EXTERNALAPPROVEDBY/>
			<EXTERNALAPPROVEDON/>
			<EXTERNALSIGNEDBYKEY/>
			<EXTERNALSIGNEDBY/>
			<EXTERNALSIGNEDON/>
			<PERFORMANCEBONDREQUIRED/>
			<PERFORMANCEBONDRECEIVED/>
			<PERFORMANCEBONDAMOUNT/>
			<PERFORMANCESURETYCOMPANYKEY/>
			<PERFORMANCESURETYCOMPANY/>
			<PERFORMANCESURETYCOMPANYNAME/>
			<PAYMENTBONDREQUIRED/>
			<PAYMENTBONDRECEIVED/>
			<PAYMENTBONDAMOUNT/>
			<PAYMENTSURETYCOMPANYKEY/>
			<PAYMENTSURETYCOMPANY/>
			<PAYMENTSURETYCOMPANYNAME/>
			<HASCHANGE><![CDATA[false]]></HASCHANGE>
			<REVISEDTOTAL/>
			<REVISEDSUBTOTAL/>
			<TRX_REVISEDTOTAL/>
			<TRX_REVISEDSUBTOTAL/>
			<POSTEDCHANGESTOTAL/>
			<RELATEDDOCNO/>
			<CHANGELOGNUMBER/>
			<PROJECTCONTRACTID/>
			<PROJECTCONTRACTKEY/>
			<PCBEXTERNALREFNO/>
			<PCBDESCRIPTION/>
			<PCBDATE/>
			<ARCHITECTKEY/>
			<BILLTHROUGHDATE/>
			<BILLAPPLICATIONNO/>
			<ORGCONTRACTAMT/>
			<NETCHANGES/>
			<REVISEDCONTRACTAMT/>
			<TOTALCOMPLETEDTODATE/>
			<RETCOMPLETEDAMT/>
			<RETSTOREDMATERIALS/>
			<TOTALRETAINAGE/>
			<TOTALEARNEDLESSRET/>
			<LESSPRIORAPPLICATION/>
			<CURRENTAMTDUE/>
			<BALANCETOFINISH/>
			<TCAPMADDITION/>
			<TCAPMDEDUCTION/>
			<TCATMADDITION/>
			<TCATMDEDUCTION/>
			<TOTALNETCHANGESADDITION/>
			<TOTALNETCHANGESDEDUCTION/>
			<TOTALNETCHANGES/>
			<ARCHITECT/>
			<MEGAENTITYKEY/>
			<MEGAENTITYID/>
			<MEGAENTITYNAME/>
			<lines>
				<sodocumententry>
					<ITEMID><![CDATA[Regular]]></ITEMID>
					<UNIT><![CDATA[Each]]></UNIT>
					<QUANTITY><![CDATA[5]]></QUANTITY>
					<MEMO><![CDATA[7AV96850N-Gurukaran Kochar WE: 03/12/2022]]></MEMO>
					<EMPLOYEEID><![CDATA[test]]></EMPLOYEEID>
					<LOCATIONID><![CDATA[MID]]></LOCATIONID>
					<CUSTOMERID><![CDATA[F00600]]></CUSTOMERID>
					<PROJECTID><![CDATA[test]]></PROJECTID>
					<TASKID/>
					<COMMISSION/>
					<GROSS_MARGIN><![CDATA[10.46]]></GROSS_MARGIN>
					<SALESPERSON><![CDATA[Gerry DiPonio]]></SALESPERSON>
					<PRICE><![CDATA[0]]></PRICE>
				</sodocumententry>
			</lines>
			<DESCRIPTION_HEADER><![CDATA[7AV96850N-Gurukaran Kochar WE: 03/12/2022]]></DESCRIPTION_HEADER>
		</sodocument>
	</data>
</root>

Just wanted to bump this to the top. if you have any ideas, let me know

Automation loops don’t work like programming loops or loops in assemblies.

What an automation loop does is to look at the output fields of the assigned action. It checks each emitted field from the action and finds the field with the most array elements. Then it iterates for that many times.

Within the loop path, for each iteration it uses the current loop iteration number when mapping each mapped field. If a field is not an array that single mapped value is used each iteration. If the iteration number is less than the size of a mapped array, it uses that iteration number as the index to grab the array element. If the iteration number is bigger than a mapped array, it then uses the last array element.

When loops are nested in the automation editor, the same logic applies, but this can lead to unexpected results b/c the field mappings for array items are always controlled by the innermost loop.

Sorry, but again what you describe is too complex. I really need a barebones skeleton example that just demonstrates the issue in isolation so I can see what you mean.

so based on the sample data i have above, there is no way to get it to loop the 3 times (because 3 invoices). it will always go to the detail level because there are more of those.

sounds like the only solution is to do it all within one action and do the invoice creation in a subassembly.

Just an idea then for future is a loop action that you can set the node you want it to loop on. it would read the data from the previous action and allow you to set the level you want to loop.

The action mapped to the loop is what controls the number of loop iterations via its largest emitted array.

If you need a loop that only iterates on invoices, you can use the Transform Data “Emit data field as an array to loop” action and map an invoice field value. Then map that action to the loop. Then the loop will only iterate as many times as there are invoices. Basically you are ignoring line items for the calculation of the loop iterations.

i think that is exactly what i was looking for. so using that, it will loop on the invoice level but still allow each iteration to use the correct respective detail lines, correct?

ok, tried that and it is looping based on the number of invoices, great. but it seems no matter now i set it up, it treats the lines as an array for the whole set and not an array of each invoice. so the first invoice uses the first detail line, second uses the second, etc. how do i get it to recognize the correct lines with each?

if it helps i would HAPPILY jump on a call and share my screen to show what i mean. it would take 2 minutes to explain.

Have taken a look at your automation 470.

The problem is with the output from this action:

You are trying to emit nested information as output from that action. But all an action can output are individual arrays. I see you have 3 record numbers for 3 invoices. But then here in the screenshot you can see that there is no way to associate which line items go to which invoice.

One approach is to encode the nested line item arrays.

So for this line item value:

lines_sodocumententry_PRICE:

[65.45]

[65.45]

[79.73]

[79.73]

[0]

Let’s say the 65.45 are 2 line item values for invoice #1, 79.73 are for invoice #2, and 0 is for invoice #3.

To emit those in a manner that can be processed, they would need to be emitted as:

lines_sodocumententry_PRICE:

[65.45~65.45]

[79.73~79.73]

[0]

With tilde “~” being used as a separator. The choice of separator needs to be something safe that cannot occur in the data values.

Now, the automation loop can process these b/c each array element represents the line item values for each invoice. You would then need to use the Transform Data “parse array elements from text” to split out the line item values on the tildes to create an array of those values. You will have to repeat this for every line item field.

Maybe it would be easier to do all the needed processing in assembly logic?

follow up for an idea i have to make it easier for what i need. is there an easy way to embed the serialize into the data row loop? basically i would like to take each sodocument, convert the entire thing including all of the node names, data, and children, and turn it into a single string. then it would be easy to send it change my invoice assembly to accept that, convert back to a data stream, and handle accordingly. thoughts?

Sorry for the delay, the forum failed to email me about your response. Feel free to ping our normal support channels when you don’t get a timely response here. Normally the forum will email alerts within an hour.

Yes, that is a great idea!

In your outer assembly, use the Data Nodes - Serialize module to serialize each invoice into an XML string that can be output as an action output value (will be an array of invoice XML).

Then within the loop in the inner action, receive that XML and turn it into a data stream (DOM) via the Data Streams - create from text module.

Sorry I didn’t think of that sooner. So many different ways to solve problems…

i thought it was a great idea too but the serial module isnt compatible with the loop module. it wont allow it. do you know of a way to do the same or to get that to work?

Can be done in inlined JSP code. Something like:

<jsp:useBean id="appJSP" class="appServer.AppInterfaceAssemblyJSP" scope="page"/><%@page import="appServer.*, java.util.*" contentType="text/xml; charset=UTF-8"%><%

String xml = "DATASTREAM1";

try
{
    appJSP.registerJSP(Thread.currentThread());
	
    VTDDocument doc = new VTDDocument(xml);
    
    List<VTDElement> listInvoices = doc.selectNodes("XPATH_TO_INVOICES");
    for (VTDElement elInvoice : listInvoices)
    {
        doc.getRootElement().addElement("invoice_xml", elInvoice.asXML());
    }
    
    out.println(doc.commit().asXML());
}
catch (Exception e)
{
    appJSP.writeError(out, e);
}
finally
{
	appJSP.unregisterJSP(Thread.currentThread());
}
%>

Code is not tested, but a general idea. Will result in <invoice_xml> nodes under the root node containing the invoices as strings of XML.

oh duh. yeah. didnt think of doing it that way.

ok thanks. i think i can get something similar to work. appreciate it