Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 28.06.02 - 18:19:14

Titel: Agent via script starten
Beitrag von: rar am 28.06.02 - 18:19:14
Seas Leitln!
Weiß jemand von euch, wir ich ein Agent mit der Formel:

@Command([EditInsertText];"Schreib den Text, du blöder Agent!")

aus einem Button in einer Maske via script aufrufen kann?

Mein Miniscriptl schaut so aus:
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Set db = session.CurrentDataBase
 Dim Agnet As NotesAgent
 Set Agnet = db.GetAgent("Test")    
 Call Agnet.Run()          
   
Es kommt dann  immer der Fehler '@Function ist in diesem Kontext ungültig'
Und das am Freitag kurz vor Feierabend :'(

-dani

Titel: Re: Agent via script starten
Beitrag von: doliman am 28.06.02 - 19:12:54
Hi,

versuchs mal damit:

Dim s As New NotesSession
Dim db As NotesDatabase
Dim agent As NotesAgent
Set db = s.CurrentDatabase
Set agent = db.GetAgent("AgentName")
   If agent.Run = 0 Then
        Messagebox "Agent ran",, "Success"
   Else
       Messagebox "Agent did not run",, "Failure"
   End If
Titel: Re: Agent via script starten
Beitrag von: rar am 30.06.02 - 19:54:33
Hi Frank!
Das löst leider nicht mein Problem. Ich weiß zwar dann ob der Agent gelaufen ist oder nicht, aber der Text steht dann nicht in meinem Bodyfield. :-/
-d
Titel: Re: Agent via script starten
Beitrag von: doliman am 30.06.02 - 20:10:05
Hi,

wer schreibt den den Text in das Body Field, der Agent oder die Schaltfläche??
Denn das Script ruft nur den Agenten aus und füllt nichts in ein Feld?
Wenn Du mir noch mehr Infos gibst komm ich evtl. dahinter wie Du es machen willst.
Titel: Re: Agent via script starten
Beitrag von: rar am 30.06.02 - 20:37:28
O.K.
In der Schaltfläche steht das Script (muß Script sein). Das Scriptl soll den Agent aufrufen, der mit Formelsprache den Befehl [EditInsertText] aufruft.
Wenn es den Befehl in Script geben würde wäre es der Hammer. Aber irgendwie funktioniert es nicht so. Ich brauch den Text nämlich in blau und fett und so. Deswegen scheider uidoc.InsertText aus, weil ich den Text in ein rtitem schreiben müßte mit einem rtstyle. rtitem.AppendText geht auch nicht, weil der Text an der aktuellen Cursorposition eingefügt werden sollte.
Ich hoffe, daß es jetzt verständlicher ist.

-dani
Titel: Re: Agent via script starten
Beitrag von: doliman am 01.07.02 - 07:00:12
Hi,

jo setzt ist es etwas verständlicher gewesen.
Das Body Field ist doch ein RTF Feld, oder?
Wir haben das an einer anderen Stelle so gelöst:
die Script Klassen des RTF benutzt. Das Feld ausgelesen in eine Variable bearbeitet und wieder zurückgeschrieben in das Feld. Wärend der Verarbeitung wird es dann formatiert, angehängt.
So viel ich weiss funktioniert die Formel in Macro nicht so wie Du sie verwenden möchtest (formatieren, fett usw.)
das ganze mußt Du wohl in Script machen.
Ich schaue mal nach dem Code und poste es später.
Titel: Re: Agent via script starten
Beitrag von: pipsxx am 01.07.02 - 08:30:29
haaallo!!

habe ich das richtig verstanden: du willst per button text in ein dokument einfuegen?

ich weiss nicht, ob ich das jetzt richtig verstanden habe. aber kann man im frontend nicht einfach mit @SetField arbeiten, auch wenn es sich um RT handelt?

in script geht das doch sicherlich auch. ich meine, ganz ohne agent, sondern direkt im script fuer den button. du musst nur das aktuelle dokument nehmen. fuer das fuellen des feldes gibst dann sowas wie body.replaceitemvalue oder so aehnlich an. koennte mir vorstellen, dass das klappt. da findet sich doch bestimmt was...

wenn ich voellig daneben liege... sorry!!  :)
Titel: Re: Agent via script starten
Beitrag von: pipsxx am 01.07.02 - 08:32:14
ach nochwas...

wenn du weisst, dass der agent gelaufen ist. liegt es dann vielleicht eher am quellcode des agenten? ich mein, vielleicht stimmt ja irgendwas bei der formelsprache nicht?  ::)
Titel: Re: Agent via script starten
Beitrag von: rar am 02.07.02 - 10:01:33
@doliman:
Ich habe keine Ahnung wie man das auslesen des Feldes bewerkstelligen kann... In dem feld kann alles stehen. (Fromartierter Text, Tebellen, Attachments,....) Und irgendwo, wo der Cursor steht, soll der Text eingefügt werden. Das Auslesen vom Inhalt eines rtfeldes geht meines wissens nicht. (Nur mit GetFormattedText, was aber nur einen String (ohne Anhänge und so) ergibt).

@pipsxx:
Mit @SetField kann man dem Feld nur ein Wert zuweisen. Ich muß zum bestehenden Inhalt was anhängen '[EditInsertText]' wäre es eigentlich.
Und der Quellcode vom Agent solle auch stimmen.
In der Zeile '@Command([EditInsertText];"Einzufügender Text")' ist eigentzlich kein Fehler.

-d


Titel: Re: Agent via script starten
Beitrag von: Axel am 02.07.02 - 11:12:17
Hi,

hier hab ich ein Script aus einem Aktionsbutton aus einer Ansicht, das zwei Textzeilen in das RTF-Feld "Datei" des markierten Dokuments schreibt.


Sub Click
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim doc As NotesDocument
     Dim collection As NotesDocumentCollection
     Dim rtitem As Variant
     
     Set db = session.CurrentDatabase
     Set collection = db.UnprocessedDocuments
     Set doc = collection.GetFirstDocument
     
     Set rtitem = doc.GetFirstItem( "Datei" )
     If ( rtitem.Type = RICHTEXT ) Then
           Call rtitem.AppendText( "Text hinzufügen" )
           Call rtitem.AddNewLine( 1 )
           Call rtitem.AppendText("Noch mehr Text hinzufügen")
           Call doc.Save( False, True )
     End If
End Sub

Ich hoffe das hilft dir weiter.

Axel
Titel: Re: Agent via script starten
Beitrag von: pipsxx am 02.07.02 - 11:15:48
huhu!!

ich haette auch noch nen kleines skript fuer nen button. das schreibt den text in ein RT-feld. der text wird dabei angefuegt.

vielleicht kannst du damit was anfangen?  ;)

Sub Click(Source As Button)
     
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim workspace As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
     Dim Agnet As NotesAgent
     Dim rtitem As Variant
     
     Set db = session.CurrentDataBase
     Set uidoc = workspace.CurrentDocument
     
     Call uidoc. gotofield("Inhalt")
     Call uidoc.FieldAppendText( "Inhalt", "hallo" )
     
End Sub
Titel: Re: Agent via script starten
Beitrag von: rar am 02.07.02 - 11:24:43
Danke für die scripts, aber sie helfen leider nicht. :'(
AppendText fügt den Text am Ende des Feldes ein. Ich brauche den Text aber an der aktuellen Cursorposition....

Ich bekomme das Gefühl, daß ich langsam am verzweifeln bin.
Titel: Re: Agent via script starten
Beitrag von: pipsxx am 02.07.02 - 11:38:41
hm...

wenns weiter nix is ;)

siehe designer-hilfe:

Inserts a text value at the current cursor position on a document.
Defined in
NotesUIDocument
Syntax
Call notesUIDocument.InsertText( textValue$ )

wars vielleicht das??  :D
Titel: Re: Agent via script starten
Beitrag von: rar am 02.07.02 - 11:44:50
Wäre fein.
Aber der Text soll, wie bereits oben erwähnt, formatiert sein. (siehe 5. Statement) in diesem Thread
-dani
Titel: Re: Agent via script starten
Beitrag von: pipsxx am 02.07.02 - 11:51:50
sorry, das hab ich wohl bei den ganzen eintraegen uebersehen...

dann weiss ich leider auch nicht weiter. hm...  :-/

aber vielleicht findet sich ja doch nochwas
Titel: Re: Agent via script starten
Beitrag von: Axel am 02.07.02 - 11:57:34
Hi,

ich glaube, dass was du machen willst in mit den Boardmitteln von Notes nicht zumachen.

Was soll den der Effekt von dem Ganzen sein ? Kannst du den Text nicht in ein sep. Feld schreiben, das entsprechend blau und fett formatiert ist ?

Axel
Titel: Re: Agent via script starten
Beitrag von: rar am 02.07.02 - 12:35:04
Das ganze soll ein Untrerschriftsbutton in der Maildatenbank werden, der aus einer anderen Datenbank die Werte übernimmt und dem User in seinen verschiedenen Mailmasken 2 verschiedene Unterschriften zur Verfügung stellt.
-d
Titel: Re: Agent via script starten
Beitrag von: Axel am 02.07.02 - 12:39:41
Hi,

dann ist mit einem sep. Feld auch nix.

Sorry, nun bin ich mit meinem Latein auch am Ende. Wie gesagt, ich glaube das es mit notesmitteln so nicht zu realisieren ist.   :( :-/


Axel
Titel: Re: Agent via script starten
Beitrag von: rar am 02.07.02 - 13:05:23
Kann man nix machen.
Trotzdem Danke für die Bemühungen.
Vielleicht hat ja jemand anderer eine Idee...
-d
Titel: Re: Agent via script starten
Beitrag von: doliman am 02.07.02 - 19:02:06
Hi,

nun wenn der Text formatiert sein soll, dann muß Du den Text mit Kommentarzeilen belegen. Ich habe es z. B. für eine Briefvorlage benutzt, das sa so aus:
Ein RTF Feld, da Stand Text drin. Es gab Passagen die wurden zur Laufzeit mit Variablen befüllt, also habe ich im Text die Marken <<Variable1>> eingefügt. Desweiteren wollte ich gewisse Einträge fett geschrieben haben, somit habe ich mit den Kommentar
<<FETT AN>> Irgendein Text <<FETT AUS>> erstellt, usw. Dann habe ich das Feld ausgelesen, die Variablen ersetzt und den Text formatiert und das Alles mit der RTF Klasse von Notes. Umständlich, gebe ich zu aber es funktioniert. Vielleicht hilft Dir ja das.
Titel: Re: Agent via script starten
Beitrag von: almue am 04.07.02 - 17:42:40
Hi,

ich denke dass der ursprüngliche Fehler (1. Mail) daher kommt, weil beim Agenten unter dem Punkt "Für welche Dokumente soll er gelten" nicht die Einstellung "Einmal ausführen" gewählt ist.

Aber hier noch ein anderer Tip:
Wenn der Unterschriftstext im Quelltext bereits formatiert ist, dann kann man ihn per Script folgendermaßen ins aktuelle RTF-Feld reinholen:


Zuerst muss das entsprechende Quelldokument mit dem gewünschten Text gefunden werden, also irgendwas wie

Set sDoc = view.GetDocumentByKey(key)

dann über die UI-Klasse öffnen und Feldinhalt in Zwischenablagen kopieren.

Set sUiDoc = uiws.EditDocument(True, sDoc)
Call sUiDoc.GotoField("Feldname")
Call sUiDoc.SelectAll
Call sUiDoc.Copy
Call sUiDoc.Close

Abschließend kann der Text aus der Zwischenablage ins aktuelle Dokument an die aktuelle Cursorposition eingefügt werden:

Call thisUiDoc.Paste()

Würde mich freuen wenn ich helfen konnte
Alwin Müller
Titel: Re: Agent via script starten
Beitrag von: rar am 05.07.02 - 16:36:13
Vielen Dank Alwin!

Deine Lösung klingt sehr gut. ;D

Ich habe jetzt für eine weniger schöne Mögichkeit in Formelsprache entschieden. Für deine Variante, müßte ich die Datanbank, in der die Personendokumente enthalten sind und ihre Befüllung komplett umschreiben, weil die Felder RTFs sein müssen, weil der Inhalt ja blau sein sollte.
Da wir in unserer Firma zur Zeit von R4 auf R5 wechseln, und das Problem unter R5 nicht mehr auftritt, haben ich und mein Organisator beschlossen, daß die R4 User die nächsten 2 Monate mit der jetzigen nicht ganz so schönen Lösung leben dürfen ;).

-dani