top of page

Fehler String-Übergabe / Error string parameters

(alle Versionen/all versions)

Mittwoch, 11. November 2020

Situation

Weiteres Problem-Beispiel

Verwendeter Quellcode / Zweck des Quellcodes

Wahrscheinliche Problemursache

Workaround

Fehlerbehebung/Lösung mit neueren Sage QSP

Parsing-Fehler gibt es an vielen Stellen in der Sage 100



Situation

Wenn in in einem AppDesigner Makro mittels "AufrufenDLL" String-Felder an eine .NET DLL (Klasse "MacroProcessBase") übergeben werden, dann werden diese bei einer Mehrfachselektion (mehrere Zeilen selektiert) nicht richtig behandelt.

Laut Developer Kochbuch werden die Strings wie folgt übergeben:

Strings werden in Anführungszeichen eingeschlossen und darin enthaltene Anführungszeichen durch zwei Anführungszeichen maskiert

Wenn z.B. die selektierten Artikelnummern übergeben werden, dann sollte im "NamedParameter" also Folgendes ankommen (reiner Inhalt des Stings):

.Name:  Artikelnummer
.Value:  "60000000";"60002000"

Tatsächlich aber kommt folgeder String an:

.Value:  60000000";"60002000

Man achte auf die fehlenden Anführungszeichen.


Weiteres Problem-Beispiel

Schlimmer ist es, wenn in dem übergeben String ein Semikolon oder Anführungszeichen enthalten sind (dies ist ja auch z.B. theoretisch auch bei Artikelnummern möglich, wenngleich nicht viele eine solche Formatierung wählen).

Anführungszeichen werden nicht verdoppelt, so dass der String nicht sinnvoll geparsed werden kann.

Beispiel: Aus den FA Belegen BelID und Matchcode.

ree











NamedParameter:

.Name:  Matchcode
.Value:  Tisch "Design 1000"; (Eigen;fertigung)";"Tischbein "Design 1000" (Eigenfertigung)

Verwendeter Quellcode / Zweck des Quellcodes

Übergabe/Abfragen von Mehrfachselektionen aus dem AppDesigner UX/UI-Frontend an .net-Code.

Vorgeschaltetes AppDesigner-Makro mit "AufrufenDLL"-Funktion mit Übergabe einer Semikolon-getrennte Liste der Parameter als dritter Parameter für die "AufrufenDLL"-Funktion.

ree







Anmerkung: Der Punkt . wurde als Workaround hinzugefügt (siehe weiter unten).

Im Normallfall würde man hier lediglich das Feld [Artikelnummer] einfügen.


Makro Einstellung - Mehrfachauswahl zulässig ist aktiviert, wie nachfolgender Screenshot zeigt.

ree














Behandlung im Quellcode der Makro-DLL

using Sagede.Core.Tools;
 
public class Test : Sagede.OfficeLine.Shared.RealTimeData.MacroProcess.MacroProcessBase
{
  protected override NamedParameters Execute(Sagede.Shared.RealTimeData.Common.NamedParameters parameters, ref bool cancel, ref string cancelMessage)
  {
    var artikelnummern = parameters.TryGetItem("Artikelnummer").Value.FormatUnQuoted();
  }
}

Wahrscheinliche Problemursache

Interner Parsing-Fehler bei Sage, da Sage diese Besonderheiten "nicht auf dem Radar" hat.


Workaround

Wenn man ein Hilfszeichen oder Text for den Feldnamen einbaut, dann geht Sage beim Parsing anders vor.

ree








Dann sieht das Ergebnis Parameter-Übergabe von Sage anders aus und lässt sich mit Workarounds derart auswerten, dass die Inhalte erhalten bleiben.

Siehe nachfolgender Screenshot.

ree

Fehlerbehebung/Lösung mit neueren Sage QSP

Das Problem wurde von Sage an LiveUpdate-Stand/QSP 8.1.2 - Build 2159 - 17.09.2019 adressiert (ID #26543).

Auszug aus Sage QSP-Text:

Zum leichteren Umgang mit solchen Wertelisten wurde der Typ „NamedParameter“ um eine „Values“ Eigenschaft erweitert. Diese bietet die Einzelwerte an.

Siehe https://www.officium-inservio.com/sage-100-breaking-changes/appdes7


Parsing-Fehler gibt es an vielen Stellen in der Sage 100

Leider ist das Thema mit Parsing-Fehlern/Parsing-Problemen in der Sage 100 kein Einzelfall!

Zur "Verteidigung" von Sage sollte man sich immer wieder vor Augen führen, wie komplex der Technologie-Stack der Sage 100 ist und dass dadurch Informationen teils durch mehrere, grundverschiedene Technologien weitergegeben werden müssen (u.a. teils COM-Interop).

Daten "wandern" vom AppDesigner-Client (.net-Technik), teils durch COM-Interop zurück nach .net, dann zum Sage Applikationsserver und dann wieder zurück usw.

Nachfolgender Beitrag zeigt ein weiteres Beispiel für ein Parsing-Problem:

https://www.officium-inservio.com/sage-100-appdesigner/edivkbelegerfassungcreatebelegkopf




bottom of page