====== GroupByExSorted ====== Die Funktion GroupByExSorted() sortiert die Ergebnisse((Das Result NodeSet)) der verschiedenen Suchkriterien (Key's) in //aufsteigender alphabetischer Reihenfolge// und gibt diese als Ergebnis zurück. Es könnnen maximal sechs Key Felder verwendet werden. ==== Syntax: ==== GroupByExSorted('Knoten', 'Key1', 'Key2', 'Key3', ..., 'Key6') GroupByExSorted('Knoten', 'Attribut1', 'Attribut2', 'Attribut3') ==== Hinweise ==== * Die 'Key'-Werte werden intern als Zeichenketten behandelt. Was z.B. bei einer Sortierung nach nummerischen oder Datumswerten relevant ist und eine explizite Formatierung als Zeichenkette sinnvoll macht, z.B.: GroupByExSorted('//IndustryItems', 'FormatNumber(@PosNumber, "0000000")'). * Es ist möglich eine Gruppierung aus Attributen welche in unterschiedlicher Tiefe der Knotenebenen liegen. Dazu muss aber der Knoten auf die unterste Ebene zeigen. Die hierarchisch höher gelegenen Attribute müssen dann per "../" Verweis hinzugenommen werden. * Werden XPATH Filter benötigt, so ist auf die richtige Anwendung von doppelten und einfachen Anführungszeichen zu achten.(Siehe Beispiele) * Das Resultat des XPATH Filters(zweiter bis sechster Parameter) __wird immer als STRING behandelt__. D.h. z.Bsp. für die Anwendung der Funktion als Sortierung nach Positionsnummer, diese muss zunächst mit FormatNumber in ein passendes Format umgewandelt werden, damit die alphanumerische Sortierung quasi eine numerische simuliert. GroupByExSorted('//IndustryItems', 'FormatNumber(@PosNumber, "0000000")') ==== Beispiele ==== - Gruppiert und sortiert unter /InventoryReport/Items nach @EanGroupByExSorted(/InventoryReport/Items, "@Ean") - Gibt eine Liste mit allen //LIN-Knoten//, gruppiert nach den DE_7140-Attributen, deren DE_7143-Attribut den Wert 'GU' beinhaltet, zurück.GroupByExSorted(//LIN, "../PIA/*[@DE_7143='GU']/@DE_7140") - Gibt eine Liste mit allen //SG_33-Knoten//, gruppiert nach den DE_7140-Attributen, deren DE_7143-Attribut den Wert 'GU' beinhaltet, zurück.GroupByExSorted(//SG_33, "PIA/*[@DE_7143='GU']/@DE_7140") - Gibt eine Liste mit allen //LIN-Knoten//, gruppiert nach den ArtikelDetails-Color-Attributen deren EAN gleich dem Wert im DE_7140-Attribut ist, zurück.GroupByExSorted(//LIN, "GetArticleDetailsByEAN(DG_212/@DE_7140)/Detail/@Color") - Gruppiere SLSRPT Gruppen deren CustomItem Key = 'EK_Abteilung' ist:GroupByExSorted(//Groups,"CustomItem[@Key='EK_Abteilung']/@Value") - Gruppiert den Salesreport nach der, unter PIA[@DE_4347='1']/DG_C212[@DE_7143='LN']/@DE_7140 angegebenen, ID((Dies ist z.Bsp. die Einkaufsabteilung))GroupByExSorted(//SG_7,"PIA[@DE_4347='1']/DG_C212[@DE_7143='LN']/@DE_7140") -Gruppiert den Salesreport nach Location, SalesDate und dann nach PIA[@DE_4347='1']/DG_C212[@DE_7143='LN']/@DE_7140. In dieser Gruppierung ist bemerkenswert, dass die Gruppenschlüssel in unterschiedlichen Segmenten angesiedelt sind. D.h. man muss die Gruppierung auf den untersten Knoten((PIA ist hier unter "SG_5/SG_7")) leiten und für die höher liegenden Segmente mit "../" entsprechend hochschalten((Wie angegebene: "../LOC/DG_C517/@DE_3225" und "../DTM/DG_C507[@DE_2005='356' and @DE_2379='102']/@DE_2380",)).GroupByExSorted(//SG_5/SG_7,"../LOC/DG_C517/@DE_3225","../DTM/DG_C507[@DE_2005='356' and @DE_2379='102']/@DE_2380","PIA[@DE_4347='1']/DG_C212[@DE_7143='LN']/@DE_7140")Die Schlüssel enthalten folglich: - @Key1 = Location - @Key2 = SalesDate - @Key3 = z.Bsp. ID einer Einkaufsabteilung (z.Bsp. bei Breuninger)\\ \\ - Gruppiert den Salesreport nach Location, SalesDate und dann nach RFF/DG_C506[@DE_1153 = 'SB']/@DE_1154. Auch hier ist anzumerken, dass die Gruppenschlüssel in unterschiedlichen Segmenten angesiedelt sind. D.h. man muss die Gruppierung auf den untersten Knoten((RFF ist hier unter "SG_5/SG_7"))(analog vorheriges Beispiel) leiten und für die höher liegenden Segmente mit "../" entsprechend hochschalten((Wie angegebene: "../LOC/DG_C517/@DE_3225" und "../DTM/DG_C507[@DE_2005='356' and @DE_2379='102']/@DE_2380",)).GroupByExSorted(//SG_5/SG_7,"../LOC/DG_C517/@DE_3225","../DTM/DG_C507[@DE_2005='356' and @DE_2379='102']/@DE_2380","RFF/DG_C506[@DE_1153 = 'SB']/@DE_1154")Die Schlüssel enthalten folglich: - @Key1 = Location - @Key2 = SalesDate - @Key3 = z.Bsp. eine original Location(z.Bsp. bei DeBijenkorf)\\ \\ - Gruppiert den DESADV nach Lieferscheinnummer auf Positionsebene\\ GroupByExSorted(//SG_15, "SG_16/RFF/DG_C506[@DE_1153='ON']/@DE_1154")Der Schlüssel enthält folglich: - @Key1 = Lieferscheinnummer\\ \\ - Gruppiert INVRPT nach EAN auf Positionsebene\\ GroupByExSorted(//SG_9, "LIN/DG_C212/@DE_7140")Der Schlüssel enthält folglich: - @Key1 = EAN\\ Das Ruleset im Mapping kann dann in etwa so aussehen:\\ {{:images:gruppierung_invrpt_nach_ean_und_summierung_auf_qty.png|}}\\ {{:images:sign_warning.png?nolink|}}**Hinweis:** Muss man im Zielobjekt aus der Gruppierung wieder in einer höheren Pfad spring so kann im Ziel der Selektor Prefix **../** angewendet werden. ==== Verschachtelung ==== In besonderen Fällen kann es notwendig werden eine Sortierung((auf einem Datenelement innerhalb der gewünschten Gruppierung)) vor der eigentlichen Gruppierung vorzunehmen. Dies kann mit einer Verschachtelung der Funktion realisiert werden. Zu beachten ist dabei, das der geschachtelten Gruppierungsfunktion((welche zur Vorsortierung auf tieferer Ebene angewendet wird)) der Pfad **/Items** angehängt ist. === Beispiel einer Verschachtelung === GroupByExSorted(GroupByExSorted(/TradeItemDocument/TradeItems,'@ArticleNo','@Color','@Size')/Items,'@ArticleNo','@Color') Im vorliegenden Beispiel werden also die eingehenden Items nach Artikelnummer, Farbe und Größe sortiert und gruppiert und anschließend nur nach Artikelnummer und Farbe sortiert und gruppiert, damit die Größen innerhalb eines Zielrecords aufsteigend iteriert werden können. == Unsortiertes Ergebnis: == == Sortiertes Ergebnis: ==