Autor Thema: Manipulation über DocID  (Gelesen 1524 mal)

Offline redspawn

  • Junior Mitglied
  • **
  • Beiträge: 76
Manipulation über DocID
« am: 23.05.05 - 16:15:07 »
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ß
« Letzte Änderung: 25.05.05 - 08:34:04 von redspawn »
Gruß Peter

ahnungslos und völlig talentfrei...

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Manipulation über DocID
« Antwort #1 am: 23.05.05 - 16:28:35 »
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

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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Manipulation über DocID
« Antwort #2 am: 24.05.05 - 08:05:45 »
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
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline redspawn

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Manipulation über DocID
« Antwort #3 am: 24.05.05 - 13:39:05 »
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)

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

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...!
« Letzte Änderung: 24.05.05 - 15:17:42 von redspawn »
Gruß Peter

ahnungslos und völlig talentfrei...

Offline redspawn

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Manipulation über DocID
« Antwort #4 am: 24.05.05 - 15:40:00 »
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ß
Gruß Peter

ahnungslos und völlig talentfrei...

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Manipulation über DocID
« Antwort #5 am: 24.05.05 - 19:42:41 »
Hi,

was ist den bei der Kontaktmaske für ein Typ eingestellt, Dokument oder Antwort?

Dim org As String
org = docToCheck.AdrOrganization

So kannst du auch keinen Feldwert auslesen.
Damit funtioniert das Auslesen

Dim org As String
org = docToCheck.AdrOrganization(0)

Wenn du keine Antworten auf die Antwortdokumente hast, brauchst du auch keine Rekursion. Aber sie stört auch nicht. Im Hinblick auf eine universelle Verwendbarkeit von Funktionen würde ich das auch so lassen. So kannst du die Funktionen problemlos in andere DBs übernehmen und brauchst nur den Teil anpassen, der für das Aktualisieren der Felder zuständig ist.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline redspawn

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Manipulation über DocID
« Antwort #6 am: 25.05.05 - 08:33:28 »
@Axel: Vielen Vielen Dank!!!

jetzt funzt es. Umgestellt auf Antwort und die (0) angefügt und das ganze geht!!! DANKE nochmal!

Gruß
Gruß Peter

ahnungslos und völlig talentfrei...

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz