Domino 9 und frühere Versionen > ND8: Entwicklung

Form.fileds zum auslesen der Felder einer Maske

(1/3) > >>

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