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

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
(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…“)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{Makros und Scripting}}
{{Makros und Scripting}}


==Methoden der Eingabemaske==
==Methoden der Liste==
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:
{| class="wikitable"
{| class="wikitable"
|-
|-
!Interne Funktionen !! Tastatur-Funktionen
!Interne Funktionen !! Tastatur-Funktionen
|-
|-
|OnEdFormInit || OnF1
|OnListNew || OnF1
|-
|-
|OnEdInit || OnF2
|OnResize || OnF2
|-
|-
|OnEdVorb || OnF3
|OnRefresh || OnF3
|-
|-
|OnEdShow || OnF4
|Before_OnClose || OnF4
|-
|-
|OnEdStable || OnF5
| || OnF5
|-
|-
|OnEdReadDirect || OnF6
| || OnF6
|-
|-
|OnEdRead || OnF7
| || OnF7
|-
|-
|OnEdStable || OnF8
| || OnF8
|-
|-
|OnEdCheck || OnF9
| || OnF9
|-
|-
|OnEdqSQL || OnF10
| || OnF10
|-
|-
|OnEdSaveDirect || OnF11
| || OnF11
|-
|-
|OnEdSave || OnF12
| || OnF12
|-
|-
|CheckIfChanged || OnPGDN
| || OnReturn
|-
|-
|OnEdClose || OnPGUP
| || OnInsert
|-
|-
| || OnReturn
| || OnDelete
|-
|-
| || OnESC
| || 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==
==Beispiele Liste==
Ü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===
===Button F12 anzeigen und mit Funktionalität versehen===
<syntaxhighlight lang="Delphi">
<syntaxhighlight lang="Delphi">
function OnEdInit():string;
function OnListNew():string;
begin
begin
     frmEdit.cmdF12.Enabled := True;
     frmListe.cmdF12.Enabled := True;
     frmEdit.cmdF12.Caption := 'F12 Test';
     frmListe.cmdF12.Caption := 'F12 Test';
     frmEdit.InitButtons(frmEdit);
     frmListe.InitButtons(frmListe);
     frmEdit.PaintButtons(frmEdit);  
     frmListe.PaintButtons(frmListe);  
end;                        
end;            
     
 
procedure OnF12();   
procedure OnF12();   
begin                           
begin                           
     Meldung('Test');
     Meldung('Test');
end;      
end;  
</syntaxhighlight>
</syntaxhighlight>


===Aufruf von weiteren Macros innerhalb des Macros===
===Andere Buttons Mit Funktion versehen===
<syntaxhighlight lang="Delphi">
<syntaxhighlight lang="Delphi">
function OnEdInit():string;
Var cMyF8 : String;
                         
function OnListNew():String;
begin                       
    cMyF8  := 'Init';
    Result := '';
end; 
 
function OnF8():string;
begin
begin
     frmEdit.cmdF12.Enabled := True;
     Meldung('Hallo '+cMyF8);    
     frmEdit.cmdF12.Caption := 'F12 Test';
     Result := 'OK';
    frmEdit.InitButtons(frmEdit);
end;  
    frmEdit.PaintButtons(frmEdit); 
 
end;                        
function Before_OnF8():String;
     
procedure OnF12()
var oParams: TStringlist; //Parameter für Aufruf
begin
begin
     //Aufruf ohne Parameter
     Meldung('Before Hallo '+cMyF8);
    RunMacroFile('data\MACRO\Spezial\Test123.pmac');
   
 
     //Dann wird Standard F8 nicht ausgeführt
     //Aufruf mit Parameter
     Result := 'READY';  
     oParams := TStringlist.Create;
     cMyF8 := Result;
    oParams.Add('TEST456');    
end;  
     RunMacroFile('data\MACRO\Spezial\Test123.pmac', frmEdit, oParams);  
    MyFreeAndNil(oParams);
end;      
</syntaxhighlight>
</syntaxhighlight>


===Eingaben prüfen===
===Button F12 mit Auswahlfunktion===
<syntaxhighlight lang="Delphi">
<syntaxhighlight lang="Delphi">
function OnEdCheck():string;
 
var oSte    : TEdit;
function OnListNew():string;
    cEdit    : String;
    cVorname : String;
begin
begin
     if (FrmEdit.lEditMode) then begin
     frmListe.cmdF12.Enabled := True;
        Meldung('Edit Mode True');
     frmListe.cmdF12.Caption := 'F12 Test';
     end else begin
     frmListe.InitButtons(frmListe);
        Meldung('Edit Mode False');
     frmListe.PaintButtons(frmListe);  
    end;
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===
procedure OnF12();     
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.
var oLines  : TStringList;
 
    oResult : TStringList;          
Name: AN_VORGANG_EDIT Function OpenClose
    lEsc    : Boolean;
{{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]].}}
    cSelect : String;
 
<syntaxhighlight lang="Delphi">
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;
begin
begin
   //DebugLine('cVgNr'+cVgNr);
    oLines := TStringList.Create();    
 
    oLines.Add('A - Test 1');
     //02 = Möbel
     oLines.Add('B - Test 2');
     Result := oOBS.cBenutzergruppe <> '02';
     oLines.Add('C - Test 3');
      
      
     if (Result) then begin 
     oResult := GetSelectionExt(oLines, //Auswahl
        //Wenn Positionen vorhanden dann kein Positions-Edit
                              'Test', //Caption       
        if (DB_LSeek(oDB,'ANGPOS','az_nr='+DB_SqlVal(cVGNr))) then begin
                              lEsc,  //Abruch? (var)          
            Result := False;
                              Nil,    //uInit : DefGetSelection;
        end;
                              Nil,    //uOnChange : DefGetSelection;  
    end;
                              False,  //Sort     
                         
                              -1,     //Width
     if (Result) then begin
                              False,  //MultiSel   
               
                              False   //AllLines
        //DebugLine(iif(lInsertMode,'True','False'));
                              );  
       
        //Bei nicht Insert immer False
        if (lInsertMode = False) then begin
            Result := False;
        end;
    end;
      
      
    cSelect := LeftStr(oResult.Text, 1);
                                               
    if          (cSelect = 'A') then begin
        Meldung('A');
    end else if (cSelect = 'B') then begin
        Meldung('B');
    end else if (cSelect = 'C') then begin
        Meldung('C');
    end; 
                               
    MyFreeAndNil(oLines);
    MyFreeAndNil(oResult);
end;
end;
</syntaxhighlight>
</syntaxhighlight>

Version vom 25. März 2020, 10:17 Uhr


Methoden der Liste

Interne Funktionen Tastatur-Funktionen
OnListNew OnF1
OnResize OnF2
OnRefresh OnF3
Before_OnClose OnF4
OnF5
OnF6
OnF7
OnF8
OnF9
OnF10
OnF11
OnF12
OnReturn
OnInsert
OnDelete
OnESC

Beispiele Liste

Button F12 anzeigen und mit Funktionalität versehen

function OnListNew():string;
begin
    frmListe.cmdF12.Enabled := True;
    frmListe.cmdF12.Caption := 'F12 Test';
    frmListe.InitButtons(frmListe);
    frmListe.PaintButtons(frmListe);    
end;              

procedure OnF12();  
begin                          
    Meldung('Test');
end;

Andere Buttons Mit Funktion versehen

Var cMyF8 : String;
                           
function OnListNew():String; 
begin                         
    cMyF8  := 'Init'; 
    Result := '';
end;  

function OnF8():string;
begin
    Meldung('Hallo '+cMyF8);     
    Result := 'OK';
end; 

function Before_OnF8():String;
begin
    Meldung('Before Hallo '+cMyF8);
    
    //Dann wird Standard F8 nicht ausgeführt
    Result := 'READY'; 
    cMyF8  := Result;
end;

Button F12 mit Auswahlfunktion

function OnListNew():string;
begin
    frmListe.cmdF12.Enabled := True;
    frmListe.cmdF12.Caption := 'F12 Test';
    frmListe.InitButtons(frmListe);
    frmListe.PaintButtons(frmListe);    
end;                                                  

procedure OnF12();      
var oLines  : TStringList;
    oResult : TStringList;            
    lEsc    : Boolean;
    cSelect : String;
begin
    oLines := TStringList.Create();    
    oLines.Add('A - Test 1');
    oLines.Add('B - Test 2');
    oLines.Add('C - Test 3');
    
    oResult := GetSelectionExt(oLines, //Auswahl 
                               'Test', //Caption        
                               lEsc,   //Abruch? (var)            
                               Nil,    //uInit : DefGetSelection;
                               Nil,    //uOnChange : DefGetSelection;   
                               False,  //Sort      
                               -1,     //Width
                               False,  //MultiSel     
                               False   //AllLines 
                               ); 
    
    cSelect := LeftStr(oResult.Text, 1);
                                                 
    if          (cSelect = 'A') then begin
        Meldung('A');
    end else if (cSelect = 'B') then begin
        Meldung('B');
    end else if (cSelect = 'C') then begin
        Meldung('C');
    end;   
                                 
    MyFreeAndNil(oLines);
    MyFreeAndNil(oResult);
end;