Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: lotus blue am 21.01.10 - 11:12:46

Titel: Probleme mit ItemValue
Beitrag von: lotus blue am 21.01.10 - 11:12:46
Hallo Leute,

hab da ein kleines Problem und benötige euren Rat.

Der Agent "Bestelldatum" übernimmt einen Wert aus einer txt-Datei und schreibt diesen über Nacht in ein Feld.
Da diese Werte oft aktualisiert werden, überschreibt er den Feldinhalt.

Das ganze geschieht mit
Then
Call doc.ReplaceItemValue ("Feldname1", (FieldArray1)))
Call doc.ReplaceItemValue ("Feldname2", (FieldArray2)))
usw.

So weit so gut.

Nun ist mir aber aufgefallen, dass bei ein paar alte Dok´s zwar angefasst werden, aber die Werte nicht reingeschrieben werden.
Nach einem Blick in die Eigenschaften der Dokumente ist M.E. klar warum.

Es handelt sich hierbei um Dok´s die vor einiger Zeit per Agent angelegt wurden und damals die Felder Feldname1 und Feldname2 nicht mit angelegt wurden.

Somit kann der jetztige Agent diese Felder ja nicht überschreiben.

Was würdet ihr nun machen?
Per Agent diese fehlenden Felder noch hinzuzufügen?
Die fehlenden Felder im jetzigen Agent "Bestelldatum" anlegen zu lassen? ???

Gruß
Titel: Re: Probleme mit ItemValue
Beitrag von: ata am 21.01.10 - 11:15:11
... wenn ich das richtig weiß, kann dies nicht der Grund sein. Die Felder werden angelegt, wenn sie noch nicht vorhanden waren - da scheint eher vor dem Save ein Ausstieg zu sein...

Toni
Titel: Re: Probleme mit ItemValue
Beitrag von: ata am 21.01.10 - 11:17:14
... hier der Auszug aus der Hilfe:
Zitat
If the document does not contain an item with the specified name, the method creates a new item and adds it to the document.

Toni
Titel: Re: Probleme mit ItemValue
Beitrag von: lotus blue am 22.01.10 - 11:56:46
... wenn ich das richtig weiß, kann dies nicht der Grund sein. Die Felder werden angelegt, wenn sie noch nicht vorhanden waren - da scheint eher vor dem Save ein Ausstieg zu sein...

Toni

Zunächst mal danke Dir für das Feedback.

Puh. Das ist jetzt gut (dann paßt die Passage  :D) und auch wieder schlecht ( ??? weil ich die Fehlerquelle noch nicht hab)
Nehme folgenden Agenten her:

Sub Initialize
   Dim session As New notessession
   Dim db As notesdatabase
   Dim doc As Notesdocument, profdoc As Notesdocument
   Dim Dateipfad As String, aktfile As String
   Dim fileNum As Integer, cells As Integer, k As Long
   Dim fileName As String
   Dim InputStr As String, delimiter As String
   Dim FieldArray As Variant
   Dim view As NotesView
   Dim agent As NotesAgent
   Dim itmHistory As NotesItem  ' Historyfeld
   Set db = session.currentdatabase
   Set profdoc = db.getprofiledocument("(Konfiguration)")
   Dateipfad = profdoc.Dateipfad_3(0)
   fileNum = Freefile()
   Set view = db.GetView ("Alle Bestellungen")
   Set agent = db.GetAgent("Bestellungen")
'Trennzeichen
   delimiter = ";"
   
   aktfile = Dateipfad
   If aktfile <> "" Then 
      Open aktfile For Input As fileNum%   
      Do While Not Eof(fileNum%)
         Line Input #1,  InputStr$
         FieldArray = Split(InputStr$,delimiter)
         If Not Isempty(FieldArray) Then
            Set doc = view.GetDocumentByKey(FieldArray(0))
            If Not doc Is Nothing Then
               Set itmHistory = doc.GetFirstItem("History")
               If Not itmHistory Is Nothing Then
                  Call doc.ReplaceItemValue("Bestelldatum", (FieldArray(1)))
                  Call doc.ReplaceItemValue("Lagernummer", (FieldArray(2)))
                  Call itmHistory.AppendToTextList("Bestellung erhalten am " &_
                  (FieldArray(1)) & " vom Lager " & (FieldArray(2)))
                  Call doc.Save(True,True)
               End If
            End If
         End If
      Loop
   End If
   Close fileNum%
   agent.Run
End Sub


Fällt jemanden vielleicht was bzgl. der Problematik auf?
Tappe im Dunklen.

Gruß
Titel: Re: Probleme mit ItemValue
Beitrag von: koehlerbv am 22.01.10 - 12:02:18
Der Code tut doch, was er soll:
Code
               Set itmHistory = doc.GetFirstItem("History")
               If Not itmHistory Is Nothing Then
                  Call doc.ReplaceItemValue("Bestelldatum", (FieldArray(1)))
                  Call doc.ReplaceItemValue("Lagernummer", (FieldArray(2)))
                  Call itmHistory.AppendToTextList("Bestellung erhalten am " &_
                  (FieldArray(1)) & " vom Lager " & (FieldArray(2)))
                  Call doc.Save(True,True)
               End If

Wenn es das Item noch nicht gibt, macht der Code auch nichts. Wo liegt also Dein Problem?

Bernhard
Titel: Re: Probleme mit ItemValue
Beitrag von: ascabg am 22.01.10 - 12:03:06
Hallo,

Hast die die Eigenschaften des Doks/der Doks nach dem Speichern schon einmal angesehen und kontrolliert, ob die Items wirklich nicht geschrieben wurden.

Ansonsten wuerde mir auf Anhieb nur einfallen, dass in den betreffenden Dokumenten die
verwendete Maske mit gespeichert wurde.


Andreas
Titel: Re: Probleme mit ItemValue
Beitrag von: Thomas Schulte am 22.01.10 - 12:40:03
Bernhard hat recht. Der Code wird in deinem Fall genau das tun was er soll.

Das ist ein klassisches Beispiel von "defensive programming", was ja an und für sich eine gute Sache ist um Fehler zu vermeiden, das an einer kleinen, aber entscheidenden Stelle in die Hose unauffällig in die Hose geht.
Titel: Re: Probleme mit ItemValue
Beitrag von: DAU-in am 22.01.10 - 13:07:57
Code
If Not itmHistory Is Nothing Then 
 Call doc.ReplaceItemValue("Bestelldatum", (FieldArray(1)))
 Call doc.ReplaceItemValue("Lagernummer", (FieldArray(2)))
 Call itmHistory.AppendToTextList("Bestellung erhalten am " &_
 (FieldArray(1)) & " vom Lager " & (FieldArray(2))) 
else
 Call doc.ReplaceItemValue("Bestelldatum", (FieldArray(1)))
 Call doc.ReplaceItemValue("Lagernummer", (FieldArray(2)))
 Call doc.ReplaceItemValue("History","Bestellung erhalten am " &_
 FieldArray(1) & " vom Lager " & FieldArray(2)) 
End If
Call doc.Save(True,True)
Titel: Re: Probleme mit ItemValue
Beitrag von: koehlerbv am 22.01.10 - 13:17:43
Das ist noch doppelt gemoppelt, Anita. Wenn nicht, dann mach, wenn doch, dann mach auch ... Zu berücksichtigen wäre nur die Befüllung von "History".

Bernhard
Titel: Re: Probleme mit ItemValue
Beitrag von: DAU-in am 22.01.10 - 13:26:10
Code
If Not itmHistory Is Nothing Then 
 Call itmHistory.AppendToTextList("Bestellung erhalten am " &_
 (FieldArray(1)) & " vom Lager " & (FieldArray(2))) 
else
 Call doc.ReplaceItemValue("History","Bestellung erhalten am " &_
 FieldArray(1) & " vom Lager " & FieldArray(2)) 
End If
Call doc.ReplaceItemValue("Bestelldatum", (FieldArray(1)))
Call doc.ReplaceItemValue("Lagernummer", (FieldArray(2)))

Call doc.Save(True,True)
Titel: Re: Probleme mit ItemValue
Beitrag von: koehlerbv am 22.01.10 - 13:29:36
 :D
Titel: Re: Probleme mit ItemValue
Beitrag von: lotus blue am 22.01.10 - 13:34:54
Hallo,

danke Euch für den Denkanstoß und mitlerweile auch Lösung des Probs.

Ich  O0 , hab die Bedingung der Historie halt in der Reihenfolge völlig falsch gesetzt.

Jetzt is klar
Gruß und Danke
schöndes WE
Titel: Re: Probleme mit ItemValue
Beitrag von: koehlerbv am 22.01.10 - 14:42:58
Jason, ein heisser Tipp: Hättest Du den betreffenden Codeteil (den Du ja schon richtig identifiziert hast) im Debugger verfolgt, hättest Du Dir die Frage einfach selbst beantworten können.

Bernhard