2016-05-12 4 views
0

Ich muss die 1. Ebene Normalisierung von den Eingangsdaten von Excel. [Eingabe Excel] [1].CSV zu CSV Transformation mit Dataweave in Mule

Jetzt soll die Ausgabe wie [Ausgabedatei] [2] sein. Ich habe versucht, MEL (Definieren einer Methode als globale Konfiguration) in Kombination von Dataweave. Inside dataweave versuche ich die oben definierte Methode als globale Konfiguration aufzurufen. Dieser Ansatz funktioniert nicht, da die generierte Datei leer ist. Könnte jemand einen besseren Ansatz oder ein Problem in diesem Ansatz vorschlagen? Unten ist der Code @Manik:

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" 
    xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd"> 

    <configuration doc:name="Configuration"> 
    <expression-language> 
     <global-functions> 
      def getCompanyName(name){ 
       if (flowVars.companyList contains name) { 
        return ""; 
       } else { 
        flowVars.companyList.add(name); 
        return name; 
       } 
      } 
      </global-functions> 
    </expression-language> 
</configuration> 


    <file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File" readFromDirectory="C:\Users\Desktop\Mule-Doc"/> 
    <file:connector name="File1" autoDelete="true" outputAppend="true" streaming="true" validateConnections="true" doc:name="File"/> 


    <flow name="csvnormalizationFlow"> 
     <file:inbound-endpoint path="C:\Users\Desktop\Mule-Doc" connector-ref="File" responseTimeout="10000" doc:name="File"/> 
     <set-variable value="#[[]]" variableName="companyList" doc:name="Variable" mimeType="application/csv"/> 
     <logger message="The payload is-----------------------#[payload]" level="INFO" doc:name="Logger"/> 
     <dw:transform-message doc:name="Transform Message"> 
      <dw:set-payload><![CDATA[%dw 1.0 

%output application/csv header=true 
--- 
payload map { 
    CompanyName: getCompanyName($.Company), 
    location:$.Location 
}]]></dw:set-payload> 
     </dw:transform-message> 

     <file:outbound-endpoint path="C:\Users\Desktop\Output" outputPattern="test.csv" connector-ref="File1" responseTimeout="10000" doc:name="File"/> 
    </flow> 
</mule> 
+0

Könnten Sie bitte posten Sie Ihre MEL-Funktion und dataweave Skript – AnupamBhusari

+0

Die MEL-Funktion def getCompanyName (name) { if (flowVars.companyList enthält den Namen) { return ""; } sonst { flowVars.companyList.add (Name); Name zurückgeben; } }

+0

Der dataweave Code ist

Antwort

0

komplette Antwort ist - https://stackoverflow.com/a/37123291/5616671

Können Sie Ihre Flow xml hier posten? Ich habe diesen Code ausgeführt und er gibt mir die erwartete Ausgabe.

+0

Ich habe den Code für Ihre Rezension hinzugefügt. Ich arbeite an der Community Edition. –

+0

Zeichnet der Logger Payload vor Datenweave? Bitte entfernen Sie auch mime-type von der Set-Variablen-Deklaration. –

+0

: Können Sie den Code ausführen, den ich geteilt habe? –

-1

Sie können einen Null-Handler aus Ihren Data-Webe-Ausdrücken hinzufügen und prüfen, ob es die Payload ist, die nichts schreibt. Ein Beispiel für den Nullpunkt unten.

(payload.listAllFlightsResponse.*return default [])