Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: nyen am 05.06.06 - 21:03:31

Titel: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 05.06.06 - 21:03:31
Hallo zusammen,

Bitte Hilfe, ich komme mit meinem Agent nicht weiter, der die PDF-Dateien in die Datenbank importiert und aktualsieren soll. Der Importvorgang funktioniert soweit gut, allerdings können die Berechtingungen auf die Dokumente nicht gesetzt werden, da die Dokumente jedes Mal gelöscht werden.

Mein Problem: Wie kann ich meinen Agenten beibringen, dass er die  Anhänge nur aktualisiert (ohne Dokumente zu löschen).

Kann mir da jemand helfen? 

Wäre Super.

Grüße
Nyen

Hier ist mein Code:

Dim s As New NotesSession
Dim db As notesdatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Dim fileName As String
Dim rtitem As NotesRichTextItem
Dim collection As NotesDocumentCollection
Dim searchFormula As String
Set db=s.CurrentDataBase
Set view = db.GetView("Alle Dokumente")
Set vc = view.AllEntries
   
   
pathName$="D:\Test\"
If pathName$  = "" Then
   Msgbox"Pfad oder Dateien nicht vorhanden"
      
End If
   
filename$ =Dir$(pathName$+"*.pdf",0)
   Do While fileName$<>""
   A = filename$ + "#" + typ$
   searchFormula = |Dateiname = "| + A  +|"|
   Set collection = db.Search(searchFormula$, Nothing,0)
   Call collection.RemoveAll(True)
   ' RemoveAttachments = True
   fileName$=Dir$()
Loop      'Messagebox("ende erste Schleife")   
      
   filename$ =Dir$(pathName$+"*.pdf",0)
      
Do While fileName$<>""
   Set doc =db.CreateDocument
   Print fileName$
   doc.Form="Main Topic"
   Set rtitem =New NotesRichTextItem(doc, "Body")
   Set notesembeddedobject = rtitem.EmbedObject(EMBED_ATTACHMENT,"",pathName$+fileName$)

      Call doc.ComputeWithForm(False, False)
      Call doc.Save(True, True)
      fileName$=Dir$()
Loop   

Call doc.ComputeWithForm(False, False)
Call doc.Save(True, True)
fileName$=Dir$()   
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: koehlerbv am 05.06.06 - 22:48:07
Das Verfahren finde ich etwas "schräg". Warum löschst Du denn überhaupt die Dokumente, anstatt aus den gefundenen Dokumenten nur die Attachments, um sie dann erneut anzuhängen? Mit NotesEmbeddedObject.Remove ist das doch kein Problem.
Auch das Problem mit den "nicht zu setzenden Berechtigungen" erschliesst sich aus Deinem Posting nicht wirklich.

Sag' mal genaueres zu Deinem Problem.

Bernhard
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 06.06.06 - 09:02:33
Hallo,

joo, das ist eben mein Problem, nämlich die gefundenen Dokumente nur die Attachments erneut anzuhängen. Ich habe es bisjetzt nicht hinbekommen.

Mit NotesEmbeddedObject.Remove kann ich die Anhänge wahrschienlich löschen, ich möchte aber die gefundene Dokumente dann erneut anhängen.

Wie geht es weiter?

Danke

Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 07.06.06 - 10:54:11
Hallo,

Es klappt einfach nicht. Mit folgendem Code werden die Anhänge gelöscht, jedoch nicht die gefundene nicht erneut angehängt.

Wo liegt der Feher ?

Kann jemand mir bitte helfen, es ist drigend !!!!

Danke

Nyen

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim strFilename As String
   Const strPath = "D:\Temp\"
   Set db = session.CurrentDatabase
   Set collection = db.AllDocuments
   Set doc = collection.GetFirstDocument()
   While Not(doc Is Nothing) 
      If doc.HasEmbedded Then
         Call detachFiles( doc )
      End If
      Set doc = collection.GetNextDocument(doc)
   Wend
End Sub

Sub detachFiles( doc As NotesDocument )
   Dim rtitem As Variant
   Set rtitem = doc.GetFirstItem( "Body" )
   Forall o In rtitem.EmbeddedObjects
      If o.Type = EMBED_ATTACHMENT Then 
         strFilename = strPath & o.Source
         'Call o.ExtractFile(strFilename & o.Source )
         Call o.Remove
         Call doc.Save( True, True )   
      End If
   End Forall
   'Anhängen der Datei
   Set rtitem = doc.GetFirstItem( "Body" )
   Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", strFilename)
End Sub
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Untitled am 07.06.06 - 10:59:42
So auf die Schnelle: Zuunterst im Sub "detachFiles" müsste nochmal ein "doc.Save" hin.
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 07.06.06 - 13:00:53
Hat es leider nichts gebracht !
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 07.06.06 - 13:43:59
In deiner Routine detachFiles fehlt mir so einiges, vor allem an Deklarationen.

Versuch das Ganze mal so:

Sub detachFiles( doc As NotesDocument )

Dim rtitem As NotesRichtextItem
Dim object As NotesEmbeddedObject
Dim strFilename As String

Const strPath = "D:\Temp\"


 
  Set rtitem = doc.GetFirstItem( "Body" )
   Forall o In rtitem.EmbeddedObjects
      If o.Type = EMBED_ATTACHMENT Then 
         strFilename = strPath & o.Source
         'Call o.ExtractFile(strFilename & o.Source )
         Call o.Remove
      End If
   End Forall
   'Anhängen der Datei
   Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", strFilename)
         Call doc.Save( True, True )   

End Sub


Noch ein Tipp am Rande: Trage überall, wo du Script verwendest in den (Options) - Abschnitt Option Declare ein. Dann kann dir das mit den vergessenen Deklaration zumindest nicht mehr passieren.

Axel
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 07.06.06 - 15:04:29
Danke Axel,

jetzt funktioniert es soweit, allerdings sollen neue Dokumente (Anhänge) auch erstellt werden. Wie kann man am Einfachsten hinkriegen, wenn neue dazu kommen.

Für einen schnellen Tip wäre super.

Gruß
Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 07.06.06 - 15:48:26
Was heisst wenn neue dazukommen?



Weitere Dokumente kannst du mit

     Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", strFilename)

anhängen


Axel

Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 07.06.06 - 16:17:20
Mit diesem Code werden nur in Dokumenten gefundene Anhänge aktualisiert (Anhänge erstetzt).  Da neue Dateien in Pfad C:\Temp  hinzukommen, können noch nicht importiert´werden. 

Er soll neue Dokumente erstellen, wenn er z. B.im Pfad C:\Temp neue Dateien findet, die in der NotesDB noch nicht existieren.

Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 07.06.06 - 19:50:48
Heisst das, dass alles was in c:\temp an Dateien vorhanden ist in die DB aufgenommen werden muss, oder nur bestimmte?

Wenn alle, dann kannst du mit dem Dir-Befehl durch das Verzeichnis loopen und für jede Datei ein neues Dokument anlegen und die Datei anhängen.

In der Desinger-Hilfe findest du die entsprechenden Infos.

Axel
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: koehlerbv am 07.06.06 - 20:10:18
Ich hatte ja schon mal erwähnt: Das bisherige Verfahren ist "schräg". Und wir können hier für Dich und Deine Firma nicht die Architektur und das Handwerk für eine Applikation bieten.
Tip: Das db.Search ist in diese mFall kontraproduktiv. Arbeite mit einer entsprechenden View und einem NotesView.GetDocumentByKey. Wird das Dokument an Hand des PDF-Filenames gefunden: Attachment entfernen und neu anhängen (wie bisher). Wenn nicht, dann neues Dokument erstellen und das betreffende Attachment anhängen.

Mehr mag ich nicht mehr dazu sagen.

Bernhard
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: umi am 08.06.06 - 13:13:29
Um auf dein 1. Posting mal einzugehen: Warum setzt Du die Berechtigungen nicht von via Agent?
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 08.06.06 - 16:56:40
Wenn ich wüßte wie, dann würde ich mir diesen Aufwand sparen.

Also, ich kenne bisjetzt keinen Agenten, der die Berechtigungen täglich aktualisiert. Hast du einen Lösungsansatz? Wäre natürleich eine Alternative!

Gruß
Nyen

Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: umi am 09.06.06 - 09:15:59
Ich nehme jetzt einfach mal an, dass die Berechtigungen auf Leser/Autorenfelder basiert. Diese kannst Du ja via Script abfüllen/erstellen (auf richtigen Typ achten) z.B. mit
set lesefeld = new Item(notesdoc,"Lesefeld","Leser/TEST",READERS)
oder mit
set autorenfeld = new Item(notesdoc,"Autorenfeld","Autor/Test",AUTHORS)

Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 09.06.06 - 11:18:30
Das klingt gut, aber um dies zu realisieren müßte ich zuerst für jeden Wert meines Schlüsselfeldes eine Role definieren, um Dokumente zu beschränken, wie z. B. @If Feld= Wert; meine Role, bzw. eine Role zu meheren Werte zuweisen, oder?

Dann müße ich über 100 Rolen definieren, ich weß nicht, ob das geht?


Gruß
Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: koehlerbv am 09.06.06 - 11:35:36
Ich verstehe jetzt Bahnhof ... Wie werden denn bisher Berechtigungen vergeben? Und warum sollte das nun auf einmal anders werden?

Bernhard
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 09.06.06 - 11:38:05
Dann müße ich über 100 Rolen definieren, ich weß nicht, ob das geht?

Das geht nicht. Es sind max. 75 Rollen in der ACL möglich.


Axel
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 09.06.06 - 13:44:45
Ich glaube, dass Bernhard die Problematik noch nicht verstanden hat. Bisher konnten die Berechtigungen nicht auf Dokumentenebene vergeben werden, sondern nur in der ACL Lesen. Da die Dokumente täglich aktualisert und neu angelegt werden, habe ich hier ein Problem mit Berechtigung für bestimmte Dokumente zu vergeben.

Ich werde doch mit einer View und einem NotesView.GetDocumentByKeyNyen versuchen.


Nyen

Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: koehlerbv am 09.06.06 - 14:07:00
Nein, ich habe das noch immer nicht verstanden, da Du über Dein Berechtigungskonzept keine Aussage getroffen hast (oder ich habe es überlesen).

Ob Dukumente aktualisiert oder neu angelegt werden, hat doch mit dem Berechtigungskonzept nichts zu tun oder mit NotesView.GetDocumentByKey.
Und wenn Du bisher schon ein Berechtigungskonzept hattest, kann dass doch auch in die neuen Routinen einfliessen.
Ich verstehe es also immer noch nicht.

Bernhard
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 09.06.06 - 15:00:46
Also, wenn Dukumente aktualisiert oder neu angelegt werden, hat wohl mit Berechtigungskonzept zutun. Genau liegt hier das Problem, weil eben die Berechtigungen mit Dokumente gelöscht werden.

Daher suche einen Lösungsansatz, um die Berechtigungen auf Dokumenteneben zu vergeben. Warum ist das schwer zu verstehen?


Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: koehlerbv am 09.06.06 - 15:22:45
Daher suche einen Lösungsansatz, um die Berechtigungen auf Dokumenteneben zu vergeben. Warum ist das schwer zu verstehen?

Weil Du uns nicht erklärst, wie Dein Berechtigungskonzept überhaupt aussieht. Das Technische wurde Dir bereits gesagt. Jetzt kommst Du mit 100 Rollen. Wie sollten wir dazu etwas sagen können? Ausserdem ist das eigentlich ein gänzlich eigenes Thema.

Bernhard
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 09.06.06 - 15:34:56
Also so langsam verstehe ich aber auch nur noch Bahnhof.

Du redest hier dauernd von einem Berechtigungskonzept. Dann erklär uns doch mal dein Konzept.

Ich fasse mal zusammen, so wie ich es verstehe:

Du hast eine Datenbank mit x Dokumenten. In diesen Dokumenten gibt es pdf-Anhänge. Diese werden/sollen von Zeit zu Zeit aktualisiert werden und dieses soll automatisiert passieren.
Da die Dokumente nur von bestimmten Personen gelesen/editiert werden dürfen, gibt es wahrscheinlich Leser- und Autorenfelder. In diesen Feldern stehen die einzelnen Personen drin.

Liege ich soweit richtig?


Axel
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 09.06.06 - 15:52:54
Ja, aber die Dokumente sollen von bestimmten Personen nur gelesen gelesen werden. Da bisjetzt alle Personen lesen dürften, sind noch nicht Leser- und Autorenfelder vorhanden.

Es sind ca. 200 Personen, die verschieden Dokumente lesen sollten.


Nyen
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Axel am 09.06.06 - 15:59:53
Und wie sieht nun dein Berechtigungskonzept aus? Das hast du immer noch nicht eindeutig dargelegt.

Du willst mir/uns doch nicht weissmachen, dass du die User einzeln in die noch zu erstellenden Leserfeld einfügen willst. Oder doch? Aber dann viel spaß bei der Pflege.

Und was das Dokumentenaktualisieren angeht, kannst du doch z.B. den Agenten mit einer ID signieren, der die entsprechenden Rechte auf alle Dokumente hat.


Axel
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: Tode am 12.06.06 - 11:34:10
nur mal nebenbei bemerkt:

Von der eigentliche Geschichte sind wir inzwischen Meilenweit entfernt.

An den Fragesteller: Bitte splitte das ganze doch mal in 2 Threads.

Punkt 1:
Wie aktualisiere ich Attachments, OHNE dabei das ganze Dokument zu löschen
Ist dieser Punkt erledigt, dann ist Punkt 2 in meinen Augen schon fast obsolet.

Falls nicht, dann mach noch einen weiteren Thread auf:
Punkt 2:
Ich möchte dieses / jenes Berechtigungskonzept implementieren (automatisieren !?):
Hier habe ich dieses / jenes KONKRETE Problem....

Und jetzt würde ich sagen: macht diesen Thread zu und lasst uns in den Themenbezogenen NEUEN Threads weitermachen: So führt das ganze hier nirgends hin...

Tode
Titel: Re: Hilfe für Anänge aktualisieren
Beitrag von: nyen am 12.06.06 - 12:09:29
OK, in Ordnung.
 
Die Frage jetzt , wie kann ich die Berechtigungen mit Hilfe eines Agenten automatisieren, am Besten mit Hilfe einer Tabelle, aus der der Agent die Berechtigungenkriterien (welcher Benutzer auf welches Dokuemnet zugreifen soll) ausliest. Damit könnte ich evtl. mein Problem lösen.

Hier noch mal mein Konzept (kurzgefaßt):

               Finde das Dokument auf dem File Server
   Finde den Schlüssel des Dokumentes
   Suche in der Datenbank nach dem einduetigem Feld
    Wenn das Feld existiert,
                 ersetze Anhang (dann hätte ich statische Dokumenet)
    Entferne die Löschmarkierung
   Wenn das Feld unbekannt ist, erstelle neues Dokument
              Speichere Wert im Feld
              Erstelle Anhang
              Generiere Leserfelder (Berechtigungen für neue Dokumente automatisieren)
                      Für Administrator
                      Für "Rolle"
                      Speichere das Dokument

   Lösche alle zum Löschen markierten Dokumente



Nyen