Anzahl der Options im String und Caption vergleichen

23. August 2013 11:28

Hallo,

ich soll im Zuge der Zertifizierung kontrollieren, ob die Anzahl der Optionen in einem Optionfeld mit der Caption übereinstimmt. Da das per Texteditor eine extremst aufwendige Arbeit ist, dachte ich mir, ob man das nicht per Code lösen könnte.

Code:
l_Field.SETRANGE(Type,l_Field.Type::Option);
IF l_Field.FINDSET THEN
  REPEAT
    l_RecRef.OPEN(l_Field.TableNo);
    l_FieldRef := l_RecRef.FIELD(l_Field."No.");
    l_OptionString := l_FieldRef.OPTIONSTRING;
    l_OptionCaption := l_FieldRef.OPTIONCAPTION;
    g_Assert.AreEqual(l_StringMgt.GetCharCount(l_OptionString,','),l_StringMgt.GetCharCount(l_OptionCaption,','));
    l_RecRef.CLOSE;
  UNTIL l_Field.NEXT = 0;

Ich zähle also die Kommas in den beiden Strings und vergleiche. Der Test war grün keine Fehler. Das verwunderte mich, also hab ich in Tabelle 4 (Currency) Feld 12 (Invoice Rounding Type) ein Optionswert hinzugefügt ohne die Caption zu erweitern.

OptionCation lieferte mir nun aber "Kaufmännisch,Aufrunden,Abrunden,Test" zurück. Er hat also automatisch die Caption erweitert um die fehlende Option.

Meine Frage: Kann man das vielleicht irgendwie anders machen? Effektiver als per Texteditor? Und am besten per Code im NAV, da ich dann darüber ein Testcase schreiben kann? Kann ich mir irgendwie die richtige OptionCaptionML so wie sie in den Properties angegeben ist steht rausziehen?

Für Hilfe wäre ich euch sehr dankbar.

Grüße René

Re: Anzahl der Options im String und Caption vergleichen

25. August 2013 11:36

Ich zähle in solchen Fällen auch die Kommas in OptionCaption und OptionString. Nur muss man aufpassen: wenn man in OptionCaption einen neuen Optionswert hinzufügt, dann wird dieser autom. NUR in der aktuellen Sprache im OptionCaptionML gefüllt. Heißt: wenn die aktuelle Sprache deutsch ist, dann steht im OptionCaptionML mit DEU auch der neue OPtionswert, im OptionCaption mit ENU (englisch) fällt der neue Optionswert ebenso auch im OptionString. In allen drei "Feldern" (OptionString, OptionCaptionML > DEU, OptionCaptionML > ENU) muss die Anzahl der Optionswerte identisch sein. Wenn man also die Sprache des Clients umstellt, dann steht im l_FieldRef.OPTIONCAPTION der OptionCaptionML-String in jeweiliger Sprache. Am saubersten also das Ganze in einer Schleife durchführen in der man im jeweiligen Durchlauf zunächst mit GLOBALLANGIAGE die installierten Sprachen setzt.