Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet 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
-
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
-
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
-
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.
-
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
-
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.
-
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!! :)
-
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? ::)
-
@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
-
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
-
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
-
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.
-
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
-
Wäre fein.
Aber der Text soll, wie bereits oben erwähnt, formatiert sein. (siehe 5. Statement) in diesem Thread
-dani
-
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
-
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
-
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
-
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
-
Kann man nix machen.
Trotzdem Danke für die Bemühungen.
Vielleicht hat ja jemand anderer eine Idee...
-d
-
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.
-
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
-
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