4.4.Anzeige-Layouts

Eine EDI-Datei (EDIFACT/IDOC/VDA/ANSIX12) wird standardmäßig lt. Syntax-Directory angezeigt,
also mit Feldname und Feldwert.
Bei XML-Dateien werden Zeilenumbrüche eingefügt oder, wenn ShortView aktiv ist,
zeilenweise, komprimiert angezeigt.

Wird jedoch ein Layout-Directory angegeben, und gibt es für das erkannte File-Format ein
passendes Layout, so wird dieses zur Aufbereitung der Datei verwendet.

Als Layout-Tool wird JasperReports unterstützt.

Das folgende Beispiel basiert auf:

  • EDIFACT-INVRPT-Nachricht
  • Als Layout-Directory wurde das Standardverzeichnis „layouts" ausgewählt
  • Als Wunschsprache wurde „Englisch" ausgewählt

  • Im Layout-Directory „layouts" existieren zum File-Format drei passende Layout-Dateien,
    - EDIFACT_96A_INVRPT.datasel
    - EDIFACT_XXX_INVPRT_de_en.jrxml
    - EDIFACT_XXX_INVRPT_de_en.jasper

    was dann zu folgender Layout-Aufbereitung führt:


    Über die Report-Toolbar kann im Report geblättert, gezoomt und gedruckt werden.

 

Layout-Directory

Die standardmäßig ausgelieferten Beispiel-Layout-Dateien befinden sich in den Verzeichnissen
„layouts" und "layoutsEdifileChecker".

Über das Customizing können eigene Layout-Verzeichnisse angelegt, gelöscht und umbenannt werden.
Layout-Verzeichnisse können im Userverzeichnis und, mit Schreibrechten, auch im
Programmverzeichnis angelegt werden. Layout-Verzeichnisse müssen mit „layout" beginnen.
Wurde im ausgewählten Layout-Verzeichnis keine passende Datenselektionsdatei (DATASEL) gefunden,
so wird auch das Standard-Verzeichnis "layouts" durchsucht.

3 Layout-Dateien

  1. In der DATASEL-Datei werden die Datenselektionen zur Erzeugung einer CSV-Datei definiert.
  2. In der JRXML-Datei wird das Layout definiert, um die CSV/XML-Daten anzuzeigen.
  3. Die JASPER-Datei ist eine kompilierte JRXML-Datei und wird von R2EdiViewer
    zur Anzeige der EDI-Datei verwendet.
    Existiert nur eine JRXML-Datei wird diese zu einer JASPER-Datei kompiliert.

 

Namenskonventionen

Für die 3 Layout-Dateien gelten folgende Namenskonventionen:

Layout-Datei

Format

DATASEL

F[_UNB0004][_UNB0010][_UNB0026].datasel
F[_ISAI06][_ISAI07][_GS479].datasel
F[_DC40DIRECT][_DC40MESTYP][_DC40SNDPRN][_DC40RCVPRN].datasel

JRXML

Identisch zu DATASEL plus optionalem Sprachkürzel [_L].jrxml

JASPER

Identisch zu DATASEL plus optionalem Sprachkürzel [_L].jasper


Bedeutung

F

File-Format aus dem Reiter „File statistics", also z.B.:
- EDIFACT_96A_DELFOR
- SAPIDOC_DELFOR02
- VDA_ALL_4905
- ANSIX12_004010_830
- XML_ALL

_UNB0004  _ISAI06
_UNB0010  _ISAI07
_UNB0026  _GS479

Optional möglich bei Edifact/Odette/AnsiX12-Dateien, wobei folgende
Suchstrategie verwendet wird:
1. _UNB0004_UNB0010_UNB0026
2. _UNB0010_UNB0026
3. _UNB0004_UNB0026
4. _UNB0004_UNB0010
5. _UNB0026
6. _UNB0010
7. _UNB0004
8. File-Format_XXX_Nachricht (z.B. EDIFACT_XXX_INVOIC)

DC40DIRECT
DC40MESTYP
DC40SNDPRN
DC40RCVPRN

Optional möglich bei IDoc-Dateien, wobei folgende
Suchstrategie verwendet wird:
01. _DC40DIRECT_DC40MESTYP_DC40SNDPRN_DC40RCVPRN
02. _DC40DIRECT_DC40MESTYP_DC40RCVPRN
03. _DC40DIRECT_DC40MESTYP_DC40SNDPRN
04. _DC40DIRECT_DC40SNDPRN_DC40RCVPRN
05. _DC40DIRECT_DC40RCVPRN
06. _DC40DIRECT_DC40SNDPRN
07. _DC40DIRECT_DC40MESTYP
08. _DC40DIRECT
09. _DC40MESTYP_DC40SNDPRN_DC40RCVPRN
10. _DC40MESTYP_DC40RCVPRN
11. _DC40MESTYP_DC40SNDPRN
12. _DC40SNDPRN_DC40RCVPRN
13. _DC40RCVPRN
14. _DC40SNDPRN
15. _DC40MESTYP

_L

Optionales Sprachkürzel in Kleinbuchstaben (de,en,fr), wobei folgende
Suchstrategie verwendet wird:
1. Suche in der Wunschsprache lt. Startparameter
2. Suche in Englisch
3. Suche in Deutsch
4. Suche in Französisch
5. Suche ohne Sprachkürzel

 

Gültige Beispiele:

  • VDA_ALL_4905.datasel
  • VDA_ALL_4905 _de.jrxml
  • VDA_ALL_4905 _de.jasper
  • SAPIDOC_ORDERS05_2_DELORD _de.jrxml
  • EDIFACT_97A_DELFOR _1234567890TEST.datasel
  • ANSIX12_004010_830 _en.jrxml

(info) Direktive

Mit der DATASEL-Direktive {JasperreportName} kann ein beliebiger Layoutname angegeben werden.

 

4.4.1. Datenselektion in der DATASEL-Datei

In der DATASEL-Datei werden die nötigen Datenselektions-Anweisungen zur Erzeugung
einer CSV-Datei hinterlegt, d.h. hiermit wird festgelegt, welche EDI-Felder für das neue Layout
verwendet werden sollen.
Für XML-Layouts wird keine DATASEL-Datei benötigt.

Über das Customizing können DATASEL-Dateien angelegt (mit oder ohne Vorlage), geändert,
umbenannt, verschoben und gelöscht werden.

Dazu muss:

  1. die EDI-Datei, für die eine DATASEL-Datei gecustomized werden soll,
    im Anzeigereiter sichtbar sein
  2. Layout-Verzeichnis:
    1. Für das Anlegen einer DATASEL-Datei muss mindestens ein eigenes
      Layout-Verzeichnis vorhanden sein.
    2. Für das Ändern, Umbenennen, Verschieben und Löschen einer DATASEL-Datei
      muss das eigene Layout-Verzeichnis in der Haupt-Toolbar ausgewählt worden sein.

Sobald für das File-Format eine passende DATASEL-Datei gefunden wurde, wird eine
CSV-Datei erzeugt.

 

INVRPT-Beispieldatei: EDIFACT_96A_INVRPT.datasel

Gibt es nur die DATASEL-Datei (also keine JRXML/JASPER-Datei), so wird die CSV-Datei angezeigt.

Gibt es auch eine JRXML/JASPER-Datei, so kann mit dem Umschalter  zwischen der
CSV-Ansicht und Report-Ansicht gewechselt werden. Damit können die
DATASEL-Anweisungen kontrolliert werden, da nur eine korrekte CSV-Datei zu einer
korrekten Report-Anzeige führt.

Eine CSV-Datei wird als Tabelle angezeigt:

  • Beginnen die Spalten mit C_, G_, I_ werden diese farblich hervorhoben
  • Ein Klick in eine Zelle färbt den Zellenwert
  • Doppelklick auf den Spaltennamen versteckt die Spalte
  • Spreadsheet-Button macht alle versteckten Spalten wieder sichtbar

 

4.4.1.1. Grundregeln

  1. Für jedes im späteren Report gewünschte Edifeld wird eine Selektionsanweisung in folgendem
    Format benötigt:
    Edifeld = Reportfeld ( Bedingung1 &| Bedingung2 )
  2. Für jedes Reportfeld wird dann eine CSV-Spalte in der Reihenfolge
    der Selektionsanweisungen erzeugt
  3. Die Reportfelder sind Initial immer Blank
  4. Die Reihenfolge der Selektionsanweisungen hängt von der Struktur der EDI-Nachricht ab,
    nicht vom späteren Report
  5. Ein CSV-Satz wird erzeugt:
    - nachdem im letzten Reportfeld ein Wert gespeichert wurde
    - sobald ein Rücksprung in den Selektionsanweisungen erfolgt
    Beispiel:
    Das Reportfeld G_MENGE wurde mit der Einteilungsmenge gefüllt. Danach kommt
    für eine neue Lieferabruf-Position eine neue Artikelnummer in G_ARTNR.
    G_ARTNR liegt vor G_MENGE, es findet also ein Rücksprung statt,
    also wird ein CSV-Satz erzeugt.

4.4.1.2. DATASEL-Syntax

Edifeld

Format des Edifeldes: S-G-F

  • S = Segmentname (z.B. BGM,512, E2EDK09003)
  • G = Gruppennummer (z.B. 020)
  • F = Feldnummer (z.B. 1004,004,003)

Gibt es ein Edifeld mehrfach in einem Segment (z.B. NAD-030-3124), so muss, beginnend mit dem
zweiten Edifeld, ein #2 (NAD-030-3124#2) und beim dritten Edifeld ein #3 (NAD-030-3124#3)
angehängt werden, usw.

Beispiele für das Feld Lieferabrufnummer:

  • EDIFACT = BGM-020-1004
  • ANSIX12 = BFR-030-328
  • VDA = 512-004
  • IDOC = E2EDK09003-003

Benötigt man interne Reportfelder, z.B. als Zähler, definiert man einfach ein Edifeld,
was es in der Edidatei nie gibt, wie z.B. INTERN-001.

 

Reportfeld

Grundsätzlich ist der Name des Reportfeldes beliebig. Ausnahmen:
a) Keine Unterstriche verwenden
b) Beginnt der Reportfeldname mit folgenden Buchstaben, erfolgt eine Sonderverarbeitung:

  • G_ = Gruppenwechsel-Feld, d.h. vor der Abspeicherung in dieses Feld wird dieses Feld und
             ALLE in den Selektionsanweisung folgende Reportfelder gelöscht,
             einschliesslich dem Bedingungsergebnis (true/false) vom CheckWriteRecord-Befehl
             (bei einen Rücksprung in den Selektionsanweisungen wird auch ein CSV-Satz erzeugt).
  • C_ = Cancel-Feld, d.h. es werden keine Reportfelder gelöscht und trotz Rücksprung in den
            Selektionsanweisungen wird kein CSV-Satz geschrieben,
            es sei denn:
            - in das letzte Cancel-Feld aller Selektionsanweisungen wurde ein Wert geschrieben
            - das EOF der Edidatei wurde erreicht
  • I_ =  Internes-Feld, ist nie Auslöser zum Löschen von Feldern oder
            Schreiben eines CSV-Satzes (auch kein EOF).

Beispiele für Reportfeldnamen:

  • LABNEU
  • G_SNDPRN
  • C_PARVW
  • I_COUNTART

Standardmäßig werden folgende Reportfelder automatisch in jeder CSV-Datei erzeugt:

  • R2EdiFilename = Name der Edidatei
  • R2LayoutDirPath = Kompletter Pfad des Layout-Verzeichnisses
    (sinnvoll bei der Verwendung von "subreportExpression" und "dataSourceExpression")
  • R2Language = Sprache

 

Bedingung

Grundsätzlich muss eine Bedingung erfüllt sein, damit das Reportfeld mit dem Wert aus
dem Edifeld versorgt wird.

1. Die ganze Bedingung muss in einfachen Klammern stehen, also z.B.: ( C_PARVW==LF )

2. Eine Bedingung besteht aus: Operand1 Operator Operand2

3. Als Operand1 wird ein Reportfeld oder ein Befehl erwartet

4. Mehrere Bedingungen können durch logischen Operatoren verknüpft werden:

Operator

Bedeutung

&

UND: Beide Bedingungen müssen wahr sein

Beispiel: (I_DTM_QUALIF==171&I_RFF_QUALIF==AIF)

|

ODER: Mindestens eine Bedingung muss wahr sein


5. Eine Bedingung kann folgende Vergleichsoperatoren haben:

Operator

Bedeutung

==

Gleich

Beispiel: (C_PARVW == LF)

!=

Ungleich

>

Größer

<

Kleiner

>=

Größer oder Gleich

<=

Kleiner oder Gleich

Als Operand2 wird dann ein Ediwert erwartet oder die Befehle "Initial, EdiValue".
Erlaubte Zeichen sind:
Buchstaben, Zahlen und Blank, Komma, Minus, Punkt, Raute, Schrägstrich, Semikolon, Unterstrich

6. Eine Bedingung kann arithmetische Operatoren haben:

Operator

Bedeutung

++

Erhöht das Reportfeld sofort um 1,
wenn evtl. vorhandene Vorbedingungen wahr sind.

Beispiel: (I_COUNTART ++ )

7. Eine Bedingung kann aus einem Befehl bestehen:

Befehl

Bedeutung

CheckWriteRecord

Das Bedingungsergebnis (true / false) wird mit dem Reportfeld
intern gespeichert (z.B. G_DOC=true).
Nur wenn alle CheckWriteRecord-Bedingungen wahr sind,
wird ein CSV-Satz geschrieben.

Beispiel:
BGM-010-1001=G_DOC( CheckWriteRecord &EdiValue!=393)
Konsignationsrechnungen(Factored invoice) werden ignoriert.

ClearReportfield==ReportfeldLöscht sofort den Variablenwert vom angegebenen Reportfeld,
wenn evtl. vorhandene Vorbedingungen wahr sind.

Beispiel:
COM-010-3155=I_TYP(EdiValue!=FX& ClearReportfield==C_FX )
ClearWriteRecord==ReportfeldLöscht sofort das Bedingungsergebnis (true / false) vom
angegebenen Reportfeld, wenn evtl. vorhandene Vorbedingungen
wahr sind.

Beispiel:
UNS-010-0081=G_UNS( ClearWriteRecord==G_DOC )

EdiValue

Es wird der Wert des Edifeldes verwendet
(statt den Wert des Reportfeldes).
Benutzbar als Operand1 oder Operand2.

Beispiele:
BGM-010-1001=MSGTYP( EdiValue ==241)
TAX-050-5278=C_TAXRATE(C_TAXRATE1!= EdiValue )

Format4905CalloffDate

Die VDA4905-Abrufdatümer in den Satzarten 513/514 werden
speziell formatiert, damit die Sonder-Datumsformate nach einem
555555-Datum verständlicher für den Anwender werden.

Beispiel:
513-008=G_DVON( Format4905CalloffDate )

Goto==ZielEdiFeld

Springe zum ZielEdifeld und beginne dort erneut mit der
Verarbeitung. Reportfelder mit einer Goto-Bedingung erscheinen
in der CSV-Datei, aber nur mit dem Wert "<NU>" (not used).
Erst das ZielEdiFeld verarbeitet den Ediwert.

Beispiel:
513-010=DATUM2( Goto==513-008 )

InitialPrüft das Reportfeld auf Initialwert (leer).

Beispiel:
DTM-010-2380=DOCDAT(I_DTM_Q==137& I_RFF_Q== Initial )

NewLine

Erzeugt einen neuen CSV-Satz, falls sich die Daten zum letzten
CSV-Satz geändert haben.

Beispiel:
E2EDP14-005=PACKFILLMENGE( NewLine )

SegmentGroup

Es wird die aktuelle Segmentgruppennummer verwendet
(statt den Wert des Reportfeldes).
Benutzbar als Operand1 oder Operand2.

Beispiel:
NAD-020-3039=PARTY_ID( SegmentGroup ==7)

SegmentName

Gibt den aktuellen Segmentnamen (BGM) / Satzart (511) aus.

Beispiel:
INTERN-002=I_SA( SegmentName )

ValueAppend

Der Wert des Edifeldes wird, getrennt durch Blank, an den
bisherigen Reportfeldwert angehängt.

Beispiel:
E2EDKT2001-001=C_HEADERTEXT( ValueAppend )

ValueNotEmptyZero

Der Wert des Edifeldes darf nicht Blank oder nur
Nullen (00000...) enthalten.

Beispiel:
513-009=MENGE( ValueNotEmptyZero )

4.4.1.3. Direktiven

Direktiven haben folgendes Format und sind am Zeilenanfang einer DATASEL-Datei zu notieren:

{Direktivenname==Direktivenwert}

Mögliche Direktiven:

Direktive                   Bedeutung
JasperreportNameAngabe eines beliebigen JasperReports (JRXML/JASPER-Datei)
der sich im Layoutverzeichnis befinden muss.

Beispiel: { JasperreportName ==EDI file checker}

 

4.4.2. Layout erstellen mit JasperReports in eine JRXML-Datei

In der JRXML-Datei wird das Layout des Reports definiert.
Als Layout-Reporting-Engine wird JasperReports von Jaspersoft verwendet.
Die Version von der Design-Entwicklungsumgebung "Jaspersoft Studio" darf dabei nicht größer sein
als die Version von <R2EdiViewer-Programmverzeichnis>/lib/jasperreports-n.nn.n.jar:

- Download: "Jaspersoft Studio" die Design-Entwicklungsumgebung für JasperReports
- Wiki: Designing a Report with Jaspersoft Studio

Sechs Schritte zum Ändern eines ausgelieferten Layouts:

  1. Im R2EdiViewer-Customizing-Menü ein eigenes Layoutverzeichnis anlegen.
  2. Die DATASEL-, JRXML- und JASPER-Datei vom zu ändernden Layout
    aus dem "layouts"-Verzeichnis in das neu erstellte Layoutverzeichnis kopieren.
  3. In R2EdiViewer das neue Layoutverzeichnis auswählen, auf die CSV-Anzeige umschalten
    und die EDI-Datei als CSV-File speichern.
  4. Im Jaspersoft Studio ein "Data Adapter" für das CSV-File anlegen.
  5. Im Jaspersoft Studio die JRXML-Sourcedatei aus dem neuen Layoutverzeichnis öffnen und anpassen.
  6. Wird Jaspersoft Studio und R2EdiViewer mit der gleichen Java-Version ausgeführt,
    kann die JASPER-Datei (Binärdatei) im Jaspersoft Studio erzeugt werden (Icon "Compile Report").
    Bei unterschiedlichen Java Versionen muss die alte JASPER-Datei aus dem neuen Layoutverzeichnis
    gelöscht werden. Bei der ersten Ausführung des neuen JRXML-Layouts kompiliert R2EdiViewer
    die JRXML-Datei automatisch zur binären JASPER-Datei.


4.4.2.1. Data Adapter

Als "Data Adapter" ist "CSV file" oder "XML document" zu verwenden.
Als Datenquelle ist dann die, durch die DATASEL-Datei erzeugte CSV-Datei 
oder die XML-Datei anzugeben.

Bei einem "XML-Dokument":

  1. Aktivieren/Deaktivieren Sie "Enable namespace support", abhängig von Ihrer XML-Datei
  2. Unter Jaspersoft Studio->Properties muss Xalan als XPATH-Executer eingetragen werden,
    damit Namespace-Angabe im XML-Element korrekt erkannt werden, also:
    net.sf.jasperreports.xpath.executer.factory = net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory
  3. Mit JasperReports ab Version 6.20.6 werden die "org.apache"-Klassen aus xalan.jar nicht mehr ausgeliefert.
    In das "org"-Verzeichnis von "Jaspersoft Studio\plugins\net.sf.jasperreports_6.20.6.final.jar"
    muss deshalb das "apache"-Verzeichnis aus dem Verzeichnis "org" von xalan.jar kopiert werden.

4.4.2.2. R2EdiViewerXL.CFG

XML-Dateien können von JasperReport direkt über den Data Adapter eingelesen werden.
Damit wird keine DATSEL-Datei für die Erzeugung einer CSV-Datei benötigt.
Eine XML-Datei muss nur einem JasperReport zugewiesen werden.
Diese Zuweisungen werden über das Customizing ("Layout XML/Configuration") vorgenommen.

Eine XML-Datei wird dabei nach selbstdefinierten Suchbegriffen durchsucht.
Bei der ersten vollständigen Übereinstimmung aller Suchbegriffe ist so der JasperReport
und das Layoutverzeichnis bestimmt.
Der ermittelte JasperReport wird aber nur verwendet, wenn das Layout-Verzeichnis
auch ausgewählt wurde.

Die Syntax lautet:

LayoutDir:XML_ALL_ReportName: InclPrefix|ExclPrefix = SearchString1[~SearchString2][~SearchStringN...]

  • Feld 1: Layout-Verzeichnis, wo sich der JasperReport befindet
  • Trennzeichen: Doppelpunkt
  • Feld 2: Name des existierenden JasperReports (JASPER/JRXML), muss mit "XML_ALL" beginnen
  • Trennzeichen: Doppelpunkt
  • Feld 3: InclPrefix = XML-Tags enthalten ein Namensraumpräfix
                ExclPrefix = XML-Tags enthalten keinen Namensraumpräfix
  • Trennzeichen: Gleichheitszeichen
  • Feld 4: Suchstrings (getrennt durch Tilde-Zeichen), die alle in der XML-Datei
                enthalten sein müssen                      

4.4.2.3. Font Extension

Werden eigene "Schriftarten Erweiterungen" in einem Report verwendet, so muss die
aus Jasperstudio exportierte JAR-Datei (enthält u.a. die TTF-Schriftart) auch R2EdiViewer
im "private" Verzeichnis zur Verfügung gestellt werden.
Als JAR-Dateiname muss einer der 5 leeren R2EdiViewer_CustomerExtensionLibraryXX.jar
Dateien verwendet werden.

4.4.2.4. JAR-Dateien

Kann R2EdiViewer einen JasperReports nicht anzeigen, da JasperReports-Supportbibliotheken
fehlen, können diese JAR-Dateien im "private" Verzeichnis zur Verfügung gestellt werden.
Als JAR-Dateiname muss einer der 5 leeren R2EdiViewer_CustomerExtensionLibraryXX.jar
Dateien verwendet werden.

 

4.4.3. Layoutdateien auflisten inkl. Syntaxprüfung

"List" durchsucht alle Layout-Verzeichnisse, führt eine Syntax-Prüfung durch, und zeigt dann
das Ergebnis in einer Übersicht für alle DATASEL-, JRXML- und JASPER-Dateien an.

  1. DATASEL-Datei:
    1.    Änderung innerhalb der letzten 30 Tage
    2. Syntaxfehler gefunden
    3. JRXML- und JASPER-Datei fehlt
    4. JRXML- oder JASPER-Datei fehlt
    5. Durch die Direktive {JasperreportName} angegebene JRXML-Datei
    6. Keine Fehler gefunden
  2. JRXML-Datei:
    1. Eine DATASEL-Datei verweist auf diese JRXML-Datei
    2. Syntaxwarnung gefunden
    3. Syntaxfehler gefunden (es kann keine neue JASPER-Datei erzeugt werden)