Autor Thema: Script-Datenabank  (Gelesen 1896 mal)

Offline JanHoener

  • Junior Mitglied
  • **
  • Beiträge: 66
  • Geschlecht: Männlich
  • auf der Suche...
Script-Datenabank
« am: 18.04.05 - 11:33:02 »
Hallo zusammen.
Nachdem ich meine prototypische Datenbank vorgestellt hatte, meinte mein Betreuer, dass diese deutlich generischer sein sollte.

Ich habe mir überlegt, eine eigenen Scriptdatenbank zu erstellen, in der ich dann den Script laufen lasse. Dafür muss ich eine Auswahl der vorhandenen Ansichten geliefert bekommen, die in der Zieldatenbank vorhanden sind, um mir dann die richtige DB auszusuchen.

Ich habe leider keine Ahnung, wie das funzt.
Bitte um eure Hilfe.
Vielen Dank.
Gruß Jan

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Script-Datenabank
« Antwort #1 am: 18.04.05 - 11:48:39 »
Hi,

schau dir mal die Eigenschaft Views in der NotesDatabase-Klasse an. Die liefert dir alle Ansichten und Ordner, die in einer Db enthalten sind. In der Designerhilfe sind auch Beispiele enthalten.


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

Offline JanHoener

  • Junior Mitglied
  • **
  • Beiträge: 66
  • Geschlecht: Männlich
  • auf der Suche...
Re: Script-Datenabank
« Antwort #2 am: 18.04.05 - 11:51:14 »
oder noch besser: das Script über einen Toolbaricon aufrufen. Das wäre natürlich der Hammer. Dann müsste ich ach keine Auswahl von vorhanden Ansichten erstellen sonder kann direkt in der Ansicht arbeiten.
Script liegt dabei natürlich in einer eigenen DB.

Gruß Jan

Marinero Atlántico

  • Gast
Re: Script-Datenabank
« Antwort #3 am: 18.04.05 - 12:00:07 »
Code
Dim notesUIWorkspace as New NotesUiWorkspace
Set notesUIView = notesUIWorkspace.CurrentView
Set vw = notesUIView.View
... wobei ich das nicht für den Hammer halte.
Warum gehst du eigentlich über Ansichtsspalten und nicht über Felder von Dokumenten.
Die Daten werden in den Feldern gehalten. Die View ist eigentlich mehr ein Gestaltungselement, dass Daten präsentiert und nicht Daten hält.
Ich würd über alle Dokumente einer Ansicht iterieren und dann NotesItems (also Felder) vergleichen.
Die Namen der Felder kannst du in einem Konfigurationsdokument hinterlegen.
Das geht auch als externe DB die auf andere DBs zugreift. Nur musst du dann auch auf die Views verweisen.
 

Offline JanHoener

  • Junior Mitglied
  • **
  • Beiträge: 66
  • Geschlecht: Männlich
  • auf der Suche...
Re: Script-Datenabank
« Antwort #4 am: 18.04.05 - 12:07:04 »
Naja, ich vergleiche in meinem Script immer einenen Eintrag der View mit der nächsten.
Sub Doppelt(View As NotesView)
   Dim ws As New NotesUIWorkspace
   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim vec As NotesViewEntryCollection
   Dim ve, oldVe As NotesViewEntry
   Dim newDoc As NotesDocument
   Dim oldDoc As NotesDocument
   
   Set db = s.CurrentDatabase
   Set vec= view.AllEntries
   
   'Ersten Eintrag im View holen
   Set ve = vec.GetFirstEntry()
   
   While Not ve Is Nothing
      
      'Wert der ersten Spalte holen
      oldValue = ve.ColumnValues(0)
      oldValue1 = ve.ColumnValues(1)
      oldValue2 = ve.ColumnValues(2)
      oldValue3 = ve.ColumnValues(3)
      oldValue4 = ve.ColumnValues(4)
      oldValue5 = ve.ColumnValues(5)
      oldValue6 = ve.ColumnValues(6)
      oldValue7 = ve.ColumnValues(7)
      oldValue8 = ve.ColumnValues(8)
      
      'Nächsten eintrag im View holen
      Set ve = vec.GetNextEntry(ve)
      'Wenn es einen nächsten Eintrag gibt
      If Not ve Is Nothing Then
         newValue = ve.ColumnValues(0)
         newValue1 = ve.ColumnValues(1)
         newValue2 = ve.ColumnValues(2)
         newValue3 = ve.ColumnValues(3)
         newValue4 = ve.ColumnValues(4)
         newValue5 = ve.ColumnValues(5)
         newValue6 = ve.ColumnValues(6)
         newValue7 = ve.ColumnValues(7)
         newValue8 = ve.ColumnValues(8)
         
         If newValue = oldValue And newValue1 = oldValue1 And newValue2 = oldValue2 And newValue3 = oldValue3 And newValue4 = oldValue4 And newValue5 = oldValue5 And newValue6 = oldValue6 And newValue7 = oldValue7 Then
            Set oldDoc = vec.GetPrevEntry(ve).Document
            Set newDoc = ve.Document
            
            Dim tmpDoc As New NotesDocument(db)
            Dim item As New NotesItem(tmpDoc,"DUIDS","")
            Call item.AppendToTextList(oldDoc.UniversalID)
            Call item.AppendToTextList(newDoc.UniversalID)
            flag =  ws.DialogBox("dialoge_compareTwoDocs_doppelt_besser",True,True,False,False,False,False,"doppelte Daten",tmpDoc,True,False,True)
            
            If flag Then
               If Isempty(tmpDoc.Vorname) Then newDoc.Vorname=tmpDoc.Vorname Else newDoc.Vorname=tmpDoc.Vorname_1
               If Isempty(tmpDoc.f1) Then newDoc.Strasse=tmpDoc.f1 Else newDoc.Strasse=tmpDoc.f1_1
               If Isempty(tmpDoc.PLZ) Then newDoc.PLZ=tmpDoc.PLZ Else newDoc.PLZ=tmpDoc.PLZ_1
               If Isempty(tmpDoc.Ort) Then newDoc.Ort=tmpDoc.Ort Else newDoc.Ort=tmpDoc.Ort_1
               If Isempty(tmpDoc.Telefon) Then newDoc.Telefon=tmpDoc.Telefon Else newDoc.Telefon=tmpDoc.Telefon_1
               If Isempty(tmpDoc.Handy) Then newDoc.Handy=tmpDoc.Handy Else newDoc.Handy=tmpDoc.Handy_1
               If Isempty(tmpDoc.WWW) Then newDoc.WWW=tmpDoc.WWW Else newDoc.WWW=tmpDoc.WWW_1
               If Isempty(tmpDoc.Geburtstag) Then newDoc.Geburtstag=tmpDoc.Geburtstag Else newDoc.Geburtstag=tmpDoc.Geburtstag_1
               Call newDoc.Save(True,True)
               
               Call oldDoc.Remove(True)
            End If
            
            
         End If
         
      End If
      
   Wend
   
   Call ws.ViewRefresh
End Sub

Falls das hilft. Ansonsten sorry.

Marinero Atlántico

  • Gast
Re: Script-Datenabank
« Antwort #5 am: 18.04.05 - 12:19:34 »
Abgesehen davon, dass genau diese Stelle JEDEN Scriptcoder mit einem Mindestmaß an Selbstrespekt aggressiv werden lässt:
Code
oldValue1 = ve.ColumnValues(1)
      oldValue2 = ve.ColumnValues(2)
      oldValue3 = ve.ColumnValues(3)
      oldValue4 = ve.ColumnValues(4)
      oldValue5 = ve.ColumnValues(5)
      oldValue6 = ve.ColumnValues(6)
      oldValue7 = ve.ColumnValues(7)
      oldValue8 = ve.ColumnValues(Cool

Woher bist du eigentlich so sicher, dass ähnliche Dokumente genau untereinander in einer Ansicht sortiert werden?
Bsp. alphabetisch sortiert.
Müler, Heiner (Schreibfehler)
Mülheim-Kärlich, Hannelore
Müller, Heiner

Marinero Atlántico

  • Gast
Re: Script-Datenabank
« Antwort #6 am: 18.04.05 - 14:19:15 »
wie wärs mit der Richtung für den Vergleich
Code
Dim i as Integer
veNext = vec.GetNextEntry(ve)

i = 0
forall veEntry in ve.columnValues
if veEntry = veNext.columnValues(i) then 
doStuff
end if
i = i + 1
end forall
ve = vec.getNextEntry (veNext)
So erzielst du eine lose Kopplung zu der Anzahl der Spalten in der Ansicht.

Im weiteren Verlauf des Skripts verwendest du konkrete Feldnamen.
Code
pIf Isempty(tmpDoc.Vorname) Then newDoc.Vorname=tmpDoc.Vorname Else newDoc.Vorname=tmpDoc.Vorname_1
               If Isempty(tmpDoc.f1) Then newDoc.Strasse=tmpDoc.f1 Else newDoc.Strasse=tmpDoc.f1_1
               If Isempty(tmpDoc.PLZ) Then newDoc.PLZ=tmpDoc.PLZ Else newDoc.PLZ=tmpDoc.PLZ_1
               If Isempty(tmpDoc.Ort) Then newDoc.Ort=tmpDoc.Ort Else newDoc.Ort=tmpDoc.Ort_1
               If Isempty(tmpDoc.Telefon) Then newDoc.Telefon=tmpDoc.Telefon Else newDoc.Telefon=tmpDoc.Telefon_1
               If Isempty(tmpDoc.Handy) Then newDoc.Handy=tmpDoc.Handy Else newDoc.Handy=tmpDoc.Handy_1
               If Isempty(tmpDoc.WWW) Then newDoc.WWW=tmpDoc.WWW Else newDoc.WWW=tmpDoc.WWW_1
               If Isempty(tmpDoc.Geburtstag) Then newDoc.Geburtstag=tmpDoc.Geburtstag Else newDoc.Geburtstag=tmpDoc.Geburtstag_1
Das geht natürlich nicht, wenn du generisch sein willst. Dann darf es nämlich keine Abhängigkeiten von Feldbezeichnern geben.

Offline JanHoener

  • Junior Mitglied
  • **
  • Beiträge: 66
  • Geschlecht: Männlich
  • auf der Suche...
Re: Script-Datenabank
« Antwort #7 am: 19.04.05 - 01:27:07 »
ja, das ist schonmal der erste schritt.
mir geht es aber erstmal darum, das script in eine andere db zu "verfrachten".
entweder dann das script direkt in dieser db aufrufen oder noch ne aktion in die zu bearbeitende view in der zieldatenbank einbauen, und aus der das script in der script-db aufrufen.
was ist sinnvoller bzw. machbar bzw. leichter?

gruß jan

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz