Domino 9 und frühere Versionen > ND6: Entwicklung
GetDocumentByKey Methode liefert erst beim zweiten "QuerySave" das gewünschte Er
koehlerbv:
Ich habe mir jetzt einige Mühe gegeben, aber Dein Code ist dermassen schwer zu lesen - ich gebe es auf.
--- Zitat von: Ranki am 23.04.08 - 22:48:11 ---Dieser Fehler tritt auch nur auf, wenn der Ansichtsname (also die Variable "doc_value_gruppe")
--- Ende Zitat ---
Wie bitte? "doc_value_gruppe" ist doch kein Ansichtsname, sondern eine Laufvariable Deiner Forall-Schleife! Und so geht es weiter beim Versuch, Deinen Code nachzuvollziehen.
Bernhard
gab:
Wenn ich es richtig entziffere, wird dem Argument str_doc_value_gruppe für die GetdocumentByKey Methode kein Wert mitgegeben.
Sollte es vielleicht sowas werden?
--- Code: ---Forall X In doc_value_gruppen
Set view_doc_ausbilder = lookup_view.GetDocumentByKey(X ,True)
If Not view_doc_ausbilder Is Nothing Then
view_value_ausbilder = view_doc_ausbilder.ausbilder(0)
If (view_value_ausbilder <> "") And (view_value_ausbilder <> doc_value_ausbilder) Then
continue = False
Messagebox "Leider kann eine Gruppe nicht zwei Ausbildern gleichzeitig zugeordnet sein ... das Dokument wurde nicht gespeichert."
End If
Else
Msgbox "no document with name " + X + " located"
End If
End Forall
--- Ende Code ---
Ranki:
Hallo zusammen,
sorry, wenn das so vermeintlich schlecht zu lesender Code ist ... ich versuche es etwas besser zu machen, aber wie im Post vorher schon angedeutet, bin ich da bisher unbedarft und für Tipps offen, wenn jmd. so ein Manual bzw. eine Vorlage hat.
Naja, hier mein Versuch:
--- Code: ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
' Checks the view "_Profile_Ausbildung_byGroups", if for one of the selected groups there
' is already a trainer assigned
'
' Declare variables
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view_Gruppenverantwortliche As NotesView
Dim doc_currentDocument As NotesDocument
Dim doc_Gruppenverantwortlicher As NotesDocument
Dim str_docfld_ausbilder As String
Dim str_viewdocfld_ausbilder As String
Dim str_gruppe As String
Dim docitem_gruppen As Variant
' Define variables
Set db = session.CurrentDatabase
Set view_Gruppenverantwortliche = db.GetView("_Profile_Ausbildung_byGroups")
Set doc_currentDocument = source.Document
' Get documentvalues
str_docfld_ausbilder = Source.FieldGetText("ausbilder")
docitem_gruppen = doc_currentDocument.GetItemValue("gruppen")
' Action
If docitem_gruppen(0) <> "" Then ' no group is assigned in the document therefore we do not need to check anything
' every group will be checked, if there is any document already existing in the view "view_Gruppenverantwortliche"
Forall arrayvalue_gruppe In docitem_gruppen
' to ensure, that we use the GetDocumentByKey Function with a string
str_gruppe = Cstr(arrayvalue_gruppe)
' Get document with name of the group currently handled
Set doc_Gruppenverantwortlicher = view_Gruppenverantwortliche.GetDocumentByKey(str_gruppe,True)
If Not doc_Gruppenverantwortlicher Is Nothing Then
' Get name of Ausbilder from found document
str_viewdocfld_ausbilder = doc_Gruppenverantwortlicher.ausbilder(0)
' If a Ausbilder is found and this name is not the same as the current profile name then cancel save and provide error message
If (str_viewdocfld_ausbilder <> "") And (str_viewdocfld_ausbilder <> str_docfld_ausbilder) Then
continue = False
Messagebox "Leider kann eine Gruppe nicht zwei Ausbildern gleichzeitig zugeordnet sein ... wurde nicht gespeichert."
End If ' End > If (str_viewdocfld_ausbilder <> "") And (str_viewdocfld_ausbilder <> str_docfld_value_ausbilder)
Else
' document couldn't be located; means either the document does not exist or the document cannot be found
' (happend during development, if only one group is assigned and the document is saved the first time)
Msgbox "no document with name " + str_gruppe + " located"
End If ' End > If Not doc_Gruppenverantwortlicher Is Nothing
End Forall ' End > Forall arrayvalue_gruppe In docitem_value_gruppen
End If ' End > If docitem_value_gruppen(0) <> ""
End Sub
--- Ende Code ---
@gab: Ich fülle die Variable an dieser Stelle, um sicher zu gehen, dass es ein String ist; hatte ich vorher auch nicht drin, aber ich bin halt schon einige Posts durch gegangen ...
--- Code: ---' to ensure, that we use the GetDocumentByKey Function with a string
str_gruppe = Cstr(arrayvalue_gruppe)
--- Ende Code ---
@Bernhard: Ja, auch hier sorry für die Verwirrung! Das ist natürlich ein Feldinhalt; also ein Wert, der in dem Feld "Gruppen" im Dokument ausgewählt sein kann.
Ich habe nun noch einen Screenshot von der View "_Profile_Ausbildung_byGroups.gif" und einen Screenshot vom Dokument "Profil_Ausbilder.gif" angehangen; vielleicht trägt das noch etwas mehr zum Verständnis bei.
Danke Euch für Eure Mühen!!!
koehlerbv:
Sascha, der Code wir dimmer leserlicher :D
Aber: Wir können den mangels der eigentlichen DB und Datenbasis nicht nachvollziehen. Um nun nicht jede einzelne Zeile analysieren zu müssen, was denn unter welchen Umständen passieren könnte: Was sagt der Debugger zu den entscheidenden Variablen / Objekten an *welcher* Stelle, an der Du meinst, es klappt nicht?
Du hast offensichtlich ein logisches Problem, aber um da mitzuhelfen bei der Auflösung, brauchen wir mehr bzw. genauere Informationen.
Bernhard
Ranki:
Ok, Ironie ist angekommen .... :-(
Der Debugger befüllt im ersten Step die Variable einfach nicht; es kommt nicht zum Fehler außer meinem Beschriebenen ... im zweiten Speichern befüllt er die Variable dann.
Ich habe das mal in ein Video komplett mit Debugger gepackt (mein letzter Versuch) :-)
Ich kann auch die Datenbank bereitstellen ... aber wenn Ihr schon nicht durch meinen Code blickt .... dann sehe ich schwarz ;-)
Schönen Gruß
Sascha
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln