Domino 9 und frühere Versionen > ND6: Entwicklung

Manipulation über DocID

(1/2) > >>

redspawn:
Hallo zusammen,

ich hab folgendes Szenario.

Ich hab eine Maske in der ich allgemeine Firmendaten speichere und eine zweite Maske in der dann Kontaktdaten stehen. Zu einer Firma kann es mehrere Kontakte geben. Bei den Kontakten speichere ich die DocID der Firmenmaske, damit ich später die entsprechenden Kontakte ausfindig machen kann, wenn sich z. B. die Firmenanschrift ändert. Die Firmenanschrift wird in den Kontaktdaten auch noch gespeichert.

Jetzt versuche ich mich gerade dabei einen Agenten zu schreiben, der mir die Firmendaten in der Kontaktmaske ändert sobald ich in der Firmenmaske etwas ändere. Den Agenten rufe ich im QuerySave der Firmenmaske auf!

Jetzt bin ich gerade am rätseln wie ich die entsprechende DocId an den Agenten als Parameter übergeben kann?

Hoffe ihr könnt mir da weiterhelfen...

Gruß

Axel:
Hi,

schau dir mal die Klasse NotesAgent und dort insbesondere die Methode Run an. Dort steht alles beschrieben.

Du brauchst allerdings nicht unbedingt einen Agenten.

Du kannst das auch mit einer rekursiven Funktion im QuerySave-Event machen.


--- Code: ---Sub UpdateAllResponseDocs( docToCheck As NotesDocument)

On Error Resume Next
Dim responseDocuments As NotesDocumentCollection
Dim responseDoc As NotesDocument
Dim m As Integer

  Print "Updating Response Docs for " & docToCheck.Form(0)

  Set responseDocuments = docToCheck.Responses '...get all immediate responses of this document

  If responseDocuments.Count > 0 Then
    For m = 1 To responseDocuments.Count '..could use your while loop here instead
      Set responseDoc = responseDocuments.GetNthDocument(m)

      '..update your items here

      Call responseDoc.Save (True, True)

      '...this sub gets recursively called until all response docs are updated
      Call UpdateAllResponseDocs( responseDoc )

    Next
End If

End Sub

--- Ende Code ---

Beispielaufruf:

Sub Querysave(Source As Notesuidocument, Continue As Variant)

Set curDoc = Source.Document
 
'..code to create the empItems record array has been deleted from here

  Call UpdateAllResponseDocs (curDoc)

End Sub


Axel

umi:
Da brauchst Du den Parameter nicht zu übergeben, sondern kannst die DocID des aktuellen Dokuments über die NotesUI Klassen holen.
bsp:

--- Code: ---dim uiws as new notesuiworkspace
dim uidoc as notesuidocument
dim doc as notesdocument
dim docid as string
set uidoc = uiws.currentdocument
set doc = uidoc.document
docid=doc.universalid
'so oder so ähnlich

--- Ende Code ---

redspawn:
gut ich hab das jetzt mal reingebastelt. Jetzt taucht aber das Problem auf, dass er gar keine Responses findet?!?
d. h. er ändert mir auch nix!

Woran könnte das liegen?

Die Kontaktmaske rufe ich mit folgendem Formelbefehl aus der Firmenmaske per Aktionsleiste auf:

@If(@IsDocBeingEdited=0;@Command([Compose]; "Kontakt");@Prompt([YesNo]; "Lotus Notes"; "Möchten Sie dieses neue Dokument Speichern?")=1;@Do(@Command([FileSave]);@Command([EditDocument];0);@Command([Compose]; "Kontakt"));@Return(""))

Könnte es sein, dass er so gar keine Beziehung herstellt?

Dim org As String
org = docToCheck.AdrOrganization

das hab ich mal noch eingebaut um die Daten aus der Firmenmaske auszulesen! In der Variablen steht aber auch nichts drin...

Könnte es da sein, dass ich da mit dem Klassenmodell ein wenig durcheinander komme? Kurz der Weg den ich gehe:

im QuerySave:


--- Code: ---Dim curDoc As NotesDocument
Set curDoc = Source.Document

Call UpdateAllResponseDocs (curDoc)

--- Ende Code ---

und weiter in der Sub Update...:

--- Code: ---Sub UpdateAllResponseDocs( docToCheck As NotesDocument)

On Error Resume Next
Dim responseDocuments As NotesDocumentCollection
Dim responseDoc As NotesDocument

Dim org As String
...
org = docToCheck.AdrOrganization
...
Set responseDocuments = docToCheck.Responses

--- Ende Code ---

Kann es sein, dass ich da mit Vererbung oder Beziehung ein wenig durcheinander komme? oder ist das schon der richtige Weg?

Danke schonmal an alle...!

redspawn:
so jetzt ist mir nochmal was aufgefallen...

brauch ich überhaupt den rekursiven Aufruf? Ich hab in meinem Fall an den Antwortdoks keine Anworten mehr dran hängen und in der For-Schleife geht er ja normal alle Responses durch??

Oder bin ich da auf dem Holzweg?

Gruß

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln