Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 05.09.04 - 17:48:46

Titel: Execute - Script-Code an Sub übergeben
Beitrag von: TMC am 05.09.04 - 17:48:46
Ich möchte ein spezielles String einer Sub übergeben.

Aktuell sieht das so aus:

A) Agent von dem aus ich die Sub aufrufe:
Code
Sub Initialize
   Dim strExecuteCode As String
   strExecuteCode = |"Some text: " + doc.Title(0)|
   Call MySub(strExecuteCode)
End Sub

B) In der Sub steht dann an entsprechender Stelle:
Code
   strExecuteCode = |strSubject = | + strExecuteCode
   'Msgbox strExecuteCode
   Execute strExecuteCode

Was mir hier noch nicht gefällt:
In der Sub müssen die Variablen "doc" und "strSubject" global definiert sein (damit hier Execute funktioniert) - die hätte ich aber gerne in der Sub selber.

Ist das überhaupt so der gängige Weg, um einer Sub/Function die Zusammensetzung eines Strings vorzugeben, oder gibt es da einen einfacheren Weg - ohne Execute zu verwenden?

Prinzipiell geht es hier darum, einer Sub/Function mitzugeben, wie sich ein String in der Sub/Function zusammensetzen soll (also aus Text und 1-x verschiedenen Feldinhalten eines Dokumentes). Dabei möchte ich möglichst variabel sein.
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: elajen am 06.09.04 - 09:07:08
Hallo,

die Frage ist ja eigentlich in welchem Kontext läuft die Funtion, die man mit excute ausführt. Nach dem, wie Du's beschreibst, denke ich, daß die Funktion genauso behandelt wird, wie die anderen Funktionen in dem Kontext woraus sie aufgerufen wird (also z.B. zum Global einer Maske ).
Das würde auch den Zugriff nur auf globale Variablen erklären.


Gruß von Ekki
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 06.09.04 - 09:34:30
Variable, die nicht nur innerhalb eines via Execute erst zur Laufzeit zu kompilierenden und auszuführenden Codes gültig sein sollen, müssen (logischerweise) global deklariert sein. Daran führt kein Weg vorbei.

Matthias, wenn es Dir "nur" um das Verketten von Strings aus n Feldern geht, dann kannst Du doch auch eine Funktion bauen, die in einem Array die Feldnamen, die zu berücksichtigen sind, enthalten.

Bernhard
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: TMC am 06.09.04 - 21:24:24
Matthias, wenn es Dir "nur" um das Verketten von Strings aus n Feldern geht, dann kannst Du doch auch eine Funktion bauen, die in einem Array die Feldnamen, die zu berücksichtigen sind, enthalten.

Hab auch schon daran gedacht, aber das ist mir zu wenig flexibel.


Beispiel:
Ich möchte z.B. in den Strings haben:
"Text 1 " + doc.Status(0) + " ...." + doc.Subject(0)
oder
"Text"
oder
doc.Feld3(0) + " ...." + doc.Feld7(0) + doc.Feld9(0)

Also eine beliebige Kombination von Text und Feldinhalten.
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 06.09.04 - 21:30:29
Naja, das meinte ich doch.
Dim aMyFields (0 to 3) As String
Dim strResult As String

aMyField (0) = "Status"
aMyField (1) = "Subject"
aMyField (2) = "Hints"

strResult = RetrieveFields (docMyDocument, aMyField)

Die Function garrabelt sich dann aus docMyDocument via GetItemValue (oder wie auch immer) das Zeugs dynamisch zusammen.
Ich kann da keinen Nachteil zu Execute erkennen.

Ciao,
Bernhard
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: TMC am 06.09.04 - 21:50:06
Kapier ich jetzt noch nicht ganz, Bernhard.

Ich hab hier also meinen Agenten:
Sub Initialize
   'hier irgend ein Code, um der Function zu übergeben, wie sich
   'das Zielstring zusammensetzen soll ...
   Call MyFunction( ??? )
End Sub

Die Function sieht z.B. so aus:
Function MyFunction( ??? as .....) as Variant
    Dim strResult as String
    strResult = ???
End Function


Wie kann ich der Function nun genau sagen, wie sich das String zusammensetzen soll (nach den o.g. Beispielen, die vorkommen könnten) ?

Matthias
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 06.09.04 - 22:00:21
Na, genau, wie ich es geschrieben habe:

Function RetrieveFields (docMyDocument as NotesDocument, aMyField as Variant)

Dim strResult As String
Dim iLoop as Integer

For iLoop = 0 to Ubound (aMyField)
   strResult = strResult = docMyDocument.GetItemValue (aMyField (0)) (0)
Next

Das nur ganz fix hingepinselt als Beispiel, was ich meine.

Hilft Dir das ?

Bernhard
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: TMC am 06.09.04 - 22:11:20
Langsam komm ich drauf was Du meinst, danke  :D

Kleines Problem ist noch, dass ich ja auch Text noch übergeben will (vor / zwischen / nach den Feldern).

Kann ich aber evtl. über Präfixe lösen.

Dim aStringbestandteil (0 to 2) As String
aStringbestandteil(0) = "FieldValue.Subject"
aStringbestandteil(1) = " a bisserl Text dazwischen "
aStringbestandteil(2) = "FieldValue.Status"

If Left$(aStringbestandteil(i),11) = "FieldValue." Then
   Massagebox "You, Du bist ein Feldname"
Elde
   Massagebox "Du bist nur Text"
End if

Danke nochmal,
Matthias
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 06.09.04 - 22:31:35
Jo, das bietet viel Spielraum für Ausgestaltungen. Wobei aber natürlich auch die Execute-Variante locker klappen würde. Flexibler ist wahrscheinlich der Weg, auf dem dieser Thread momentan ist.

Du könntest ja auch "Lückenfüller" mit anführenden Sonderzeichen kennzeichenen: "~~" (die im realen Leben unwahrscheinliche "Doppel-Mathilde" (JEEEEEEEEEEEENS !) oder Chr$ (255) oder ...

Good luck, Matthias - und poste mal, wofür Du Dich entschieden hast  ;)

Bernhard
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: TMC am 06.09.04 - 23:10:22
und poste mal, wofür Du Dich entschieden hast

Hab mich dann doch für die aktuelle Variante entschieden  ;)
Klar, klappt auch mit Execute, aber jetzt diese Lösung erscheint mir sauberer. Execute hat für mich auch hier einen faden Beigeschmack, weil z.B. Errorhandling nicht sauber möglich. Und der "User" der Function muss wissen, wie man das Execute-String aufbaut.
Aber so ist das ganz einfach: Willste Feldinhalt, dann setze den Lückenfüller (z.B. die Multiple-Mathilde ;D) ein, ansonsten schreib einfach den Text.
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: Semeaphoros am 08.09.04 - 19:08:05
 :)

Also die Doppel-Mathilde und der Lückenfüller sind schon ein hübsches Paar, jedenfalls gibt es sie jetzt auch im Wörterbuch .....

 :)
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 08.09.04 - 20:04:47
Merci, Jens !

Bernhard

PS: Fand ich heute zufällig auf einer Website, die Namen deutet:
Bernhard = brutaler Schweizer  ;D

Für meinen Sohn gab es
Stefan = Fussballanhänger auf billigem Platz
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: Semeaphoros am 08.09.04 - 20:18:54
Ach .... haben die denn bei Dir den erweiterten Namen mit -iner noch am Schluss gemeint? Versteh ich eigentlich nicht wirklich ....
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: koehlerbv am 08.09.04 - 20:35:06
Na, die meinen wohl "Bern" und "hart".
Egal.

Bernhard

PS: Aber Bern ist eine wunderschöne Stadt !!!
Titel: Re:Execute - Script-Code an Sub übergeben
Beitrag von: Semeaphoros am 08.09.04 - 21:12:39
Das will ich doch meinen! Auch wenns für mich bald nicht mehr ganz Bern sein wird .... sondern mehr auf dem Lande .. :)