Autor Thema: verschiedene Dokumente vergleichen  (Gelesen 7462 mal)

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
verschiedene Dokumente vergleichen
« am: 17.09.03 - 10:24:55 »
Hallo,

ich möchte über einen Button Dokumente aktuallisieren. Dabei sollen mehere Dokumente durchsucht werden. Stimmen nun zwei bestimmte Felder in den beiden Dokumenten überein, sollen in einem Dokument ein Feld gesetzt werden.
Wie kann man am besten Anfangen?

Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #1 am: 17.09.03 - 10:36:54 »
Hi,

wählst du die beiden Dokumente in der View aus ?

In dem Fall müßtest du die gewählten Dokumente nehmen, dir aus den beiden Dokumenten die gewünschten Itemwerte auslesen und vergleichen.
Allerdings bin ich mir nicht sicher, ob das mit RTF funktioniert, mit normalen Text-,Datums- und Zahlenfeldern aber kein Problem.

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #2 am: 17.09.03 - 11:14:42 »
Könnte das in etwa so beginnen?

Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set view = db.GetView("Ansicht")
   Set view = db.GetView("Ansicht2")
   Set doc = view.GetAllDocument
   Item 1= doc.getFirstItem("name1")
   Item 2 = doc.getFirstItem("name2")

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:verschiedene Dokumente vergleichen
« Antwort #3 am: 17.09.03 - 11:37:27 »
Hi,

nicht ganz. Ich würde das so lösen. Mach dir zuerst eine Ansicht, die nach dem Feld das du vergleichen willst, sortiert ist.


Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set view = db.GetView("Ansicht")
Set collection = view.GetAllDocumentByKey("VergleichsWert", true)

Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
  'Tu was
Wend

Versuch's mal. Ich hab'auf die Schnelle nicht getestet.

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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:verschiedene Dokumente vergleichen
« Antwort #4 am: 17.09.03 - 11:38:22 »


Welches Dokument aus View1 willst Du mit
welchem Dokument aus View 2 vergleichen ?

Immer das erste mit dem ersten
oder willst Du jedes mit jedem Dokument vergleichen ?

Dann hilft ja nur die Schleife in der Schleife, oder ?

Ciao
Don Pasquale

Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #5 am: 17.09.03 - 11:42:33 »
Liest du die Dokumente aus zwei verschiedenen Views aus ?

Mir ist noch nicht ganz klar, was genau du vorhast. Kannst du das evtl. noch etwas genauer beschreiben ?

Wieviele Dokumente sollen verglichen werden ? Wie werden sie gewählt (manuell, erste in der View, etc.) ? etc. pp.


Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #6 am: 17.09.03 - 12:25:02 »
Ich wollte die Dokumente aus zwei verschiedenen Views auslesen.

Aber man kann ja auch aus den beiden Ansichten eine Ansicht machen, sortiert nach den Feldern die man vergleichen will, oder?

Ich möchte jedes Dokument mit jedem vergleichen.

z.B. ist in einem Dokument  (aus View 1) das Feld x1 gleich dem Feld x2 in irgendeinem Dokument (aus View 2), dann soll in dem Dokument (aus View 1) ein Feld auf "ja" gesetzt werden.

Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #7 am: 17.09.03 - 13:20:22 »
Dann müßtest du in einer Schleife durch alle Docs aus View 1 cyceln und innerhalb dieser Schleife eine zweite Schleife laufen lassen, in der du jeweils die Dokumente aus View 2 mit dem aktuellen aus View 1 vergleichst.

Also von der Logik her so :

While Not (doc1 is Nothing)
   tmp1 = doc.GetItemValue("Feld")
   While Not (doc2 is Nothing)
      tmp2 = doc2.GetItemValue("Feld2")
      If (tmp1(0) = tmp2(0)) Then
         doc1.Feld = "ja"
      End If
      Set doc2 = view2.GetNextDocument(doc2)
   Wend
   Set doc1 = view1.GetNextDocument(doc1)
Wend

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #8 am: 17.09.03 - 14:57:07 »
hab mir die Formel jetzt so zusammengestellt:
Aber er findet nicht in den Feldern name1 und name2.
Woran könnte das noch liegen?

Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view1 As NotesView
   Dim view2 As NotesView
   Dim doc1 As NotesDocument
   Dim doc2 As NotesDocument
   Set db = session.CurrentDatabase
   Set view1 = db.GetView("Mitarbeiter Status")
   Set view2 = db.GetView("(teilnehliste)")
   Set doc1 = view1.GetFirstDocument
   Set doc2 = view2.GetFirstDocument
   While Not (doc1 Is Nothing)
   tmp1 = doc1.GetItemValue("name1")
   While Not (doc2 Is Nothing)
   tmp2 = doc2.GetItemValue("name2")
   If (tmp1(0) = tmp2(0)) Then
   doc1.besucht1 = "ja"
   End If
   Set doc2 = view2.GetNextDocument(doc2)
   Wend
   Set doc1 = view1.GetNextDocument(doc1)
   Wend


Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #9 am: 17.09.03 - 15:01:11 »
Definier tmp1 und tmp2 mal als Variant (Dim tmp1,tmp2 As Variant).

Ansonsten : Was siehst du denn im Debugger ? Werden die einzelnen Objekte korrekt zugewiesen, gibt es alle definierten Variablen ? Was steht dort in tmp1 bzw. tmp2 drin ?

Ach ja, da fehlt noch nen Save, wenn du den Wert auf "ja" gesetzt hast
« Letzte Änderung: 17.09.03 - 15:02:29 von Driri »

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #10 am: 17.09.03 - 15:29:51 »
Sorry war mein Fehler hab ein Feld falsch angebegen.

Aber die Suche nah einem gleichen Dokument funktioniert noch nicht ganz.

Er nimmt ja ein Dokument aus dem View1 und vergleicht dieses mit allen Dokumenten in View2. Hat er alle Doks von Ansicht 2 durch nimmt er sich ein neues Doku. von Ansicht1. Dieses vergleicht er aber dann nicht mehr mit allen Doku. von Anicht 2.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #11 am: 17.09.03 - 15:41:37 »
Einfacher wäre m.E. folgendes Vorgehen:
- Es wird nur eine Ansicht hergenommen
- Diese ist nach Feld 2 sortiert
- Dok für Dok wird durch diese Ansicht gegangen und
- dabei mit dem Wert von Feld 1 mit GetAllDocumentsByKey eine Collection gebildet
- Ist Collection.Count > 0, gibt es was zu tun:
- Durch die Collection loopen und Feld x mit "Ja" belegen.

Das dürfte auch das schnellste Verfahren sein.

HTH,
Bernhard

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #12 am: 17.09.03 - 16:49:04 »
Aber Feld 1 kann doch auch mehere Werte haben. Es gibt auch mehere Dokumente mit dem Feld 1.

Bei GetAllDocumentsByKey muß ich doch einen exakten Namen angeben nach dem gesucht wird
« Letzte Änderung: 17.09.03 - 16:49:33 von chock »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #13 am: 17.09.03 - 17:01:13 »
Und warum hast Du das nicht gleich gesagt ?
Ich glaube, Du beschreibst jetzt hier erstmal wirklich *ganz genau*, was die Aufgabenstellung ist.
Dann überlegen wir alle zusammen, was der beste Algorithmus dafür ist und Du entscheidest dann, ob Dein Know-How für die Umsetzung ausreicht oder ob Du weitergehende Hilfe brauchst.

Bernhard

Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #14 am: 17.09.03 - 17:14:19 »
Du mußt nach der 2. While-Schleife doc2 nochmal auf das erste Dokument in der View setzen.

While Not (doc1 Is Nothing)
   tmp1 = doc1.GetItemValue("name1")
   While Not (doc2 Is Nothing)
      tmp2 = doc2.GetItemValue("name2")
      If (tmp1(0) = tmp2(0)) Then
         doc1.besucht1 = "ja"
         Call doc1.Save
      End If
      Set doc2 = view2.GetNextDocument(doc2)
   Wend
   Set doc1 = view1.GetNextDocument(doc1)
   Set doc2 = view2.GetFirstDocument
Wend

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #15 am: 17.09.03 - 17:25:48 »
Und warum hast Du das nicht gleich gesagt ?
Ich glaube, Du beschreibst jetzt hier erstmal wirklich *ganz genau*, was die Aufgabenstellung ist.
Dann überlegen wir alle zusammen, was der beste Algorithmus dafür ist und Du entscheidest dann, ob Dein Know-How für die Umsetzung ausreicht oder ob Du weitergehende Hilfe brauchst.

Bernhard

Ok, meine Aufgabenstellung ist folgende:

-In der Ansicht A sind Statistikdokumente einzelner Personen(jede Person ein Dokument)

-In der Ansicht B sind Teilnehmerlisten einzelner Schulungen. In diesen Listen sind max. zwölf Felder die Namen von Personen enthalten(jedes Feld nur einen Namen). Hinter jedem Namenfeld sind Optionsschaltflächen(teilgenommen oder nicht)

-Jetzt soll über ein Button in Ansicht A alle Statistikdokumente aktuallisiert werden. d.h. die Statistikdokumente müssen mit den Teilnehmerlisten verglichen werden. Taucht nun der Name irgendeiner Person in irgendeiner Teilnehmerliste auf, so soll im Statistikdokument der Person das Feld "teilgenommen" auf "ja" oder "nein" gesetzt werden.

Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #16 am: 17.09.03 - 17:39:33 »
Ich gehe mal von einer maximalen, fest definierten Anzahl von Schulungen aus, oder wie soll ich die Statistikdsokumente verstehen ?

Ein Problem sehe ich in den Teilnehmerlisten. Wenn du da durch alle Felder durchwillst ist das ein ziemlicher Aufwand.
Wie wäre es denn, wenn du zuerst mal in den Teilnehmerlisten ein Listenfeld einbaust (von mir aus versteckt), das mit allen Teilnehmern gefüllt wird, die teilgenommen haben.
Dann mußt du prüfen, ob der Name aus dem Statistikdokument in dem Listenfeld der Teilnehmerliste auftaucht.

Allerdings hängt das Verfahren sehr vom Aufbau der Statistikdokumente ab. Gibt es da nur ein Ja/Nein-Feld oder gibt es für jede Schulung eins ?

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #17 am: 18.09.03 - 09:21:49 »
Hi,

es gibt eine fest definierte Anzahl von Schulungen. Die Felder für die Schulungen werden in den Statistikdokumenten automatisch gefüllt. Es gibt für jede Schulung ein ja/nein Feld.

In die Teilnehmerliste habe ich zwei versteckte Felder eingebaut.Einmal mit den Namen der teilgenommenen Personen und im anderen Feld die Namen der nicht teilgenommenen.


Driri

  • Gast
Re:verschiedene Dokumente vergleichen
« Antwort #18 am: 18.09.03 - 09:45:16 »
Hi,

ich hab das richtig verstanden :

- Statistikdok ist je Person vorhanden, für jede Schulung ein Feld mit Titel der Schulung und ein Feld Ja/Nein

- Teilnehmerdok ist je Schulung vorhanden, jeweils ein Listenfeld mit teilgenommen und nicht teilgenommenen Personen ?

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:verschiedene Dokumente vergleichen
« Antwort #19 am: 18.09.03 - 09:55:07 »
ganz genau so sieht es aus.
 Anstatt Listenfelder in den Teilnehmerlisten, hab ich normale Text Felder genommen.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz