Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: gstueb am 26.04.10 - 17:43:08
-
Hallo,
Wie kann ich per Script den Inhalt eines gemeinsames Feldes einer anderen DB auslesen?
Hintergrund: Wir setzen ein Anwendungspaket ein, dass aus einer Vielzahl von Einzelanwendungen besteht. Die Version der jeweiligen Einzelanwendung ist jeweils in einem gemeinsamen Feld als Konstante hinterlegt.
Konkret möchte ich also den Inhalt des gemeinsamen Feldes "$DatenbankVersion" aus verschiedenen DB's auslesen.
Gruß,
Gregor
-
"Gemeinsames Feld" ist ein Frontend-Designelement. Auslesen lassen sich aber nur Items (egal, wie diese erzeugt wurden, ob mit gemeinsamen Feld oder "normalen" Feld oder ganz ohne Feld).
Bernhard
-
Du möchtest also wissen wie der Code im Shared Field lautet.
Das würde ich mit DXL Export machen.
1) Also Datenbank holen.
2) Das Shared Field als NotesNotesCollection holen.
3) Dann das Shared Field nach DXL exportieren.
4) Abschließend den gewünschten Code aus dem DXL Code herausziehen.
Probiere mal den nachfolgenden Code in einen Agenten aus.
Der Code erwartet das $DatenbankVersion SharedField in der gleichen Datenbank.
Option Declare
Option Compare Nocase, Nopitch
Const SHAREDFIELDNAME = "$DatenbankVersion"
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim nc As NotesNoteCollection
Set nc = db.CreateNoteCollection(False)
nc.SelectSharedFields = True
nc.SelectionFormula = |@UpperCase($TITLE) = @UpperCase("| & SHAREDFIELDNAME & |")|
Call nc.BuildCollection
If nc.Count > 0 Then
Dim stream As NotesStream
Set stream = session.CreateStream
Dim exporter As NotesDXLExporter
Set exporter = session.CreateDXLExporter(nc, stream)
Call exporter.Process
Dim strDXL As String
strDXL = Replace( stream.ReadText,Chr(10), "" )
Msgbox Strright(Strleft( strDXL, "</formula>"),"<formula>")
End If
-
Wenn sich in allen Datenbanken mit dem gemeinsamen Feld eine Maske mit immer gleichem Namen befindet, die dieses Feld anzeigt, kannst Du das auch so machen:
...
Set tmpdoc = New NotesDocument (andereDB)
tmpdoc.Form = "dieMaskeDieDasFeldAnzeigt"
If tmpdoc.ComputeWithForm (False, False) Then
version = tmpdoc.GetItemValue ("$DatenbankVersion") (0)
End If
...
Die Maske, die das gemeinsame Feld anzeigt, sollte möglichst einfach sein, damit das ComputeWithForm schnell und fehlerfrei ausgeführt werden kann.
-
Vielen Dank für Eure Tipps.
Die Lösung von Jens hat mir geholfen, die einfachere Lösung von Peter konnte ich mangels Maske nicht verwenden.
Wieder was gelernt ;-)
Gruß,
Gregor