XbpSle - Datalink

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

XbpSle - Datalink

Beitrag von andreas »

Hallo,

ich habe bei mir einen Fehler, bei dem ich nicht auf die Lösung komme.

Wenn ich folgenden Code schreibe, funktioniert alles:

Code: Alles auswählen

::sleName:dataLink := {|x| IIf( x==NIL, ::Data:RecData:Name, ::Data:RecData:Name := x ) }
::sleName:setdata()
Wenn ich es versuche über Macro zu generieren

Code: Alles auswählen

cVar := "Name"
cMacro := "{|x| IIf( x==NIL, ::Data:RecData:" + cVar  + ", ::Data:RecData:" + cVar  + " := x ) }"
::sleName:dataLink := &cMacro 
::sleName:setdata()
bekomme ich einen Fehler in der SetData-Zeile:
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Unbekannte Variable
oError:filename :
oError:genCode : 22
oError:operation : SELF
oError:osCode : 0
oError:severity : 2
oError:subCode : 2000
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
Was kann man hier machen?
Gruß,

Andreas
VIP der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpSle - Datalink

Beitrag von georg »

Hallo, Andreas -


wenn das Makro zur Laufzeit erstellt wird, kann es sich nicht auf lokale Variable beziehen, wie self. Dann sind nur PRIVATE und PUBLIC Variablen möglich.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von Tom »

Genau. Du müsstest die SELF-Referenz (den Doppelpunkt) durch einen Variablennamen ersetzen, und der müsste dann mindestens PRIVATE sein. In der Variable müsste das SLE stecken.
Herzlich,
Tom
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas »

Ich habe jetzt in der Methode, die diese Macro-Zuweisungen macht, eine PRIVATE-Variable für deklariert und der das SELF zugewiesen.
Leider bekomme ich wieder den gleichen Fehler, nur jetzt auf die neue Variable.
Wo soll dann diese Variable in einer Klasse definiert werden, damit es funktioniert?
Gruß,

Andreas
VIP der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpSle - Datalink

Beitrag von georg »

Hallo, Andreas -


dann poste doch mal den Code.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas »

Den Code muss ich erstmals als Beispiel zusammenstellen.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpSle - Datalink

Beitrag von AUGE_OHR »

und was ist wenn du den Codeblock über eine Function zusammen baust ?

Code: Alles auswählen

cVar := "Name"
cMacro := MakeBlock(Self,cVar)
::sleName:dataLink := &cMacro 

FUNCTION MakeBlock(oSelf,cVar)
LOCAL cMacro := "{|x| IIf( x==NIL, oSelf:Data:RecData:" + cVar  + ", oSelf:Data:RecData:" + cVar  + " := x ) }"
RETURN cMacro
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpSle - Datalink

Beitrag von georg »

Hallo, Jimmy -


irgendwie habe ich das Gefühl, dass das auch nicht klappen wird.

oSelf wird in MakeBlock() nicht verwendet, und daher wird auch die Codeblock-Umwandlung nicht funktionieren.

Ich verstehe im Moment nicht, was Andreas eigentlich will, daher meine Frage. Ich vermute, dass er Eingabefelder hat, die mit iVars in :recData korrespondieren. Dafür will er einen Zuweisungscodeblock haben, der immer auf das jeweilige Feld abgestimmt ist.

Also in der Art:

Code: Alles auswählen

cName := "Feld1"
cBlock := {|x| IIf( x==NIL, ::Data:RecData:Feld1, ::Data:RecData:Feld1 := x ) }
...
cName := "Feld2"
cBlock := {|x| IIf( x==NIL, ::Data:RecData:Feld2, ::Data:RecData:Feld2 := x ) }
...
Und das Ganze wahrscheinlich in einer Schleife?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpSle - Datalink

Beitrag von AUGE_OHR »

georg hat geschrieben: Do, 14. Jun 2018 19:08 oSelf wird in MakeBlock() nicht verwendet, und daher wird auch die Codeblock-Umwandlung nicht funktionieren.
:?:
ich übergebe "self" als Parameter "oSelf" da ich "::" nicht übergeben kann.
nun kann aber das "::" genau das Problem sein da es zur Laufzeit nichts davon weiss.
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpSle - Datalink

Beitrag von georg »

Hallo, Jimmy -


Deine Ansatz löst nicht das Problem.

Code: Alles auswählen

cVar := "Name"
cMacro := MakeBlock(Self,cVar)
::sleName:dataLink := &cMacro 

FUNCTION MakeBlock(oSelf,cVar)
LOCAL cMacro := "{|x| IIf( x==NIL, oSelf:Data:RecData:" + cVar  + ", oSelf:Data:RecData:" + cVar  + " := x ) }"
RETURN cMacro
Spielen wir das Ganze mal durch. Unterstellen wir mal, das wir genau das durchspielen. Wir erhalten dann eine Variable cMacro mit folgendem Inhalt:

Code: Alles auswählen

"{|x| IIf( x==NIL, oSelf:Data:RecData:Name, oSelf:Data:RecData:Name := x ) }"
Dieser String wird von MakeBlock() zurückgegeben, und in der aufrufenden Funktion wird es wieder (!) knallen, da z.B. oSelf nicht bekannt ist. Einverstanden?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpSle - Datalink

Beitrag von AUGE_OHR »

ok ... nächster Versuch

Code: Alles auswählen

cVar := "Name"
oSelf := self
cMacro := MakeBlock(oSelf,cVar)
::sleName:dataLink := &cMacro
gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas »

Hallo Georg,

du hast mit deiner Vermutung recht! Ich möchte eine Automation erreichen, in dem die Namen von SLE als Bezug genommen und automatisch auf die entsprechende Daten gelinkt werden. Das gleiche soll auch mit den Methode passieren.
Ich möchte eine Standardklasse, von der ein Dialog zus. erbt und diese Zuweisungen durchführt.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas »

Die Möglichkeit über zus. Funktion habe ich schon gestern ausprobiert, was aber leider zum gleichen Ergebnis führt.
Ich werde mal Support anschreiben, sobald ich die Zeit dafür finde, wahrscheinlich am WE.
Gruß,

Andreas
VIP der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpSle - Datalink

Beitrag von georg »

Hallo, Andreas -


m.E. solltest Du den Codeblock durch den Aufruf einer Funktion ersetzen. Da es sicher aber wohl um eine Schleifen handeln soll, musst Du mit Detached Locals arbeiten:

Code: Alles auswählen

bBlock := MakeBlock(self, cName)
...

FUNCTION MakeBlock(oSelf, cName)
LOCAL bBlock
bBlock := {|x| RufeMeineFunktion(oSelf, cName)}
RETURN (bBlock)
Das sollte so funktionieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten