Zitat Zitat von Fuerchau Beitrag anzeigen
Wenn du die PI-Variable mit Varying definierst, werden dir ja nur so viele Zeichen übergeben, wie die Quelle lang ist. Du arbeitest ja eben keine 5000 Zeichen durch!
Außerdem musst du folgendes beachten:
Der Aufruf kopiert deine Quelle in ein 5K-Feld und füllt mit Leerzeichen auf.
Die %trim() entfernt die Leerzeichen wieder, %Len() gibt dir die Länge, anschließend verwirfst du das Trim-Ergebnis wieder.
Übergibst du also z.B. " A", gibt deine Routine nur das Leerzeichen zurück.

Also:
Definiere PR/PI mit "varying const" und arbeite ohne Trim die Zeichen ab.
@1: Nur wenn ein Parameter im Prototyp/Procedure Interface mit VALUE definiert ist, werden Zeichen überbeben.
Sofern der Parameter by Reference übergeben wird (mit Schlüssel-Wort const oder ohne wie in dem Beispiel) wird nur die Adresse des Parameter-Feldes übergeben unabhängig davon, ob es mit fixer oder variabler Länge definiert wurde.
Die Angabe CONST bewirkt lediglich, dass bei abweichender Parameter-Definition ein zusätzliches Feld mit der erwarteten Parameter-Definition (bei UCS2(5000) sind das 10000 Byte und bei VarUCS2(100002) Byte erstellt wird und dann die Adresse dieses Hilfsfeldes an die rufende Prozedur übergeben wird.
Bei Feldern mit variabler Länge sollte man nicht nur CONST, sondern auch OPTIONS(*TRIM) angeben, damit führende und folgende Blanks gleich abgetrimmt werden.
Die Daten-Länge wird in den beiden führenden Bytes hinterlegt und beim Verarbeiten von Feldern mit variabler Länge geprüft.

Birgitta