[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    16

    Problem mit Parameterübergabe aus SRVPGM

    Hallo,

    hoffentlich kann mir jemand weiterhelfen.

    Ich habe ein SRVPGM aus dem ich ein bereits seit längerem bestehendes Programm aufrufen will, allerdings werden die Aufrufparameter nicht richtig übergeben. Nachfolgend ein Beipiel:

    * --- Prozedurbeschreibung / Ermittlung Sonderkonditionen ---------------------------------- *

    d Call_SLTSK pr extpgm('SLTSK')
    d sk_Makecode 1
    d sk_Teile# 18
    d sk_Kunden# 6s 0
    d sk_KundenRG 1
    d sk_skArt 2
    d sk_VerkaufsPR 13s 2
    d sk_Rabatt 5s 2
    d sk_Text 30
    d sk_TextKZ 1
    d sk_Status 1


    * --- Prozedur - Beginn -------------------------------------------------------------------- *

    p Rtv_RB_Daten b export

    * --- Prozedurinterface -------------------------------------------------------------------- *

    d Rtv_RB_Daten pi 256
    d p_Betrieb 3
    d p_Kunde 6s 0
    d p_Makecode 1
    d p_Teilenummer 18
    d p_Rabatt_GRP 2
    d p_Euro_PB 1
    d p_WAE_PreisB 3 0
    d p_Alt_RBL 1

    /free
    ....
    ....
    ....

    Callp Call_SLTSK(sk_Makecode:sk_Teile#:sk_Kunden#:
    sk_KundenRG:sk_SKArt:
    sk_VerkaufsPR:sk_Rabatt:sk_Text:
    sk_TextKZ:sk_Status);

    ...
    ...
    ...
    /end-free


    Im Programm SLTSK erhalte ich immer einen Dezimaldatenfehler, da im 3.Übergabeparameter (Kundennummer) teilweise Fragezeichen enthalten sind, obwohl ich keine übergebe (z.B. aus 123456 wird 1?2?3?).

    Was mache ich da falsch???

    Joe

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.247
    Wie hast du denn die Felder definiert ?
    In deinem Aufruf sehe ich zwar Feldnamen aber in deinem Auszug nicht die Definition derselben.

    Die Deklaration der PR-Routine definiert die nachfolgenden Felder NICHT !!!


    Ich nehme mal an, dass eigentlich die p_-Felder für die Übergabe gemeint sind.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jul 2005
    Beiträge
    15
    Hallo Joe,

    wie füllst du denn die Variable Kundennummer?
    Um das herauszufinden, solltest du mal mit dem Debugger in dei Variable reinschauen, bevor das Programm aufgerufen wird.
    Eine Erklärung könnte sein, dass der Parameiter im aufgerufenen Programm die Kundennummer gepackt deffiniert ist.

    mdhl

  4. #4
    Registriert seit
    Sep 2006
    Beiträge
    16
    Die Felder sind folgendermaßen definiert:


    d SonderKon_ds ds INZ
    d sk_Makecode 1 inz(' ')
    d sk_Teile# 18 inz(' ')
    d sk_Kunden# 6s 0 inz(0)
    d sk_KundenRG 1 inz(' ')
    d sk_SKArt 2 inz(' ')
    d sk_VerkaufsPR 13s 2 inz(0)
    d sk_Rabatt 5s 2 inz(0)
    d sk_Text 30 inz(' ')
    d sk_TextKZ 1 inz(' ')
    d sk_Status 1 inz(' ')


    Eingangsparameterliste des aufgerufenen Programmes:

    * Entrylist - Empfangen von Parametern. *
    *--------------------------------------------------------------------------------------------*
    *
    C *ENTRY PLIST
    C PARM C#ETMC
    C PARM C#ETNR
    C PARM C#KDNR
    C PARM C#KDRG
    C PARM C#SART
    C PARM C#VPRS
    C PARM C#RABP
    C PARM C#TEXT
    C PARM C#TXKZ
    C PARM C#STAT



    c#kdnr ist ein gezontes Feld 6S 0


    Das Feld sk_kunden# wird mit der aus der Datenbank gelesenen Kundennummer gefüllt (ist auch 6s 0 definiert)

    Joe

  5. #5
    Registriert seit
    Jul 2005
    Beiträge
    15
    Was sagt der Debugger, wie wird die Kundennummer an das PGM übergeben?

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    16
    Der Debugger sagt folgendes:

    Aufrufendes Programm:
    > EVAL SonderKon_ds
    SK_MAKECODE OF SONDERKON_DS = '1'
    SK_TEILE# OF SONDERKON_DS = 'U0807717 '
    SK_KUNDEN# OF SONDERKON_DS = 259785.
    SK_KUNDENRG OF SONDERKON_DS = ' '
    SK_SKART OF SONDERKON_DS = 'ET'
    SK_VERKAUFSPR OF SONDERKON_DS = 00000000000.00
    SK_RABATT OF SONDERKON_DS = 000.00
    SK_TEXT OF SONDERKON_DS = ' '
    SK_TEXTKZ OF SONDERKON_DS = ' '

    Aufgerufenes Programm:
    [IMG]file:///C:/Temp/moz-screenshot.jpg[/IMG] 71 *
    72 C *ENTRY PLIST
    73 C PARM C#ETMC
    74 C PARM C#ETNR
    75 C PARM C#KDNR
    Weitere ...
    Testhilfe

    F3=Programm beenden F6=Unterbrechungspunkt hinzufügen/löschen F10=Step
    F11=Variable anzeigen F12=Wiederaufnehmen F24=Weitere Tasten
    C#KDNR = 2?5?9?.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Hallo,

    das Problem liegt darin, dass alle standalone Felder (auch Parameter-Felder), die gezont oder binär definiert sind von RPG in gepackte Felder konvertiert werden. Das ist nichts Neues, das war zumindest seit ich auf der AS/400 programmiere (und das sind immerhin 15 Jahre) schon immer so.

    Gezonte Felder und Binär-Felder werden nur dann nicht in gepackte Felder konvertiert, wenn sie als Datenstruktur-Unterfelder definiert sind.

    In Deiner Parameter-Definition gibst Du zwar gezonte Felder an, diese werden jedoch, da es sich um keine Datenstruktur-Unterfelder handelt in gepackte Felder konvertiert. Die Felder in Deiner Datenstruktur, die Du übergibst werden jedoch nicht konvertiert.

    Im Klartext heißt das:
    Du übergibst gezonte Werte, obwohl gepackte Werte erwartet werden. (die ? sind übrigens Vorzeichen, die bei gezonten Feldern jeweils in einem Halb-Byte gespeichert werden).

    Folgende Lösungen sind möglich:
    1. Sollte es sich bei den übergebenen Parametern um echte Input-Only-Parameter handeln, die in der aufgerufenen Prozedur nicht verändert werden, genügt es das Schlüssel-Wort CONST im Prozedur-Interface und im Prototyp anzugeben. Durch dieses Schlüssel-Wort werden die Parameter korrekt in das erwartete Format konvertiert.
    2. Handelt es sich nicht um Input-Only-Parameter müssen die Parameter vor der Übergabe in gepackte Felder umgeladen werden.
    3. Sollte die Definition der Datenstruktur nicht erforderlich sein, und die Felder als standalone Felder definiert werden können, würde auch das richtige Format übergeben werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Sep 2006
    Beiträge
    16
    Hallo Birgitta,

    vielen Dank für deine Hilfe.

    Ich habe jetzt die Übergabefelder als gepackte Felder definiert, und siehe da, es funktioniert.

    Für mich war der Sachverhalt, dass die gezonten standalone Felder umkonvertiert werden neu, allerdings arbeite ich noch nicht so lange auf der AS/400.

    Das Thema wwerde ich mir auf alle Fälle im hinterstübchen behalten.

    Nochmals Danke,

    Joe

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Problem mit Steuerzeichen in Datenbank?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-10-06, 10:07
  3. Authorization Problem nach ändern der Primary Group
    By ChrisX in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-10-06, 15:31
  4. Merkwürdiges Problem in VRPG
    By Flappes in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 06-10-06, 08:39
  5. Problem ODBC und VB.NET
    By Marsman in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-07-06, 10:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •