Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Tobi2283 am 08.08.06 - 09:18:17
-
hallo und guten morgen zusammen,
ich habe das problem, dass in einer datenbank ein import vorgenommen wurde, um eine zeitreihe mit insgesamt 6 verschiedenen feldern zu aktualisieren. der import ist leider voll in die hose gegangen(nicht das import-modul war übrigens fehlerhaft, sondern die datei, aus der importiert wurde). nun möchte ich, damit nicht alles per hand korrigiert werden muss, mittels agent die bestimmte zeitreihe löschen. die o.g. felder beinhalten 1 datumsfeld sowie 5 zahlenfelder.
muss vorab noch sagen, dass ich zum teil mit script etwas unbedarft bin. :-\
ich hab mir da folgenden löschungsansatz ausgedacht.
ich neh ein doc nach dem anderen und prüfe, ob ein gewisses datum darin erfasst ist (hier: 30.06.2006). wenn ja, dann soll das script den listtag in einer variablen speichern und anschließend von allen 6 feldern den eintrag mit dem vorher in der variablen gespeicherten listtag löschen.
anschließend soll das nächste doc geprüft werden.
an sich - so denk ich mal - ein logischer aufbau.
jetzt hapert es an der umsetzung. und zwar - und jetzt bitte nicht lachen - kann ich die werte aus dem notesdocument nicht auslesen.
ich habs mit
set datum = doc.getitemvalue("datum")
versucht, klappt jedoch nicht, der debugger sagt "type mismath".
wie muss ich das dann schreiben, damit ich die liste her bekomme.
bereits vorab den besten dank.
tobias
-
GetItemValue gibt ein Array zurück.
dim vDate as Variant
vDate = doc.GetItemValue( "Datum" )(0 )
.....
-
Das Feld "datum" hat mehrere Werte, also eine Liste?
Dann musst Du die Liste an eine Variable übergeben, die auch Listen verwalten kann. Was ist <datum> denn für ein Variablentyp?
Das ist aus der Designer Onlinehilfe, die übrigens ziemlich gut ist:
Dim total As Integer
Dim money As Variant
total = 0
money = doc.GetItemValue( "quarterlyRevenue" )
Forall m In money
total = total + m
End Forall
Ein Variant kann Listen verwalten.
Jetzt musst Du nur noch gucken, wie man aus einem Array einen Eintrag löschen kann.
ArrayReplace wäre vielleicht ein Kandidat.
-
Aus einem Array eine Wert rausschmeißen ist einfach. Mit einem leeren Wert füllen und anschließend ein FullTrim über das Array machen.
Erklärung siehe Online Hilfe.
-
danke für die super ansätze, hab jetzt meinen agenten soweit fertig, leider bin ich bei einem probelauf auf ein weiteres problem gestoßen
in der zeitreihe sind z.T. auch Null-Werte enthalten, welche jedoch richtig sind und nicht gelöscht werden sollen.
habe mir etwas gebastelt, dass die nullwerte durch neue wertzuweisung schützen soll.
nunmehr kann ich die geänderten werte aber nicht mehr in das dokument zurückspeichern, sagt mir irgendwas mit "notes error: NotesItem cannot be set to an array of mixed data types".
hm...
grübel, grübel, hab schon einiges wieder zusammengedoktert, aber hilft alles nichts,
hier mal ein auszug aus dem script:
Do Until doc Is Nothing
insgesamt = insgesamt + 1
Print insgesamt, doc.UniversalID
vdate = doc.GetItemValue("ZR_INFOPER")
d = Arraygetindex (vdate, "30.06.2006")
If d >= 0 Then
mitReihe = mitReihe + 1
Dim Soll As Variant
Dim SiW As Variant
Dim Blanko As Variant
Dim EWB As Variant
Dim EWBN As Variant
Soll = doc.GetItemValue("ZR_GSoll")
SiW = doc.getitemvalue("ZR_SiW")
Blanko = doc.GetItemValue("ZR_Blanko")
EWB = doc.GetItemValue("ZR_EWB")
EWBN = doc.GetItemValue("ZR_EWB_neu")
' Nullwerte vor Löschung schützen
Dim anzahl As Variant
anzahl = Ubound(SiW)
For i = 0 To anzahl
If SiW(i) = 0 Then
SiW(i) = 99999
End If
If Blanko(i) = 0 Then
Blanko(i) = 99999
End If
If EWB(i) = 0 Then
EWB(i) = 99999
End If
If EWBN(i) = 0 Then
EWBN(i) = 99999
End If
Next
' 30.06.2006 durch Leerzeichen ersetzen
vdate(d) = leer
Soll(d) = leer
SiW(d)= leer
Blanko(d) = leer
EWB(d) = leer
EWBN(d) = leer
' Leerzeichen entfernen
vdate = Fulltrim(vdate)
Soll = Fulltrim(Soll)
SiW = Fulltrim(SiW)
Blanko = Fulltrim(Blanko)
EWB = Fulltrim(EWB)
EWBN = Fulltrim(EWBN)
'Nullwerte nach Löschung rückgängig machen
anzahl = Ubound(SiW)
For i = 0 To anzahl
If SiW(i) = 99999 Then
SiW(i) = 0
End If
If Blanko(i) = 99999 Then
Blanko(i) = 0
End If
If EWB(i) = 99999 Then
EWB(i) = 0
End If
If EWBN(i) = 99999 Then
EWBN(i) = 0
End If
Next
doc.ZR_INFOPER = vdate
doc.ZR_GSoll = Soll
doc.ZR_SiW = SiW
doc.ZR_Blanko = Blanko
doc.ZR_EWB = EWB
doc.ZR_EWB_neu = EWBN
Call doc.save(False, False)
Else
hier irgendwo ein lösungsansatz, denke mal, dass ich einen text als null gesetzt habe, obwohl es eine zahlenliste ist. aber wie kann ich das umgehen?!?
hab auch schon versucht, ein feld in einer variablen zu speichern, welche eine null enthält, jedoch wenn ich dann die 99999 durch diese variable ersetzte, sieht man im debugger, wie als inhalt (variant()) eingesetzt wird.