Domino 9 und frühere Versionen > ND8: Entwicklung
Form.fileds zum auslesen der Felder einer Maske
Spalter:
Hallo zusammen,
habe folgendes Problem. Ich möchte alle Felder einer Form ermitteln und in ein Excel-Sheet schreiben. Funzt soweit auch ganz gut. Ich komme leider anders nicht an die Informationen heran.
Tasächlich wird aber nur ein Bruchteil der Felder, die ich in den Eigenschaften des getriggerten Dokuments sehen kann, ausgegeben.
Das Script sieht so aus:
Set db = Session.GETDATABASE("server", "xxx.NSF")
searchFormula$ = " Feld = ""999"" & Form = ""TTT"" "
Set dc = db.Search(searchFormula$, Nothing, 0)
MsgBox dc.Count
If dc.Count = 0 Then
MsgBox ("Ihre Auswahl erfolgte ohne Treffer")
End If
Set form = db.GetForm("TTT")
Set doc = dc.GetFirstDocument
Felder = form.Fields
For i = 1 To 350
Feldstr = Felder(i)
On Error GoTo Errhandle
Set notesitem = doc.GetFirstItem(Feldstr)
Select Case notesitem.Type
Case 1076: field = "Authors"
Case 1024: field = "DateTime"
Case 1074: field = "Names"
Case 768: field = "Number"
Case 1075: field = "Readers"
Case 1: field = "Rich text"
Case 1280: field = "Text"
Case Else
field = "Other " & form.GetFieldType(Feldstr)
End Select
Feldwert = doc.GetItemValue(Feldstr)
Cells(i, 4) = Feldstr
Cells(i, 5) = field
Cells(i, 6) = notesitem.Type
Cells(i, 8) = Feldwert
Bin ein wenig ratlos.
marschul:
Naja, mit For i=0 To 350 legst Du Dich ja auf eine bestimmte Anzahl fest. Probier doch mal For i=0 To Ubound(Felder)
Interessant dürfte es auch sein, wenn Dein Doc weniger als 351 Felder hat, denn dann überschreitest Du mit Felder(i) die Zahl der Werte im Array = Fehler "Subscript out of range" oder so ähnlich...
EDIT: Und noch etwas: Du gehst ja durch die Liste der Felder der Maske. Das Dokument kann natürlich wesentlich mehr Items haben (z.B. durch Skripte hinzugefügt). Möchtest Du alle Felder des Doks haben, benötigst Du Doc.Items
Bernhard (koehlerbv) hat irgendwo in diesem Forum übrigens mal sehr schön den Unterschied zwischen fields & items beschrieben...
pram:
Hallo Spalter,
Felder von Teilmasken und berechnete Felder etc werden so nicht berücksichtigt.
Du kannst/musst ein Doc öffnen und im UI-Doc dann alle Felder durchgehen
set doc = dc.getFirstDocument()
set uiDoc = workspace.editDocument(false, doc)
' Doc im UI öffnen, dabei werden alle TM etc eingebunden
items = uiDoc.document.items
forall item in items
if item.saveToDisk then ' keine Berechnet-Felder nehmen
print "Feld im Dokument: ", item.name
end if
end forall
call uiDoc.close() ' Das UI-Doc wieder schließen
Alternativ kann man sich das mit dem UI-Doc auch sparen und alle Item im Backend-Dokument durchgehen (da bekommt man aber mehr Felder als in der Maske tatsächlich vorhanden sind)
Gruß
Roland
Spalter:
Hallo Roland,
danke für die Antwort. Erde ich gleich mal ausprobieren.
Gruß
Spalter
pram:
ich hab noch einen Fehler gefunden:
anstatt
set doc = dc.getFirstDocument()
set uiDoc = workspace.editDocument(false, doc)
muss es
set doc = dc.getFirstDocument()
dim emptyDoc as new NotesDocument(db)
emptyDoc.Form = doc.Form
set uiDoc = workspace.editDocument(false, emptyDoc)
heißen
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln