Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: mgeidl am 21.02.11 - 10:59:16

Titel: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 21.02.11 - 10:59:16
Hallo!

Kann mir bitte jemand einen Tipp geben?
Ich hab eine Personalanforderungs-DB in der u.a. Auflösungen (Kündigungen) durch einen Workflow laufen. Dazu gibt´s Mitarbeiterdokumente, in denen alle MA-Daten drinnen sind, u.a., ob der MA aktiv oder inaktiv ist.
Sobald nun eine Auflösung genehmigt wird, wird der MA gesucht und das Kennzeichen (M_KZ) auf inaktiv gesetzt. Hab unten den code gepostet. In der Zeile, in der der Status ersetzt werden soll, bekomm ich die Fehlermeldung "Object variable not set". Bitte um Hilfe - Danke

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim doc As NotesDocument
   Dim currdoc As NotesUIDocument
   Dim collection As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim maname As String
   Dim mailto As String
   
   Set currdoc= ws.CurrentDocument
   
   maname = currdoc.FieldGetText("MA_name")
   
   
   searchFormula$ = "select Form = 'Mitarbeiter' & M_Name = '"+maname+"' "
   Set db = session.CurrentDatabase
   Set collection = db.Search(searchFormula$, Nothing,0)
   Set doc = collection.GetFirstDocument
   
   Call doc.ReplaceItemValue("M_KZ","inaktiv" )
   Call doc.Save( True, False )
   
   Call currdoc.FieldSetText("Status","genehmigt")
   Call currdoc.FieldSetText("view_status","abgeschlossen")
   Call currdoc.FieldSetText("K_gen_am",Cstr(Today))
   Call currdoc.FieldSetText("K_gen_von",session.UserName)
   
   mailto=currdoc.FieldGetText("Mail_HR")
   Call sendmail(mailto,"Kündigungsantrag","Antrag wurde genehmigt! ", False)
   
   Call currdoc.Refresh
   Call currdoc.Save
   Call currdoc.Close
   
End Sub


LG
Marietta
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: klaussal am 21.02.11 - 11:04:15
Zitat
Set doc = collection.GetFirstDocument
Ist überhaupt ein Dok in der Collection ?

Da fehlt grundsätzlich eine Fehlerbehandlung !!
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: Glombi am 21.02.11 - 11:04:53
Die Searchformel ist falsch, daher ist die Collection leer und doc also Nothing.

Versuch mal folgende Formel:
searchFormula$ = |Form = "Mitarbeiter" & M_Name = "| +maname + |"|
...
 Set doc = collection.GetFirstDocument
if doc is nothing then
msgbox "Kein Dokument gefunden",0+16,"Abbruch"
exit sub
end if
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: ascabg am 21.02.11 - 11:06:00
Hallo,

Das Dein Script durch einen Button ausgeloest wiwrd ist klar.

Dennoch meine Frage.
Wo befindet sich der betreffende Button?
(wird er angeklickt, wenn ein Dokument geoeffnet ist, oder aus einer Ansicht heraus)


Andreas
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 21.02.11 - 11:20:16
danke mal an alle für die antworten.

Die Aktion wird aus einem geöffneten Dokument ausgeführt.

Normal sollte er ein Dokument finden, weil in der Maske oben über einen Button ein Mitarbeiter ausgewählt wird. Also liegt´s an der Search-Formel :-(
Hab die jetzt so eingetragen - und jetzt kommt die Fehlermeldung :-(

Mir ist nicht ganz klar, wofür die | stehen?

LG
Marietta
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 21.02.11 - 11:26:41
mist, jetzt hab ich gesehen, warum´s net funktioniert:

das feld MA_Name ist ein Feld mit Mehrfachwerten. Wenn ich jetzt eine Auflösung mit einem Mitarbeiter mach, dann funktionierts, wenn aber, wie in dem Fall, der jetzt grad das problem ausgelöst hat, dort 4 Mitarbeiter drinnen stehen (jeweils mit , getrennt), dann wohl nicht :-(

Kann ich das so überhaupt lösen?

LG
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: hupfi am 21.02.11 - 12:05:23
mist, jetzt hab ich gesehen, warum´s net funktioniert:
wie in dem Fall, der jetzt grad das problem ausgelöst hat, dort 4 Mitarbeiter drinnen stehen (jeweils mit , getrennt), dann wohl nicht :-(

Hi,

möchtest du dann bei 4 Mitarbieter das Kennzeichen auf inaktiv setzen?

Du kannst das über eine DocumentCollection lösen, indem du bei allen
gefundenen Dokumenten das Feld mit Hilfe einer Schleife änderst.


Gruß
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: ascabg am 21.02.11 - 12:10:16
Zitat
Hi,

möchtest du dann bei 4 Mitarbieter das Kennzeichen auf inaktiv setzen?

Du kannst das über eine DocumentCollection lösen, indem du bei allen
gefundenen Dokumenten das Feld mit Hilfe einer Schleife änderst.

Also wenn es nur hierum geht, dann hilft auch ein NotesDocumentCollection.StampAll(...)


Andreas
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: marschul am 21.02.11 - 12:19:23
Ich vermute, die entsprechenden MAs stehen im aktuellen Dokument (Feld MA_Name) und das Search fällt auf die Nase, weil da mehrere Werte mit Komma getrennt enthalten sind.

D.h. die searchFormula müsste angepasst werden:
Code
maname = Replace(currdoc.MA_Name, ",", |":"|)

Anschließend ist das mit dem StampAll eine gute Idee.

Gruß
Marco

Edit: Sorry, hab gerade gelesen, dass da Mehrfachwerte enthalten sind, also lautet es richtig
Code
maname = Join(currdoc.MA_Name, |":"|)
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 21.02.11 - 12:32:12
jetzt bin ich komplett verwirrt  ???

also wenn ich die searchFormula anpasse, wie Marco gemeint hat, kommt beim speichern vom script "MA_Name" not a MEMBER  ???

und wie bring ich das StampAll unter. hab in der Notes-Hilfe geschaut, aber nix gefunden?

LG
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: klaussal am 21.02.11 - 12:36:27
Zitat
Beispiel
Replaces the value of a specified name in all documents in a collection.
Defined in
NotesDocumentCollection
Syntax
Call notesDocumentCollection.StampAll( itemname, value )
Parameters
itemname
String. The name of the item.
value
A value appropriate for the item type.
Usage
If the item does not exist, it is created.
The item values are immediately written to the back-end documents. You do not have to use the Save method of NotesDocument after StampAll. However, any documents modified by your script must be saved before calling StampAll.
This method does not modify existing NotesDocument objects. Documents must be retrieved again to see the changes.
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: marschul am 21.02.11 - 13:11:13
Zitat
also wenn ich die searchFormula anpasse, wie Marco gemeint hat, kommt beim speichern vom script "MA_Name" not a MEMBER

Hmmm, das liegt wohl daran, dass es sich um das Frontend-Dokument handelt. Nehmen wir doch stattdessen das Backend-Dokument:
Code
maname = join(currdoc.document.MA_Name, |":"|)

Gruß
Marco
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 21.02.11 - 13:26:22
DANKE AN ALLE

Klappt jetzt so wie sich´s gehört  ;D

LG
Marietta
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: cebolina am 21.02.11 - 13:32:21
Diese Frage ging etwas unter:
Mir ist nicht ganz klar, wofür die | stehen?

Die Pipes | dienen der Übersichtlichkeit in der der Suchformel.
Es könnten auch { und } sein.
Z. B.:
Code
searchFormula$ = {Form = "Mitarbeiter" & M_Name = "} + maname + {"}

Schau in der Hilfe nach "Literal string construction rules".

Gruß Stefan
Titel: Re: Fehlermeldung bei ReplaceItemValue
Beitrag von: mgeidl am 22.02.11 - 08:29:03
Danke Stefan, werd ich mir mal genauer durchlesen, sobald Zeit da is.

LG
Marietta