NotesViewEntry und Phänomen mit "Variant enthält keinen Container"

  • Hallo, ich habe ein nervendes Problem in einem Script mit dem Fehler "Variant enthält keinen Container". Ich nutze mein Script um ein Dokument mit Zusatzdaten anzureichen. Bei den ca. 70.000 Dokumenten erhalte ich immer wieder an untereschiedlichen Stellen die benannte Fehlermeldung an dieser Stelle des Scriptes:



    Set NVE = View_01.GetEntryByKey(SB_KURZ,True)
    If Not (NVE Is Nothing) Then
    DOC.KSG_Sachbearbeiter_lang = NVE.ColumnValues(3) (Hier bleibt der Debugger stehen)
    DOC.KSG_Marktsegment = NVE.ColumnValues(4)
    DOC.KSG_Filiale = NVE.ColumnValues(5)
    End If


    Der über die Variable gelieferte Wert von SB_KURZ ist in der View_01 definitiv enthalten und sollte den NotesViewEntry sauber befüllen. Leider ist der Eintrag "Columnvalue" leer und somit auch die einzelnen "Values" wodurch dann vermutlich der Fehler verursacht wird. Ich schließe die Datenbank und öffne diese erneut und nach dem 4 oder 5ten Mal läuft das Script für alle 70.000 Dokumente sauber durch.


    Ich bin leider kein Script-Profi. Hat jemand schon mal ähnliche Erfahrungen gesammelt?


    Sollte noch weitere Teile des Scriptes benötigt werden stelle ich diese gerne bereit.


    Vielen Dank - Thomas

  • Da ViewEntries auf den View Index gehen könnte das auf ein Problem mit demselbigen hindeuten.


    Du könntest z.B. einen Refresh durch Setzen der Script Property verhindern und schauen ob es dann noch immer passiert

  • Hallo Taurec, vielen Dank für die schnelle Antwort.
    Ich hoffe ich habe Deine Info richtig umgesetzt. Zu Sicherheit habe ich das modifizierte Script nochmal beigefügt (blauer Eintrag). Ist es eigentlich für die Performance sinnvoller die Inhalte der kleineren Ansichten in Variablen (Listen) zu übertragen und in diesen dann entsprechend zu suchen anstatt immer wieder in den Views?


    Vielen Dank und Grüße aus dem Harz...


    Thomas


    Sub Click(Source As Button)
    Dim Session As New NotesSession
    Dim WKS As New NotesUIWorkspace
    Dim DB As NotesDatabase


    Dim VIEW_01 As NotesView 'Sachbearbeiter
    Dim VIEW_02 As NotesView 'SiErwerbsleben
    Dim VIEW_03 As NotesView 'Wirtschaftszweige
    Dim VIEW_04 As NotesView 'RefoSchlüssel
    Dim VIEW_05 As NotesView 'EKH-Darlehen
    Dim VIEW_06 As NotesView 'Habenumsätze Vorjahr
    Dim VIEW_07 As NotesView 'Kundenmarkierungen


    Dim COL As NotesDocumentCollection
    Dim DOC As NotesDocument
    Dim NVE As NotesViewEntry


    Dim KDNR As Single
    Dim KDA_KURZ As String ' Kundenart kurz
    Dim SB_KURZ As String ' Sachbearbeiter kurz
    Dim SiE_KURZ As Integer ' Stellung im Erwerbsleben kurz
    Dim WiZ_KURZ As Long ' Wirtschatfszweig kurz
    Dim ReF_KURZ As Integer ' Rechtsformschlüssel kurz
    Dim MA_LANG(1 To 2) As String



    Dim I As Long
    Set DB = Session.CurrentDatabase
    Set COL = DB.UnprocessedDocuments
    Set DOC = COL.GetFirstDocument


    Set View_01 = DB.GetView("Arbeitsplatzinhaber")
    Set View_02 = DB.GetView("SiErwerbsleben")
    Set View_03 = DB.GetView("Wirtschaftszweige")
    Set View_04 = DB.GetView("RefoSchlüssel")
    Set View_05 = DB.GetView("SYS\EKH")
    Set View_06 = DB.GetView("SYS\Habenumsatz")
    Set View_07 = DB.GetView("Kundenmarkierungen")


    While Not (DOC Is Nothing)
    KDA_KURZ = DOC.GetItemValue("KSG_Kundenart_kurz")(0)
    SB_KURZ = DOC.GetItemValue("KSG_Sachbearbeiter_kurz")(0)
    SiE_KURZ = DOC.GetItemValue("KSG_Erwerbsleben_kurz")(0)
    WiZ_KURZ = DOC.GetItemValue("KSG_Wirtschaftszweig_kurz")(0)
    ReF_KURZ = DOC.GetItemValue("KSG_Rechtsform_kurz")(0)
    KDNR = DOC.GetItemValue("KSG_Kundennummer")(0)



    If KDA_KURZ="P" Then DOC.KSG_Kundenart_lang = "Privatperson"
    If KDA_KURZ="U" Then DOC.KSG_Kundenart_lang = "Unternehmen"
    If KDA_KURZ="S" Then DOC.KSG_Kundenart_lang = "Sachkunde"


    Set NVE = View_01.GetEntryByKey(SB_KURZ,True)
    If Not (NVE Is Nothing) Then
    DOC.KSG_Sachbearbeiter_lang = NVE.ColumnValues(3)
    DOC.KSG_Marktsegment = NVE.ColumnValues(4)
    DOC.KSG_Filiale = NVE.ColumnValues(5)
    Call View_01.Refresh
    End If


    Set NVE = View_02.GetEntryByKey(SiE_KURZ,True)
    DOC.KSG_Erwerbsleben_lang = NVE.ColumnValues(1)


    Set NVE = View_03.GetEntryByKey(WiZ_KURZ,True)
    If Not (NVE Is Nothing) Then
    DOC.KSG_Wirtschaftszweig_lang = NVE.ColumnValues(1)
    End If


    Set NVE = View_04.GetEntryByKey(ReF_KURZ,True)
    DOC.KSG_Rechtsform_lang = NVE.ColumnValues(1)


    Set NVE = View_05.GetEntryByKey(KDNR,True)
    If (NVE Is Nothing) Then DOC.KSG_EKH_Darlehen="nein"
    If Not (NVE Is Nothing) And KDA_KURZ="P" And ((SiE_KURZ=0 Or SiE_KURZ>3) And SiE_KURZ<>17) Then
    DOC.KSG_EKH_Darlehen="ja"
    Else
    DOC.KSG_EKH_Darlehen="nein"
    End If


    Set NVE = View_06.GetEntryByKey(KDNR,True)
    If Not (NVE Is Nothing) Then
    DOC.KSG_Habenumsatz = NVE.ColumnValues(1)
    End If


    Set NVE = View_07.GetEntryByKey(KDNR,True)
    If Not (NVE Is Nothing) Then
    DOC.KSG_Sonderregelung = "nein"
    DOC.KSG_Sonderregelung_Bemerkung = NVE.ColumnValues(1)
    End If


    I=I+1
    Print I


    MA_LANG(1) = DOC.GetItemValue("KSG_Sachbearbeiter_lang")(0)
    MA_LANG(1) = "CN="+Strtoken(MA_LANG(1),", ",2)+" "+Strtoken(MA_LANG(1),", ",1)+"/O=Vereinigte_VB"
    MA_LANG(2) = "[Admin]"



    Call DOC.ReplaceItemValue("KSG_Autoren",MA_LANG)
    Call DOC.ReplaceItemValue("KSG_Leser", MA_LANG)
    Call DOC.ReplaceItemValue("KSG_Letzte_Aenderung",Now)
    Call DOC.Save(True,True)
    Set DOC = COL.GetNextDocument(DOC)
    Wend


    End Sub