Autor Thema: Hilfe bei script  (Gelesen 2863 mal)

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Hilfe bei script
« am: 23.06.03 - 19:12:38 »
hier mein ls-script, das über einen agent laufen sollte, attachment von der derzeitigen db aus einer ansicht heraus lösen und dann in eine andere datenbank übertragen, leider kommt der fehler "variant does not contain an object"

hier das script:


Dim s As New NotesSession  
   Dim SourceDB As NotesDatabase
   Dim TargetDB As NotesDatabase
   Dim dc As NotesDocumentcollection   
   Set TargetDB = s.CurrentDatabase
   Set SourceDB = s.GetDatabase("" , "blablablabla.nsf")
   Set view = SourceDB.GetView( "Memo" )
   
   Dim TargetDoc As NotesDocument
   Dim SourceDoc As NotesDocument
   'Set SourceDoc = view.GetFirstDocument()
   
   Dim object As NotesEmbeddedObject
   Dim ItemType As Integer
   
   Do While Not (SourceDoc Is Nothing)
      
          ' Copy fields from Source Doc to Target Doc
      Set TargetDoc = New NotesDocument( TargetDB )
      TargetDoc.form = "New Document"
      TargetDoc.Category = SourceDoc.heading
      TargetDoc.SubCat = SourceDoc.Category
      TargetDoc.docTitle = SourceDoc.DocHeading
      
          ' Check for attachment(s) in document
      Dim AttachmentName As String
      Dim newObject As NotesEmbeddedObject
      Dim rtitem As NotesRichTextItem
      
          ' Save Attachment from Source Document to Disk
          ' and then attach file from disk to Target Document
      
      Set item = SourceDoc.GetFirstItem("$File")
      If Not (item Is Nothing) Then
         ItemType = item.Type
         
         If ItemType = 1084 Then           ' Item Type is
'ATTACHMENT (not absolutely sure because Notes help does not state the
            'integer values of item Types !)
            
            AttachmentName = item.Values(0)
            Set object = Sourcedoc.GetAttachment(AttachmentName )
            Call object.ExtractFile ( "c:\temp\" & AttachmentName)
            
                    ' Create Attachment in DocContent Field from file on disk
            Set rtitem = New NotesRichTextItem( TargetDoc,"DocContent" )
            Set NewObject = rtitem.EmbedObject (EMBED_ATTACHMENT, "", "c:\temp\" & AttachmentName)
            
                    ' Delete temporary files from c:\temp directory
            Kill "c:\temp\" & AttachmentName
            
         End If
      End If
      
      TargetDoc.Save True,True
      
      Set SourceDoc = view.GetNextDocument( SourceDoc )
      
   Loop
   
   ws.ViewRefresh  
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Hilfe bei script
« Antwort #1 am: 23.06.03 - 19:24:18 »
... ich vermute dir fehlt die session

Dim s As New NotesSession

ata

Korrektur:

... sorry ich habe die erste Zeile übersehen...
... wo steigt denn der Debugger aus?

... Set SourceDoc ist auskommentiert - es wird nicht mehr initialisiert...
« Letzte Änderung: 23.06.03 - 19:27:15 von ata »
Grüßle Toni :)

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #2 am: 24.06.03 - 18:36:20 »
hallo ata
der fehler , nach entfernen des kommentars kommt bei setsourcedoc  
  object variable not set

p.s. tschuldigung dass ich nerve, aber ich blicke null mehr durch  ??? 8) ???
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

Offline Performance

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.096
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re:Hilfe bei script
« Antwort #3 am: 24.06.03 - 18:45:47 »
hast du überhaupt ne view "Memo"  - so heisst die Maske

hast du eine view "Memo" ??

cu
« Letzte Änderung: 24.06.03 - 19:22:33 von Performance »
Wir können alles außer hochdeutsch !

Alles ist möglich, es ist nur eine Frage der Zeit oder des Geldes!

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #4 am: 24.06.03 - 19:18:46 »
ja, maske "memo" hab ich...... :-[ :-[
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

Offline Performance

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.096
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re:Hilfe bei script
« Antwort #5 am: 24.06.03 - 19:24:52 »
stell doch die abgespeckte db rein --- mit 2 doks - dann geht das schneller mit der Fehlersuche  ;D

bin noch ne halbe Stunde online


cu
Wir können alles außer hochdeutsch !

Alles ist möglich, es ist nur eine Frage der Zeit oder des Geldes!

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #6 am: 24.06.03 - 20:05:51 »
datenbank ist die mailschablone r5, andere datenbank idem.  attachment irgendeines... sorry die db hat sich höllisch groß gemacht, da ich ein zu großes attachment reingehängt habe....

edit. ...

fehler kommt jetzt bei set item = SourceDoc.GetFirstItem("$File")  ???
variable item ist leer, habs mit dem debugger durchgespielt....

bitte um hilfe, ich verzweifle fast :-\
« Letzte Änderung: 24.06.03 - 23:19:55 von piccolo »
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Hilfe bei script
« Antwort #7 am: 25.06.03 - 00:13:42 »
... dein Code ist etwas ducheinander. Ich möchte versuchen dir den Code besser zu strukturieren.

... als erstes - nur die Dimensionierungen - keie Zuweisungen...
... als zweites die Initialisierung der benötigten Objekte...
... und dann der Code, der das Ergebnis bringen soll.

Code
Sub Click(Source As Button)
   ' # 1. Dimensionierung der Objekte
   Dim session As New NotesSession  
   ' # nenn die Session nicht 's' - einzelne Buchstaben verwendet man gerne als Zählvariablen in Schleifen
   
   Dim SourceDB As NotesDatabase  ' # besser wäre dbSource - das Objekt leitet den Namen ein...
   Dim TargetDB As NotesDatabase
   'Dim dc As NotesDocumentcollection   
   Dim TargetDoc As NotesDocument  ' # besser wäre docTarget - das Objekt leitet den Namen ein...
   Dim SourceDoc As NotesDocument
   'Dim object As NotesEmbeddedObject
   'Dim ItemType As Integer
   
   ' # ... die Dimensionierung innerhalb einer Do-While-Schleife macht keinen Sinn - hier ist sie richtiger
   'Dim AttachmentName As String
   'Dim newObject As NotesEmbeddedObject
   Dim rtitem As NotesRichTextItem
   
   ' # Initialisierung der benötigten Objekte
   Set TargetDB = session.CurrentDatabase
   
   ' # ...Validierung der Quelldatenbank
   Set SourceDB = session.GetDatabase("" , "blablablabla.nsf")
   If Not SourceDB.IsOpen Then
      Msgbox "Abbruch - die Quelldatenbank konnte nicht geöffnet werden"
      Exit Sub ' # ... bzw. Exit Function, wenn in einer Funktion gearbeitet wird.
   End If
   
   ' # ... Validierung der benötigeten Ansicht
   Set view = SourceDB.GetView( "Memo" )
   If view Is Nothing Then
      Msgbox "Abbruch - die Ansicht 'Memo' konnte nicht in der Quelldatenbank gefunden / geöffnet werden."
      Exit Sub ' # ... bzw. Exit Function, wenn in einer Funktion gearbeitet wird.
   End If
   
   ' # ... das erste Dokument initialisieren - war in deinem Code auskommentiert - warum
   Set SourceDoc = view.GetFirstDocument()
   
   ' # Der eigentliche Code, der das Ergebnis herstellen soll
   Do While Not (SourceDoc Is Nothing)
      
          ' Copy fields from Source Doc to Target Doc
      Set TargetDoc = New NotesDocument( TargetDB )
      TargetDoc.Form = "New Document"
      TargetDoc.Category = SourceDoc.heading
      TargetDoc.SubCat = SourceDoc.Category
      TargetDoc.docTitle = SourceDoc.DocHeading
      
          ' # hier kommt der Code zur Übernahme des Attachments
      ' # ... ich würde das Feld mit dem Attachment in dein Zieldokument kopieren
      Set rtItem = SourceDoc.GetFirstItem("Body") ' # hier liegt das Attachment in der Regel  
      Call TargetDoc.CopyItem( rtItem, "Body" )      
      ' # ... Attachment übernommen.
      
      TargetDoc.Save True,True
      
      Set SourceDoc = view.GetNextDocument( SourceDoc )
      
   Loop
   
   ws.ViewRefresh  
End Sub

... ich konnte es nicht mehr testen, aber das müßte meiner Meinung nach funktionieren...

ata
Grüßle Toni :)

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #8 am: 25.06.03 - 08:42:49 »
@ata, großen dank für deine mühe,

aber ich habe noch ein problem bei :
   Set rtItem = SourceDoc.GetFirstItem("Body") ' # hier liegt das Attachment in der Regel  *** object variable not set :-\

hab mal ein debug fenster hinzugefügt...
danke im vorraus für die hilfe
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

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:Hilfe bei script
« Antwort #9 am: 25.06.03 - 08:48:30 »
Hi,

der Fehler liegt meines Erachtens hier:

Do While (SourceDoc Is Nothing)

In ata's Script steht Do While Not..., bei dir fehlt das Not.


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

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #10 am: 25.06.03 - 10:00:59 »
wenn ich das not nicht weglasse, passiert überhaupt nichts, mit dem debugger durchgespielt ???
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

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:Hilfe bei script
« Antwort #11 am: 25.06.03 - 11:07:28 »
Hi,

dann liegt der Fehler weiter vorne.

SourceDoc wird nicht belegt. Unter Umständen liegt der Hund hier begraben: Set SourceDoc = view.GetFirstDocument()


view wird initialisiert, dass habe ich auf deinem Screenshot gesehen.

Mal ganz spitz gefragt: sind in der Ansicht überhaupt Dokumente vorhanden ?


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

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Hilfe bei script
« Antwort #12 am: 25.06.03 - 11:42:30 »
... so sehe ich das auch, denn ohne SourceDoc geht er nicht in die Schleife...

ata
Grüßle Toni :)

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #13 am: 25.06.03 - 14:24:22 »
hallo ihr  ;D, hab´s jetzt endlich überrissen !, jedoch müßte ich das ritem extrahieren und dann in ein neues dokument kopiern, da ich ansonsten wieder probleme mit dem dokumentenschlüssel habe !
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

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:Hilfe bei script
« Antwort #14 am: 25.06.03 - 14:40:36 »
... jedoch müßte ich das ritem extrahieren und dann in ein neues dokument kopiern, da ich ansonsten wieder probleme mit dem dokumentenschlüssel habe !

Hi,

was meinst du denn damit. Heißt das, du willst das Attachment lösen und an das neue Dokument anhängen ?

Wenn ja, könnte das so aussehen:

...
Set rtitem = Sourcedoc.GetFirstItem("Body")    
If rtitem.Type = RICHTEXT Then
  Forall objects In rtitem.EmbeddedObjects
    If objects.Type = EMBED_ATTACHMENT Then
      strPfad = "c:\temp\" & objects.Source
      objects.ExtractFile strPfad    'Anhang in temp. Verzeichnis lösen
    End If  'If objects.Type = EMBED_ATTACHMENT
  End Forall  'Forall objects In rtitem.EmbeddedObjects
End If  'If rtitem.Type = RICHTEXT

Set newrtitem = New NotesRichTextItem( TargetDoc, "Body" )
Set object = newrtitem.EmbedObject( EMBED_ATTACHMENT, "", strPfad)
...

Axel
« Letzte Änderung: 25.06.03 - 14:41:00 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #15 am: 25.06.03 - 15:30:29 »
habs jetzt auf die Reihe bekommen, letzte frage bitte:

agent sollte bei einkommender mail gestartet werden, d.h. dass ich die quelldatenbank bzw. die zieldatenbank gar nicht offen haben muß ! Im prinzip sieht die problemstellung so aus:

mail in datenbank, wenn ja , dann kopiere attachment in die faxverteiler.nsf hinein, bzw. extrahieren und dann hinzufügen......
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

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:Hilfe bei script
« Antwort #16 am: 25.06.03 - 15:39:37 »
Hi,

setze die Option "Wann soll der Agent gestartet werden" auf "Nach Eingang neuer Mail".

Allerdings musst du darauf achten, dass du keine Frontend-Klassen (uidoc etc.) einsetzt.


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

Offline piccolo

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Hilfe bei script
« Antwort #17 am: 25.06.03 - 20:12:26 »
hallo @all, hab noch ne frage....
da ich den agent "nur bei neuer mail" ausführe, sollte er nur das "neue" dokument in die datenbank schaufeln, wie kann man das machen ?

Sorry bin noch notes azubi mit null durchblick, jetzt durch eure hilfe jedoch mehr.. ;D
<b>PADI - Diving is Fun ! PADI Rescue Diver</b>

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz