FlowHeater Demo Video
 
Der Daten Import / Export Spezialist
 
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Schauen Sie sich auch die verfügbaren Beispiele zum XML Adapter an evtl. kann Ihre Frage hiermit schon beantwortet werden: Allgemeine Beispiele zur XML Verarbeitung
  • Seite:
  • 1

THEMA:

Werte aus XML Tag filtern und dividieren 2 Wochen 1 Tag her #4039

  • Andre Seiffert
  • Andre Seifferts Avatar Autor
  • Offline
  • Beiträge: 23
Hallo Herr Stark,

ich versuche aus einem TAG einer XML einen Wert herauszufiltern wenn ein anderer TAG diese Einheit enthält. Ist der Wert gefunden, so soll hier auch eine Division stattfinden und das Ergebnis der der Einheit auf der Write Seite weitergegeben werden.

Ich habe schon einiges versucht, komme aber nicht zum gewünschten Ergebnis. 

Am einfachsten ist dies über die angehängten Bilder zu erklären.

Ist das so umzusetzen?
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Werte aus XML Tag filtern und dividieren 2 Wochen 15 Stunden her #4043

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1549
Hallo Herr Seiffert,

ich habe das leider nicht ganz verstanden. Im Anhang finden Sie mal ein Beispiel wie Sie Berechnungen Anhand von Feldinhalten über den IF-THEN-ELSE Heater steuern können. Das Beispiel verwendet aber keine XML Datei , sondern eine Textdatei zur Veranschaulichung. Schauen Sie sich das mal an ob das das widerspiegelt was Sie suchen. Falls nicht bitte auf Basis dieses Beispiels etwas genauer beschreiben was Sie durchführen möchten, Danke.

Dateianhang:

Dateiname: xml-werte-...chen.zip
Dateigröße:7 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Folgende Benutzer bedankten sich: Andre Seiffert

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: von FlowHeater-Team.

Werte aus XML Tag filtern und dividieren 2 Wochen 2 Stunden her #4046

  • Andre Seiffert
  • Andre Seifferts Avatar Autor
  • Offline
  • Beiträge: 23
Hallo Herr Stark,

bei einem Artikel der von der Fläche 0,5 m² groß ist und auch in abgerechnet wird, ist die Liefermengeneinheit (kleinste Abgabemengeneinheit) die PLATTE (PLT). Die Angabe der Liefermengeneinheit findet man in meiner XML in dem TAG USER_DEFINED_DELIVERY_QUANTITY.


In diesem Tag ist lediglich diese Einheit angegeben. Voraussetzung ist aber, dass diese Einheit auch bei diesem Artikel mit der entsprechenden Menge gepflegt ist. Dafür sind die TAGs USER_DEFINED_ALTERNATIVE_QUANTITY_UNITS enthalten. Pro Artikel gibt es aber mehrere mögliche Einheiten: Beispiel:

Kunststoffplatte 1x0,5m (= 0,5m²)
Paket = 12 Platten  (= 6m²)


Der FlowHeater soll also die Einheit, die unter USER_DEFINED_DELIVERY_QUANTITY gepflegt ist in den TAGs USER_DEFINED_ALTERNATIVE_QUANTITY_UNITS suchen. Wird sie gefunden, so soll die Einheit unter Alternative ME ausgegeben UND die Werte Numerator/Denominator dividiert werden und in das Feld Alternative ME Inhalt geschrieben werden.


Ich hoffe, ich habe es nun eindeutiger geschildert :)
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Andre Seiffert.

Werte aus XML Tag filtern und dividieren 1 Woche 6 Tage her #4047

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1549
Hallo Herr Seiffert,

das ist etwas komplexer und geht eigentlich nur noch über den .NET Script Heater (bzw. 2x) sowie untenstehende C# Skripte.

Das erste Skript gibt die „Alternative Liefermengeneinheit“ falls passend zurück. Das Skript erwartet als ersten Eingangsparameter den zu prüfenden Wert sowie alle weiteren möglichen (aus den XML Unterknoten) Liefermengeneinheiten.

Das zweite Skript gibt den berechneten Wert zurück falls die Liefermengeneinheit gefunden wurde. Dazu benötigt das Skript wieder als ersten Eingangsparameter den zu prüfenden Wert. Dann müssen pro Gruppe (XML Unterknoten) die Werte für „Alternative Liefermengeneinheit“, Alternative Liefermenge, sowie den Teiler übergeben werden.

Hinweis: Beide Skripte können beliebig viele Gruppen (XML Unterknoten) übergeben werden, es werden alle übergebenen Eingangsparameter dynamisch verarbeitet, lediglich die Reihenfolge ist wichtig!

Im Anhang finden Sie ein Beispiel dazu. Zwecks Vereinfachung wieder als Textdatei realisiert, kann aber auch für den XML Adapter verwendet werden.

Block 2 bzw. 3 (XML Unterknoten) kann beliebig oft übergeben werden, Reihenfolge beachten!



Skript 1)
public object DoWork()
{
    if (InValues.Length < 2)
        throw new Exception("Es werden mind. 2 Eingangsparameter benötigt");

    // Ersten Eingangsparameter holen, dieser Wert wird gesucht!
    string search = (string)InValues[0].GetString();

     // alle anderen Eingangsparameter prüfen und bei gefunden diesen zurückgeben
    for(int i = 1; i < InValues.Length; i++)
    {
        string current = (string)InValues[i].GetString();
        if (current == search)
            return current;
    }

    // Falls nicht gefunden leere Zeichenfolge zurückliefern
    return "";
}


Skript 2)
public object DoWork()
{
    if ((InValues.Length -1) % 3 != 0)
        throw new Exception("Es müssen immer Dreierpaare angegeben werden!");

    // Ersten Eingangsparameter holen, dieser Wert wird gesucht!
    string search = (string)InValues[0].GetString();

    // alle anderen prüfen, und bei gefunden berechneten Wert zurückliefern
    for(int i = 1; i < InValues.Length; i += 3)
    {
        string current = (string)InValues[i].GetString();
        if (current == search)
        {
            decimal d1 = Convert.ToDecimal(InValues[i + 1].GetDecimal());
            decimal d2 = Convert.ToDecimal(InValues[i + 2].GetDecimal());
            return d1 / d2;
        }
    }

    // Falls nicht gefunden leere Zeichenfolge zurückgeben
    return "";
}

Dateianhang:

Dateiname: xml-search-node.zip
Dateigröße:8 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Folgende Benutzer bedankten sich: Andre Seiffert

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Werte aus XML Tag filtern und dividieren 1 Woche 6 Tage her #4048

  • Andre Seiffert
  • Andre Seifferts Avatar Autor
  • Offline
  • Beiträge: 23
Hallo Herr Stark,

super, vielen Dank! Grundsätzlich funktioniert es.

Aber: Es gibt Artikel, die haben USER_DEFINED_ALTERNATIVE_QUANTITY_UNITS gepflegt, jedoch gibt es KEINE gepflegte Liefermengeneinheit bei USER_DEFINED_DELIVERY_QUANTITY. Anscheinend sorgt so eine Konstellation für eine Division durch 0 und es werden keine Werte ausgegeben. Zumindest erscheint folgende Meldung, wenn ein solcher Artikel in der XML vorhanden ist.

 

Kann man in so einem Fall den Abbruch verhindern?
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Andre Seiffert.

Werte aus XML Tag filtern und dividieren 1 Woche 5 Tage her #4049

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1549
Hallo Herr Seiffert,

dann muss das Skript noch leicht modifiziert werden. Mit dem beigefügten C# Skript wird geprüft ob eine „Division durch 0“ stattfindet, siehe unten.

Angepasstes C# Skript, Prüfung auf Division durch 0
public object DoWork()
{
    if ((InValues.Length -1) % 3 != 0)
        throw new Exception("Es müssen immer Dreierpaare angegeben werden!");

    // Ersten Eingangsparameter holen, dieser Wert wird gesucht!
    string search = (string)InValues[0].GetString();

    // alle anderen prüfen, und bei gefunden berechneten Wert zurückliefern
    for(int i = 1; i < InValues.Length; i += 3)
    {
        string current = (string)InValues[i].GetString();
        if (current == search)
        {
            decimal d1 = Convert.ToDecimal(InValues[i + 1].GetDecimal());
            decimal d2 = Convert.ToDecimal(InValues[i + 2].GetDecimal());
            
            // Prüfen auf Division durch 0
            if (d2 != 0)
            {
                return d1 / d2;
            }
            else
            {
                return d1;
            }
        }
    }

    // Falls nicht gefunden leere Zeichenfolge zurückgeben
    return "";
}

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Folgende Benutzer bedankten sich: Andre Seiffert

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Werte aus XML Tag filtern und dividieren 1 Woche 4 Tage her #4050

  • Andre Seiffert
  • Andre Seifferts Avatar Autor
  • Offline
  • Beiträge: 23
Super, vielen Dank. Damit funktioniert es einwandfrei! :)

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Seite:
  • 1

andere Sprachen

en

FlowHeater Home

de en

Impressum/Kontakt

Datenschutz

Copyright © 2009-2020 by FlowHeater GmbH.
Alle Rechte vorbehalten.

Follow us on

twitter  facebook

YouTube

 de en