Autor Thema: Form.fileds zum auslesen der Felder einer Maske  (Gelesen 4301 mal)

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Form.fileds zum auslesen der Felder einer Maske
« am: 20.05.11 - 09:14:23 »
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.

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #1 am: 20.05.11 - 09:37:36 »
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...
« Letzte Änderung: 20.05.11 - 09:41:57 von marschul »
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #2 am: 20.05.11 - 09:42:24 »
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #3 am: 20.05.11 - 09:44:43 »
Hallo Roland,

danke für die Antwort. Erde ich gleich mal ausprobieren.

Gruß
Spalter

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #4 am: 20.05.11 - 09:58:45 »
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #5 am: 20.05.11 - 10:06:40 »
Hallo Roland,

danke für den Hinweis. Workspace funzt nicht in com.

Also müßte ich zunächst von einer anderen Notes-DB zugreifen und dann in Excel wegschreiben. Direkt als Excel-Macro funzt das nicht. Werde ich später ausprobieren. Komme leider nicht direkt an die betreffende DB ran.

Gruß
Spalter

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #6 am: 20.05.11 - 10:21:26 »
Wenn das ganze in einem COM Umfeld läuft, willst Du ev. über NotesDocument.Items iterieren.

Dann brauchst Du kein Felder-Array, für das Du die Feldnamen schon vorher wissen musst.

Und wozu das Workspace, .... Zeugs? Den Code für das Erzeugen der Collection ist eh schon da.
« Letzte Änderung: 20.05.11 - 10:24:10 von m3 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #7 am: 20.05.11 - 10:52:27 »
Und wozu das Workspace, .... Zeugs? Den Code für das Erzeugen der Collection ist eh schon da.

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)

Man bekommt halt mit obigen "Trick" die tatsächlichen Felder in der Maske. Ansonsten würde ich auch über doc.items iterieren.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #8 am: 20.05.11 - 11:23:04 »
Aber eben nicht über COM, was er anscheinend will ... ;)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #9 am: 20.05.11 - 11:32:14 »
Hallo m3,

vielen Dank für Deine Antwort. Ich setze das jetzt mal um.

Gruß
Spalter

Driri

  • Gast
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #10 am: 20.05.11 - 12:41:51 »
Ich würde Dir den Weg über eine NoteCollection empfehlen. Du kannst die NoteCollection so bilden, daß nur Masken enthalten sind und greifst dann über die NoteID auf das Dokument zu (ein Designelement ist letztlich auch nur ein Dokument). Dort findest Du im Item $Fields alle Feldnamen.

gekürztes Beispiel :

Zitat
Dim ws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim ncol As NotesNoteCollection   
   Dim nid As String
   Dim fieldlist As Variant
   
   Set db = session.CurrentDatabase
   Set ncol = db.CreateNoteCollection(False)
   ncol.SelectForms = True
   Call ncol.BuildCollection
   
   nid = ncol.GetFirstNoteId
   
   While Not nid="" Or Isnull(nid)
      Set doc = db.GetDocumentByID(nid)
      If Not (doc Is Nothing) Then
         If Cstr(doc.GetItemValue("$TITLE")(0)) = "<Name der Maske>" Then
            fieldlist = doc.GetItemValue("$Fields")
            Exit Sub
         End If
      End If
      nid = ncol.GetNextNoteId(nid)
   Wend


Edit : Ich habe mal gerade nachgeschaut. Da sind dann auch Felder aus eingebundenen Teilmasken enthalten. Bei berechneten Teilmasken könnte das evtl. in die Hose gehen.
« Letzte Änderung: 20.05.11 - 12:44:28 von Driri »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #11 am: 20.05.11 - 12:45:05 »
Aber nur, wenn die Aufgabe darin besteht, für das Frontend definierte Felder zu ermitteln. Aus dem Ursprungspost geht aber hervor, dass der Fragesteller Field mit Item verwechselt und tatsächlich alle jeweils vorhandenen Itemwerte auslesen will.

Bernhard

Driri

  • Gast
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #12 am: 20.05.11 - 12:47:02 »
Ok, das hatte ich so nicht gelesen/verstanden. Danke für den Hinweis, Bernhard.  :)

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Re: Form.fileds zum auslesen der Felder einer Maske
« Antwort #13 am: 20.05.11 - 13:24:56 »
Hallo Bernhard,

ich hab's tatsächlich verwechselt.

Gruß
Spalter


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz