Domino 9 und frühere Versionen > ND8: Entwicklung

Gemeinsames Feld aus "Fremder DB" auslesen...

(1/1)

gstueb:
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

koehlerbv:
"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

Jens Winkelmann:
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

Peter Klett:
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.

gstueb:
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

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln