OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Hello, dear friend! My name is Jonathon. I am pleased that I can join to the entire world. I live in Netherlands, in the south region. I dream to visit the dif…“)
 
(Die Seite wurde neu angelegt: „{{Makros und Scripting}} ==Methoden der Eingabemaske== Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine List…“)
Zeile 1: Zeile 1:
Hello, dear friend! My name is Jonathon. I am pleased that I can join to the entire world. I live in Netherlands, in the south region. I dream to visit the different nations, to get acquainted with appealing people.<br><br>my blog post: [http://202.121.55.18:8001/blog/1/member.asp?action=view&memName=TeganMarcantel6 http://202.121.55.18:8001/blog/1/member.asp?action=view&memName=TeganMarcantel6]
{{Makros und Scripting}}
 
==Methoden der Eingabemaske==
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:
{| class="wikitable"
|-
!Interne Funktionen !! Tastatur-Funktionen
|-
|OnEdFormInit || OnF1
|-
|OnEdInit || OnF2
|-
|OnEdVorb || OnF3
|-
|OnEdShow || OnF4
|-
|OnEdStable || OnF5
|-
|OnEdReadDirect || OnF6
|-
|OnEdRead || OnF7
|-
|OnEdStable || OnF8
|-
|OnEdCheck || OnF9
|-
|OnEdqSQL || OnF10
|-
|OnEdSaveDirect || OnF11
|-
|OnEdSave || OnF12
|-
|CheckIfChanged || OnPGDN
|-
|OnEdClose || OnPGUP
|-
| || OnReturn
|-
| || OnESC
|}
Die hier aufgeführten '''internen Funktionen''' sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix '''Before_''' gegeben werden. Für Tastatur-Funktionen gilt dies nur für '''OnESC'''.}}
==Zugriff auf Komponenten==
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen '''xGet''' (Daten lesen) und '''xSet''' (Daten schreiben) verwenden.
<syntaxhighlight lang="Delphi">
//Auslesen einer Komponente
cName := FrmEdit.xGet('a_name');
//Setzen einer Komponente
FrmEdit.xSet('a_name',"Meier");
</syntaxhighlight>
 
==Globale Variablen der Eingabemaske==
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property's stehen zu Verfügung:
{| class="wikitable"
|-
!Property !! Erläuterung
|-
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.
|-
|lEditMode || True  = Insertmodus False = Editmodus
|-
|lDataUpdate || True = Daten des Edits wurden verändert
|-
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)
|-
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen
|-
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen
|-
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen
|-
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf
|-
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)
|}
==Beispiele Eingabemaske==
===Button F12 anzeigen und mit Funktionalität versehen===
<syntaxhighlight lang="Delphi">
function OnEdInit():string;
begin
    frmEdit.cmdF12.Enabled := True;
    frmEdit.cmdF12.Caption := 'F12 Test';
    frmEdit.InitButtons(frmEdit);
    frmEdit.PaintButtons(frmEdit); 
end;                       
     
procedure OnF12(); 
begin                         
    Meldung('Test');
end;       
</syntaxhighlight>
 
===Aufruf von weiteren Macros innerhalb des Macros===
<syntaxhighlight lang="Delphi">
function OnEdInit():string;
begin
    frmEdit.cmdF12.Enabled := True;
    frmEdit.cmdF12.Caption := 'F12 Test';
    frmEdit.InitButtons(frmEdit);
    frmEdit.PaintButtons(frmEdit); 
end;                       
     
procedure OnF12(); 
var oParams: TStringlist; //Parameter für Aufruf
begin
    //Aufruf ohne Parameter
    RunMacroFile('data\MACRO\Spezial\Test123.pmac');
 
    //Aufruf mit Parameter
    oParams := TStringlist.Create;
    oParams.Add('TEST456');     
    RunMacroFile('data\MACRO\Spezial\Test123.pmac', frmEdit, oParams); 
    MyFreeAndNil(oParams);
end;       
</syntaxhighlight>
 
===Eingaben prüfen===
<syntaxhighlight lang="Delphi">
function OnEdCheck():string;
var oSte    : TEdit;
    cEdit    : String;
    cVorname : String;
begin
    if (FrmEdit.lEditMode) then begin
        Meldung('Edit Mode True');
    end else begin
        Meldung('Edit Mode False');
    end;
    Meldung(FrmEdit.stred_db_a_name.Text);
    oSte := FrmEdit.FindComponent('stred_db_a_name');
    Meldung(oSte.Text);
    cVorname:= FrmEdit.xGet('a_vorname');
    Meldung(cVorname);
    if (Empty(cVorname)) then begin
        FrmEdit.lCheckOk := False;
        Meldung('Bitte Vorname eingtragen');
    end;
end;
</syntaxhighlight>
 
===Positionen in Vorgängen blockieren===
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.
 
Name: AN_VORGANG_EDIT Function OpenClose
{{Hinweis| Der Prefix "AN" steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}
 
<syntaxhighlight lang="Delphi">
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;
begin
  //DebugLine('cVgNr'+cVgNr);
 
    //02 = Möbel
    Result := oOBS.cBenutzergruppe <> '02'; 
   
    if (Result) then begin 
        //Wenn Positionen vorhanden dann kein Positions-Edit
        if (DB_LSeek(oDB,'ANGPOS','az_nr='+DB_SqlVal(cVGNr))) then begin
            Result := False;
        end;
    end;
                         
    if (Result) then begin
               
        //DebugLine(iif(lInsertMode,'True','False'));
       
        //Bei nicht Insert immer False
        if (lInsertMode = False) then begin
            Result := False;
        end;
    end;
   
end;
</syntaxhighlight>

Version vom 25. März 2020, 09:55 Uhr


Methoden der Eingabemaske

Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:

Interne Funktionen Tastatur-Funktionen
OnEdFormInit OnF1
OnEdInit OnF2
OnEdVorb OnF3
OnEdShow OnF4
OnEdStable OnF5
OnEdReadDirect OnF6
OnEdRead OnF7
OnEdStable OnF8
OnEdCheck OnF9
OnEdqSQL OnF10
OnEdSaveDirect OnF11
OnEdSave OnF12
CheckIfChanged OnPGDN
OnEdClose OnPGUP
OnReturn
OnESC

Die hier aufgeführten internen Funktionen sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.

HINWEIS: Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix Before_ gegeben werden. Für Tastatur-Funktionen gilt dies nur für OnESC.

Zugriff auf Komponenten

Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen xGet (Daten lesen) und xSet (Daten schreiben) verwenden.

//Auslesen einer Komponente
cName := FrmEdit.xGet('a_name');
//Setzen einer Komponente
FrmEdit.xSet('a_name',"Meier");

Globale Variablen der Eingabemaske

Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property's stehen zu Verfügung:

Property Erläuterung
lCheckOK Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.
lEditMode True = Insertmodus False = Editmodus
lDataUpdate True = Daten des Edits wurden verändert
lDataChecked False=Daten werden auf gültigkeit überprüft (lCheckok)
lCloseInsert Edit-Fenster wird (lEditMode = True) nach F2 geschlossen
lCloseEdit Edit-Fenster wird (lEditMode = False) nach F2 geschlossen
lDataESC Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen
lCanLock Ob bei der Eingabe nur eine Person den Datensat editieren darf
lInsert Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)

Beispiele Eingabemaske

Button F12 anzeigen und mit Funktionalität versehen

function OnEdInit():string;
begin
    frmEdit.cmdF12.Enabled := True;
    frmEdit.cmdF12.Caption := 'F12 Test';
    frmEdit.InitButtons(frmEdit);
    frmEdit.PaintButtons(frmEdit);   
end;                         
       
procedure OnF12();  
begin                          
    Meldung('Test');
end;

Aufruf von weiteren Macros innerhalb des Macros

function OnEdInit():string;
begin
    frmEdit.cmdF12.Enabled := True;
    frmEdit.cmdF12.Caption := 'F12 Test';
    frmEdit.InitButtons(frmEdit);
    frmEdit.PaintButtons(frmEdit);   
end;                         
       
procedure OnF12();  
var oParams: TStringlist; //Parameter für Aufruf
begin
    //Aufruf ohne Parameter
    RunMacroFile('data\MACRO\Spezial\Test123.pmac');

    //Aufruf mit Parameter
    oParams := TStringlist.Create;
    oParams.Add('TEST456');      
    RunMacroFile('data\MACRO\Spezial\Test123.pmac', frmEdit, oParams);  
    MyFreeAndNil(oParams);
end;

Eingaben prüfen

function OnEdCheck():string;
var oSte     : TEdit;
    cEdit    : String;
    cVorname : String;
begin
    if (FrmEdit.lEditMode) then begin
        Meldung('Edit Mode True');
    end else begin
        Meldung('Edit Mode False');
    end;
    Meldung(FrmEdit.stred_db_a_name.Text);
    oSte := FrmEdit.FindComponent('stred_db_a_name');
    Meldung(oSte.Text);
    cVorname:= FrmEdit.xGet('a_vorname');
    Meldung(cVorname);
    if (Empty(cVorname)) then begin
        FrmEdit.lCheckOk := False;
        Meldung('Bitte Vorname eingtragen');
    end;
end;

Positionen in Vorgängen blockieren

Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.

Name: AN_VORGANG_EDIT Function OpenClose

HINWEIS: Der Prefix "AN" steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie hier.
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;
begin
   //DebugLine('cVgNr'+cVgNr);

    //02 = Möbel
    Result := oOBS.cBenutzergruppe <> '02';  
    
    if (Result) then begin  
        //Wenn Positionen vorhanden dann kein Positions-Edit
        if (DB_LSeek(oDB,'ANGPOS','az_nr='+DB_SqlVal(cVGNr))) then begin
            Result := False;
        end;
    end;
                          
    if (Result) then begin
                
        //DebugLine(iif(lInsertMode,'True','False'));
        
        //Bei nicht Insert immer False
        if (lInsertMode = False) then begin
            Result := False;
        end;
    end;
    
end;