How to add XML file to PDFA as Factur-X attachment

XFRX 19.0.0 has method CreateFACTURXMetadata()

Workaround for XFRX 17.3-18.2

LOCAL m.lcXFRX, m.lnRetVal, m.lcXMLMD, m.lcRDFMD, m.lcXMLFile
m.lcXMLFile="c:\temp\Factur-X.xml"
m.loXFRX=EVALUATE([xfrx("XFRX#INIT")])
m.lnRetVal = loXFRX.SetParams("Factur-X.pdf",,,,.T.,,"PDF")
IF m.lnRetVal = 0
   m.loXFRX.setpdfa(.T.,"3B") && Must version 3

   m.lcXMLMD=[  <rdf:Description rdf:about="" xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#">]+CHR(13)+CHR(10)+;
             [   <fx:ConformanceLevel>BASIC</fx:ConformanceLevel>]+CHR(13)+CHR(10)+;
             [   <fx:DocumentFileName>]+JUSTFNAME(m.lcXMLFile)+[</fx:DocumentFileName>]+CHR(13)+CHR(10)+;
             [   <fx:DocumentType>INVOICE</fx:DocumentType>  ]+CHR(13)+CHR(10)+;
             [   <fx:Version>1.0</fx:Version>]+CHR(13)+CHR(10)+;
             [  </rdf:Description>]+CHR(13)+CHR(10)

   m.lcRDFMD=[     <rdf:li rdf:parseType="Resource">]+CHR(13)+CHR(10)+;
             [      <pdfaSchema:schema>Factur-X PDFA Extension Schema</pdfaSchema:schema>]+CHR(13)+CHR(10)+;
             [      <pdfaSchema:namespaceURI>urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#</pdfaSchema:namespaceURI>]+CHR(13)+CHR(10)+;
             [      <pdfaSchema:prefix>fx</pdfaSchema:prefix>]+CHR(13)+CHR(10)+;
             [      <pdfaSchema:property>]+CHR(13)+CHR(10)+;
             [       <rdf:Seq>]+CHR(13)+CHR(10)+;
             [        <rdf:li rdf:parseType="Resource">]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:name>DocumentFileName</pdfaProperty:name>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:valueType>Text</pdfaProperty:valueType>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:category>external</pdfaProperty:category>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:description>name of the embedded XML invoice file</pdfaProperty:description>]+CHR(13)+CHR(10)+;
             [        </rdf:li>]+CHR(13)+CHR(10)+;
             [        <rdf:li rdf:parseType="Resource">]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:name>DocumentType</pdfaProperty:name>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:valueType>Text</pdfaProperty:valueType>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:category>external</pdfaProperty:category>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:description>INVOICE</pdfaProperty:description>]+CHR(13)+CHR(10)+;
             [        </rdf:li>]+CHR(13)+CHR(10)+;
             [        <rdf:li rdf:parseType="Resource">]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:name>Version</pdfaProperty:name>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:valueType>Text</pdfaProperty:valueType>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:category>external</pdfaProperty:category>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:description>The actual version of the Factur-X XML schema</pdfaProperty:description>]+CHR(13)+CHR(10)+;
             [        </rdf:li>]+CHR(13)+CHR(10)+;
             [        <rdf:li rdf:parseType="Resource">]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:name>ConformanceLevel</pdfaProperty:name>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:valueType>Text</pdfaProperty:valueType>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:category>external</pdfaProperty:category>]+CHR(13)+CHR(10)+;
             [         <pdfaProperty:description>The conformance level of the embedded Factur-X data</pdfaProperty:description>]+CHR(13)+CHR(10)+;
             [        </rdf:li>]+CHR(13)+CHR(10)+;
             [       </rdf:Seq>]+CHR(13)+CHR(10)+;
             [      </pdfaSchema:property>]+CHR(13)+CHR(10)+;
             [     </rdf:li>]+CHR(13)+CHR(10)

   m.loXFRX.AddAttachment(m.lcXMLFile, .T., "XML-Format", "text/XML", "Data", m.lcXMLMD)
   m.loXFRX.AttachmentsList.cExtensiondata=m.lcRDFMD

   m.loXFRX.ProcessReport("FActur-X.frx")
ENDIF

Use method CreateFACTURXMetadata()

LOCAL m.lcXFRX, m.lnRetVal, m.lcXMLFile, m.loFile
m.lcXMLFile="c:\temp\Factur-X.xml" 
m.loXFRX=EVALUATE([xfrx("XFRX#INIT")]) 
m.lnRetVal = loXFRX.SetParams("Factur-X.pdf",,,,.T.,,"PDF")
IF m.lnRetVal = 0 
   m.loXFRX.setpdfa(.T.,"3B") && Must version 3
   m.loFile=m.loXFRX.AddAttachment(m.lcXMLFile, .T., "XML-Format", "text/XML", "Data")
   m.loFile.CreateFACTURXMetadata("BASIC", "INVOICE", "1.0")

   m.loXFRX.ProcessReport("FActur-X.frx")
ENDIF