Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: grandmetre am 03.06.08 - 10:54:12

Titel: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 10:54:12
Hallo zusammen,

Ich versuche mich erstmal an der Lotus-script-sprache und scheitere schon beim hinzufügen eines Items im Document. Ich bekomme immer die Meldung: "Object variable not set". Hier der dazugehörige code:

Code
	
	Dim session As New NotesSession
	Dim doc As NotesDocument
	
	Set doc = session.DocumentContext
	Call doc.ReplaceItemValue("Status", "processing")
	Call doc.Save( True, False , False )

Ich hab es auch schon übers NotesUIWorkspace und übers NotesUIDocument versucht, aber leider mit dem gleichen Ergebnis. Dürfte doch eigentlich nicht so schwehr sein, dachte ich zumindest :-)
Titel: Re: Item in Document hinzufügen
Beitrag von: klaussal am 03.06.08 - 10:59:47
Sieh mal in der Designer-Hilfe nach. Da steht ein gutes Beispiel....

Und "Option Declare" nicht vergessen.
Titel: Re: Item in Document hinzufügen
Beitrag von: Driri am 03.06.08 - 11:00:13
DocumentContext gilt nur für einen Agenten. Willst Du das Item im aktuell geöffneten Dokument setzen ?

Wenn ja, könntest Du über das UIDOcument an das Document kommen. Man muß dann nur darauf achten, daß man das UIDocument nicht drüberspeichert.

Sieht dann in etwa so aus :

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Call doc.ReplaceItemValue("Status", "processing")
Call doc.Save( True, False , False )

Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 11:01:07
Wie rufst du denn den Code auf, Agent, Ansichten- oder Maskenaktion? Ist das der gesamte Code?

Willst du damit auf das markierte Dokument in der Ansicht zugreifen ?

Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 11:20:30
DocumentContext gilt nur für einen Agenten. Willst Du das Item im aktuell geöffneten Dokument setzen ?

Wenn ja, könntest Du über das UIDOcument an das Document kommen. Man muß dann nur darauf achten, daß man das UIDocument nicht drüberspeichert.

Sieht dann in etwa so aus :

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Call doc.ReplaceItemValue("Status", "processing")
Call doc.Save( True, False , False )



Das hatte ich auch schon versucht. Leider kommt da auch die gleiche Fehlermeldung.
Ich versuche das Item im "Sub Queryclose(Source As Notesuiview, Continue As Variant)" im $Inbox Ordner hinzuzufügen.
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 11:25:05
Wenn du den Code in das QueryClose - Event packst, dann kann das mit dem UIDocument nix werden.

Beschreibe mal, was du überhaupt errreichen willst?


Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 11:30:41
Ich will ein TeamMailbox so verändern, dass wenn eine Person eine Mail gerade anschaut oder die Mail schließt ein "Status"-Item gesetzt wird, damit ich bei anderen Usern, die die gleiche Datenbank benutzen durch ein Icon anzeigen kann, Ob die Mail gerade bearbeitet wird oder schon bearbeitet wurde. Das anzeigen der Icons ist kein Problem. Nur das erstellen des Items im aktuellen Document.
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 11:36:43
Dann gehört der Code in die Events der Mail-Maske und dann funktioniert auch der Code von Ingo.

Flag beim Lesen: Postopen-Event
Flag beim Schließen: QueryClose-Event


Axel

Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 11:47:16
Jo, macht Sinn.

Leider kommt der Fehler immernoch beim öffnen des Documents.
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 11:52:16
Wie sieht der Code jetzt aus? Wo hast du ihn genau eingefügt? Was sagt der Debugger zur Variablenbelegung?


Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 11:56:56
Ich habe im "Sub Postopen(Source As Notesuidocument)" nach dem letzten End If und vorm End SUB den Oben angegeben Code eingefügt. Der Debugger gibt keinen Fehler zurück. Nur beim öffnen des Memos kommt dann die Fehlermeldung: "Object variable not set". Ich habe nicht die leiseste Ahnung auf welche Variable sich die Fehlermeldung beziehen könnte. Ich habe es auch schon mit dem Source-Parameter versucht. Leider mit dem gleichen Ergebnis.
Titel: Re: Item in Document hinzufügen
Beitrag von: DerAndre am 03.06.08 - 12:11:53
Bau noch ein Fehlerhandling ein, dann siehst Du, wo es klemmt.
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 12:13:14
Ich habe im "Sub Postopen(Source As Notesuidocument)" nach dem letzten End If und vorm End SUB

 ???

Gibt's da noch mehr Code? Du musst schon mehr Infos liefern.

Meine Kristallkugel befindet sich zur Zeit im Urlaub. Mehr Input -> mehr Output !!!

Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 12:39:31
Code
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	
	Set uidoc = ws.CurrentDocument
	Set doc = uidoc.Document
	
	Call doc.ReplaceItemValue("Status", "processing")
	Call doc.Save( True, False , False )

Halt das, was oben angegeben ist.

Der Rest gehört zum Standart-Template und hat mit diesen Zeilen nichts zu tun.
Titel: Re: Item in Document hinzufügen
Beitrag von: Driri am 03.06.08 - 12:48:30
Das Event liefert Dir ja schon ein UIDocument mit, da brauchs Du das nicht extra noch deklarieren.

Versuchs mal so :

Dim doc As NotesDocument
Set doc = Source.Document
Call doc.ReplaceItemValue("Status", "processing")
Call doc.Save( True, False , False )
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 12:52:52
André hat es ja auch schon mal geschrieben. Bau mal ein Fehlerbehandlung ein. dann solltest du sehen wo's klemmt.

Bist du dir ganz sicher, dass der Fehler von deinem Code kommt? Der sieht nämlich sauber aus.

Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 12:59:10
Das Event liefert Dir ja schon ein UIDocument mit, da brauchs Du das nicht extra noch deklarieren.

Versuchs mal so :

Dim doc As NotesDocument
Set doc = Source.Document
Call doc.ReplaceItemValue("Status", "processing")
Call doc.Save( True, False , False )


Hab ich versucht. Leider nicht besser geworden :-(

Wie realisiert man am besten eine Fehlerbehandlung? Gibt es da bei Lotus-Script spezielle Klassen für oder realisiert man das mit textausgaben?
Titel: Re: Item in Document hinzufügen
Beitrag von: DerAndre am 03.06.08 - 13:03:27
Fehlerbehandlung (http://atnotes.de/index.php?board=3%3baction=display%3bthreadid=11980%3bstart=14)
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 13:16:10
Ich habe gerade den debugger gefunden :-). So wie es aussieht schmeißt der Teil, um den es gerade geht keine Fehlermeldung. Diese wird vorm Ausführen des Postopen ausgegeben. Was wird denn direkt davor ausgeführt?
Titel: Re: Item in Document hinzufügen
Beitrag von: Axel am 03.06.08 - 13:17:23
Der Queryopen-Event und die Initialized-Events der Felder.

Suche in der Designer-Hilfe mal nach "Event sequencing". Da ist beschrieben welche Events in welcher Reihenfolge ausgeführt werden.

Axel
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 13:57:44
So, man muss auch an der richtigen Stelle gucken. Ich habe beim Anzeigen des Icons nicht in Betracht gezogen, dass das Status Item noch nicht gesetzt sein könnte. Nachdem ich es mit @IsAvailable abgefragt hatte war alles in Ordnung.

Danke an alle, die mir so schnell zurück geschrieben haben.
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 03.06.08 - 14:57:24
Eine Frage habe ich noch. Warum liest mir dieser Code nicht den Status aus, wenn er gesetzt ist?
Der debugger verriet mir, dass das der Fall ist. Trotzdem wird das Symbol 100 angezeigt.

Code
REM {DNT};
nFollowUpSet := @If(@IsAvailable(FollowUpStatus);@TextToNumber(FollowUpStatus);
!@IsAvailable(FollowUpStatus) & @IsAvailable(FollowUpDate) & !@IsText(FollowUpDate) ; 2;
0);
nPriority := @Text(nfollowupset);
@If(@IsError(nFollowUpSet); ""; nFollowUpSet = 0; "";
nFollowUpSet = 1; 181; nFollowUpSet = 2; 182; nFollowUpSet = 3; 183; "");
@If(@IsAvailable(Status); @If(Status = "processing"; 98; Status = "done"; 99; 50); 100);

Es geht um die letzte Zeile. Der Rest ist die originale Zeilenformel.
Kann mir da jemand helfen?
Titel: Re: Item in Document hinzufügen
Beitrag von: flaite am 03.06.08 - 17:50:41
Du brauchst auf der linken Seite natürlich etwas, auf das die rechte Seite des Ausdrucks zugewiesen wird.
In welches Feld soll denn die 100 geschrieben werden?

so etwa:
Code
FIELD statusCode := @If(@IsAvailable(Status); @If(Status = "processing"; 98; Status = "done"; 99; 50); 100);
Titel: Re: Item in Document hinzufügen
Beitrag von: Driri am 04.06.08 - 08:47:05
@Axel :

Das ist eine Spaltenformel, um in der Spalte ein Symbol anzuzeigen, wenn das Feld Status einen entsprechenden Inhalt hat. Zumindest gehe ich mal davon aus.


@Philip :

Dir ist aber klar, daß wenn Du das in einer existierenden Spalte machst, die dort evtl. angezeigten Standardsymbole nicht mehr angezeigt werden ?

Auf den ersten Blick kann ich an der Formel so keinen Fehler feststellen.
Titel: Re: Item in Document hinzufügen
Beitrag von: grandmetre am 05.06.08 - 07:23:38

Dir ist aber klar, daß wenn Du das in einer existierenden Spalte machst, die dort evtl. angezeigten Standardsymbole nicht mehr angezeigt werden ?


Das ist mir schon klar. Es geht mir hier auch mehr um die Semantik, da ich gerade erst anfange mich in Lotus-Skript einzuarbeiten.

Es scheint eine Sache der Ansichtsaktualisierung zu sein. Ich dachte, wenn man die NotesUI...-Klassen benutzt würde dies automatisch geschehen.
Titel: Re: Item in Document hinzufügen
Beitrag von: Driri am 05.06.08 - 10:09:37
Wie kommst Du jetzt auf NotesUI ? Im bisherigen Thread greift der Code immer aufs Backend zu.