Autor Thema: Befüllung von Felder  (Gelesen 3879 mal)

Offline Dani B.

  • Frischling
  • *
  • Beiträge: 5
Befüllung von Felder
« am: 08.11.17 - 07:53:07 »
Hallo zusammen,

zu meinem Problemchen.

Ich importiere in eine Datenbank eine CSV Datei und befülle anschließend bestimmte Felder der neu erstellten Dokumente (nennen wir diese mal Statistikakten) automatisch, mit Feldern aus bereits vorhandenen Dokumenten (nennen wir mal Kundenakten) in der gleichen Datenbank. Geht so: Das Script sucht in einer Ansicht ein Schlüsselwort und befüllt hier aus und erstellt ein neues Dokument. Das funktioniert ohne Probleme.

Nun versuche ich verzweifelt in dieses Import-Script eine weitere Befüllung der neu erstellten Dokumente aus einem anderen, ebenfalls bereits vorhandenen Dokument (nennen wir mal Konditionen A, B C, d.h. es gibt 3 verschiedene Dokumente mit jeweils 5 Feldern) Felder zu befüllen. Ich möchte nun aus den Konditionen in diese Statistikakten Felder befüllt haben, welche er sich anhand einer Zuordnungsnummer von A,  B oder C holt. Ich habe hierzu den oberen "Befüllungsteil" nach unten kopiert. Hoffentlich geht das..

Es erscheint immer wieder "Object variable not set". Der Debugger bleibt an einer Stelle stehen woraus ich auch nicht schlau werde. Ich habe eine Ansicht mit den Konditionen, Spalten sind sortiert.

Ist hier mit einem kleinen Eingriff etwas getan? Danke für Eure Hilfe.



Option Public
Option Declare

Sub Initialize
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim fileNum As Integer
   Dim spalten As Integer
   Dim fileName As String
   Dim InputStr As String, delimiter As String
   Dim FieldArray As Variant
   Dim i As Integer
   Dim maske As String
   Dim dclTxtDaten As NotesDocumentCollection
   Dim TID As String
   Dim TX As String
   Dim uidoc As NotesUIDocument
   Dim ws As New NotesuiWorkspace
   
   Set db = session.Currentdatabase
   If db.IsOpen Then Set dclTxtDaten = db.CreateDocumentCollection
   
   fileNum% = FreeFile()
   fileName$ = "y:\importstt.csv"  '--  Dateiname eingeben
   delimiter = ";"  '-- Trenner eingeben
   spalten = 20      '-- Spalten eingeben
   maske = "ImportStatistik"    '-- Maskenname eingeben
   
   'Feldnamen eingeben
   Dim varFeld(1 To 2) As Variant
   varFeld(1) = "Kundenid"
   varFeld(2) = "Ultimo"

   
   
   Open fileName$ For Input As fileNum%
   
   Do While Not EOF(fileNum%)
      Set doc = db.Createdocument()
      Call doc.Replaceitemvalue("Form", maske)
      
      Line Input #1,  InputStr$
      
      For i = 1 To UBound(varFeld)
         
         Call doc.Replaceitemvalue(varFeld(i), (StrToken(InputStr$, delimiter, i)))    
         
      Next
      Call doc.Save(True,False)
      'Transaktionsdokument der Collection zuordnen
      Call dclTxtDaten.Adddocument(doc)
      
   Loop
   Close fileNum%
   

   Dim docTxt As NotesDocument
   Dim docHaupt As NotesDocument
   Dim viewTID As NotesView
   
   Set viewTID = db.Getview("viewTID")
   Set docTxt = dclTxtDaten.Getfirstdocument()
   
   While Not docTxt Is Nothing
      TID = docTxt.Getitemvalue("Kundenid")(0)
      Set docHaupt = viewTID.Getdocumentbykey(TID, True)
      
      Call docTxt.Replaceitemvalue("Kundenid", docHaupt.Getitemvalue("Kundenid")(0))

      
      Set uidoc = ws.EditDocument(True , docTxt)
      uidoc.Refresh
      Call uidoc.Save()
      Call uidoc.Close(True)
      
      'Call docTxt.save(True,False)
      
      Set docTxt = dclTxtDaten.Getnextdocument(docTxt)
   Wend


      Dim docTxt1 As NotesDocument
      Dim docHaupt1 As NotesDocument
      Dim viewTX1 As NotesView
      
      Set viewTX1 = db.Getview("viewTX")
      Set docTxt1 = dclTxtDaten1.Getfirstdocument()
   
   While Not docTxt1 Is Nothing
      TX = docTxt1.Getitemvalue("txartnr")(0)
      Set docHaupt1 = viewTX1.Getdocumentbykey(TX, True)
      
      Call docTxt1.Replaceitemvalue("tx1vk", docHaupt1.Getitemvalue("tx1vk")(0))

Set uidoc = ws.EditDocument(True , docTxt)
      uidoc.Refresh
      Call uidoc.Save()
      Call uidoc.Close(True)
      
      'Call docTxt1.save(True,False)
      
      Set docTxt1 = dclTxtDaten1.Getnextdocument(docTxt1)
   Wend

   
End Sub


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Befüllung von Felder
« Antwort #1 am: 08.11.17 - 08:25:09 »
Zitat
Es erscheint immer wieder "Object variable not set". Der Debugger bleibt an einer Stelle stehen woraus ich auch nicht schlau werde.

Und welche Stelle im Script ist es??
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Dani B.

  • Frischling
  • *
  • Beiträge: 5
Re: Befüllung von Felder
« Antwort #2 am: 08.11.17 - 08:45:30 »
Hallo, an dieser Stelle bleibt der Debugger stehen.

Call docTxt1.Replaceitemvalue("tx1vk", docHaupt1.Getitemvalue("tx1vk")(0))

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Befüllung von Felder
« Antwort #3 am: 08.11.17 - 08:51:39 »
also ist entweder docTxt1 oder docHaupt1 nicht gesetzt. Sieht man aber im debugger
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Dani B.

  • Frischling
  • *
  • Beiträge: 5
Re: Befüllung von Felder
« Antwort #4 am: 08.11.17 - 08:55:41 »
Danke für Deine Antwort, nur wo/wie sehe ich das im Debugger? Der springt eben auf diese Zeile.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Befüllung von Felder
« Antwort #5 am: 08.11.17 - 09:31:26 »
und dann schaust Du unten in die Variablen, suchst Dir die in der Zeile benannten Variablen und kannst deren Werte sehen. Das nicht vorhandene Objekt steht dort mit Nothing

Offline Dani B.

  • Frischling
  • *
  • Beiträge: 5
Re: Befüllung von Felder
« Antwort #6 am: 09.11.17 - 10:48:51 »
Hallo und vielen lieben Dank für die Hilfe es funktioniert... grundsätzlich ;-)

Ein kleines Problemchen hätte ich noch.
Woran könnte es liegen, dass das letzte Dokument welches aus der CSV importiert wird mit einem Replizier und Speicherkonflikt gespeichert wird bzw. was kann ich zur Fehleranalyse machen?


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Befüllung von Felder
« Antwort #7 am: 09.11.17 - 13:52:41 »
In dem Script schreibst Du Daten über das Backend in Dokumente, gleichzeitig öffnest Du mehrere Dokumente und änderst/speicherst die über das Frontend. Ich gebe zu, dass ich Dein Script in den 2 Minuten, die ich mir zum Verständnis einer Frage gönne, nicht wirklich verstanden habe. Ich würde darin mal aufräumen und nur im Backend agieren, dann solltest Du keine Replizierkonflikte mehr bekommen.

Offline Dani B.

  • Frischling
  • *
  • Beiträge: 5
Re: Befüllung von Felder
« Antwort #8 am: 09.11.17 - 14:16:29 »
Hallo Peter vielen Dank, ich mach mal darüber. Gruß Dani

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Befüllung von Felder
« Antwort #9 am: 09.11.17 - 14:26:19 »
Zum Beispiel:

Code
Set uidoc = ws.EditDocument(True , docTxt)
uidoc.Refresh
Call uidoc.Save()
Call uidoc.Close(True) 

wird
ComputeWithForm

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz