- Beiträge: 26
Werte aus XML Tag filtern und dividieren
- Andre Seiffert
- Autor
- Offline
- Benutzer
Weniger
Mehr
3 Jahre 6 Monate her #4039
von Andre Seiffert
Werte aus XML Tag filtern und dividieren wurde erstellt von Andre Seiffert
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?
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?
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
3 Jahre 6 Monate her - 3 Jahre 6 Monate her #4043
von FlowHeater-Team
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.
FlowHeater-Team antwortete auf Werte aus XML Tag filtern und dividieren
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.
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.
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: 3 Jahre 6 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andre Seiffert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 26
3 Jahre 6 Monate her - 3 Jahre 6 Monate her #4046
von Andre Seiffert
Andre Seiffert antwortete auf Werte aus XML Tag filtern und dividieren
Hallo Herr Stark,
bei einem Artikel der von der Fläche 0,5 m² groß ist und auch in M² 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
bei einem Artikel der von der Fläche 0,5 m² groß ist und auch in M² 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
Letzte Änderung: 3 Jahre 6 Monate her von Andre Seiffert.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
3 Jahre 6 Monate her #4047
von FlowHeater-Team
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.
FlowHeater-Team antwortete auf Werte aus XML Tag filtern und dividieren
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)
Skript 2)
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)
Code:
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)
Code:
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 "";
}
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.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andre Seiffert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 26
3 Jahre 6 Monate her - 3 Jahre 6 Monate her #4048
von Andre Seiffert
Andre Seiffert antwortete auf Werte aus XML Tag filtern und dividieren
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?
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?
Letzte Änderung: 3 Jahre 6 Monate her von Andre Seiffert.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
3 Jahre 6 Monate her #4049
von FlowHeater-Team
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.
FlowHeater-Team antwortete auf Werte aus XML Tag filtern und dividieren
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
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
Code:
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.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andre Seiffert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 26
3 Jahre 6 Monate her #4050
von Andre Seiffert
Andre Seiffert antwortete auf Werte aus XML Tag filtern und dividieren
Super, vielen Dank. Damit funktioniert es einwandfrei!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.320 Sekunden