Rony Rabijns Posted January 31, 2018 Posted January 31, 2018 Ik loop al een paar dagen tegen een probleem aan dat ik maar niet opgelost krijg. Misschien kan één van jullie het licht laten schijnen ? Probleem : Alle klanten die orders hebben worden geëxporteerd met de daarbij horende orderlijnen. Ik exporteer vanuit FMP naar XML via een stylesheet. In de output zie ik netjes alle orders van de klanten gegroepeerd zitten. Waar ik niet in slaag is om de orderlijnen per order te groeperen. In bijlage de XLS stylesheet "crowndesk-fout.xsl” die de data formatteert. De XML "crowndesk-fout.xml" is de output van mijn stylesheet. ps : Ik heb bij wijze van demo slechts 1 klant geëxporteerd, in werkelijkheid gaat het over 100-den klanten in 1 XML. Wat ik eigenlijk wil is "crowndesk-correct.xml". "crowndesk-velden" is een screenshot van de velden die gebruikt worden in FMP. Kan iemand me helpen met de opbouw van de stylesheet ? Alvast bedankt om me iets te laten weten. crowndesk.zip Quote
0 menno Posted February 1, 2018 Posted February 1, 2018 Ik ga er gemakshalve vanuit dat de portaal-records met de artikelen die je exporteert alle velden data bevatten ( test of er meer dan 1 portaal-record is) en heb jouw xsl zodoende iets uitgebreid. Denk dat je zo verder kan: <?xml version="1.0" encoding="UTF-8"?> <!-- Sectie waarin de een namespace wordt gedeclareerd, om verwarring voor de parser te voorkomen (letterlijk). De namespace wordt daarna door "exclude-result-prefixes" uit het eind-resultaat weggefilterd --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpxmlresult" version="1.0" exclude-result-prefixes="fmp"> <!-- Het type eindresultaat (in dit geval XML) wordt hier bepaald, net als de encoding, m.a.w. de kopregel "<?xml etc...." met "indent" wordt de parser verteld dat de ¶ naar het eindresultaat gaan --> <xsl:output method="XML" version="1.0" encoding="UTF-8" indent="yes" /> <xsl:strip-space elements="*"/> <!-- Dit element is een verplichte en moet altijd aan het begin staan van de transformatie --> <xsl:template match="fmp:FMPXMLRESULT"> <!-- Hier start de "root" van het nieuwe document --> <crowndesk> <xsl:for-each select="fmp:RESULTSET/fmp:ROW[generate-id() = generate-id(key('rows', fmp:COL[1]/fmp:DATA)[1])]"> <!-- Voor elke ROW van de RESULSET wordt het volgende geschreven: --> <klant> <id><xsl:value-of select="fmp:COL[1]/fmp:DATA"/></id> <orders> <xsl:for-each select="key('rows', fmp:COL[1]/fmp:DATA)"> <order_nummer><xsl:value-of select="fmp:COL[11]/fmp:DATA"/></order_nummer> <order_referentie><xsl:value-of select="fmp:COL[12]/fmp:DATA"/></order_referentie> <xsl:if test="fmp:COL[18]/fmp:DATA[2]=''"> <!-- Er is maar één artikel op de order, dus wordt er geen element 'orderlijnen' gemaakt --> <order_artikel><xsl:value-of select="fmp:COL[16]/fmp:DATA"/></order_artikel> <order_aantal_besteld><xsl:value-of select="fmp:COL[17]/fmp:DATA"/></order_aantal_besteld> </xsl:if> <xsl:if test="fmp:COL[18]/fmp:DATA[2]!=''"> <!-- Er meerdere artikelen op de order, dus wordt er een element 'orderlijnen' gemaakt --> <orderlijnen> <!-- In de FMPXMLRESULT worden portaalrecords weergegeven als <COL> <DATA/> <DATA/> </COL> Dmv door het aantal achtereenvolgende "DATA" elementen te lussen kunnen portaalrecords worden opgebouwd. Weer voor de leesbaarheid is het handig om de opbouw van een portaalrecord in template te doen. de functie "position()" geeft hier de iteratie mee met de aanroep, zodat de template, de juiste 'occurrence' van DATA-element oppikt. --> <xsl:for-each select="fmp:COL[17]/fmp:DATA"> <xsl:call-template name="portaalrecords"><xsl:with-param name="portaalrijnr" select="position()"/></xsl:call-template> </xsl:for-each> </orderlijnen> </xsl:if> </xsl:for-each> </orders> </klant> <!-- de variabelen bestaan vanaf hier niet meer --> </xsl:for-each> </crowndesk> </xsl:template> <!-- De portaalrecords worden hier uitgelezen en gebruikt om de orderregels op te bouwen --> <xsl:template name="portaalrecords"> <xsl:param name="portaalrijnr"/> <orderlijn> <!-- Hier wordt de inhoud van "orderregel" gevuld --> <order_artikel><xsl:value-of select="../../fmp:COL[16]/fmp:DATA[$portaalrijnr]"/></order_artikel> <order_aantal_besteld><xsl:value-of select="../../fmp:COL[17]/fmp:DATA[$portaalrijnr]"/></order_aantal_besteld> </orderlijn> </xsl:template> </xsl:stylesheet> Quote
0 Rony Rabijns Posted February 1, 2018 Author Posted February 1, 2018 Dag Menno, Bedankt voor het meedenken. Als ik je XSL bekijk, denk ik dat je vertrekt van een verkeerd gegeven : ik exporteer vanuit een "platte" tabel. Dus er zijn geen gerelateerde records. Ieder record is een orderlijn met ordernummer, artikel, aantal. Indien een order origineel meerdere lijnen had, zijn dat nu meerdere records geworden. Maar in de output wil inderdaad de orderlijnen (opnieuw) groeperen onder één order. Rony Quote
0 menno Posted February 1, 2018 Posted February 1, 2018 zonder het fmpxmlresult is het gokken wat het uitgangspunt is en aangezien een header-regel structuur het meest gebruikt is heb ik het zo opgelost. Verder kan ik me eigenlijk niet voorstellen dat je dat niet beschikbaar hebt, dus áls je orders en regel hebt hebt, dan kan je gewoon orders met regels exporteren en werkt het stylesheet gewoon Quote
Question
Rony Rabijns
Ik loop al een paar dagen tegen een probleem aan dat ik maar niet opgelost krijg.
Misschien kan één van jullie het licht laten schijnen ?
Probleem :
Alle klanten die orders hebben worden geëxporteerd met de daarbij horende orderlijnen.
Ik exporteer vanuit FMP naar XML via een stylesheet.
In de output zie ik netjes alle orders van de klanten gegroepeerd zitten.
Waar ik niet in slaag is om de orderlijnen per order te groeperen.
In bijlage de XLS stylesheet "crowndesk-fout.xsl” die de data formatteert.
De XML "crowndesk-fout.xml" is de output van mijn stylesheet.
ps : Ik heb bij wijze van demo slechts 1 klant geëxporteerd, in werkelijkheid gaat het over 100-den klanten in 1 XML.
Wat ik eigenlijk wil is "crowndesk-correct.xml".
"crowndesk-velden" is een screenshot van de velden die gebruikt worden in FMP.
Kan iemand me helpen met de opbouw van de stylesheet ?
Alvast bedankt om me iets te laten weten.
crowndesk.zip
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.