Autor Thema: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath  (Gelesen 5706 mal)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Da bin ich wirklich noch nie drüber gestolpert:

@Subset( @DbName ; -1 ) liefert den Pfad Relativ zum Data- Verzeichnis (wenn die DB innerhalb des Data liegt) und NotesDatabase.FilePath den kompletten absoluten Pfad.

Hat schon jemand ne Funktion geschrieben, die das umsetzt?

Ich brauche (weil ich das in die notes.ini schreiben will) den relativen Pfad, aber per LotusScript.

Ansätze:
Evaluate( @Subset( @DbName ; -1 ) ), geht aber nur, wenn ich den Pfad der "aktuellen" Datenbank wissen will...

Directory= aus der notes.ini auslesen und ein StrRight auf meinen FilePath machen...

Habt Ihr was besseres?
« Letzte Änderung: 22.09.12 - 07:51:32 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #1 am: 20.09.12 - 17:44:57 »
... sicher ???

Bei mir liefert das beides dasselbe ...

Code
Set db = session.currentdatabase
Msgbox db.FileName,16,db.filepath

Oder benutzt du was anderes, lokale Datenbank oder NSF-Link oder ?
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #2 am: 20.09.12 - 22:19:37 »
Das DB-Handling ist manchmal etwas eigenartig.

Besonsers bei NSF-Links verhalten sich manche Funktionen nicht wie sie sollen...
Wenn man z.B. sowas macht
Code
Set dbdir = New NotesDbDirectory(s.CurrentDatabase.Server)
und man sonst nirgends eine Referenz auf die DB hält, wird diese NOTHING: http://atnotes.de/index.php/topic,49963.0.html

Auch liefert UIDatabase.database und session.currentDatabase nicht immer das gleiche Objekt (bei einer ist der Server in CN-Form, bei der anderen in Kurzschreibweise, wann das so ist hab ich noch nicht rausgefunden, gottseidank passiert dies nicht oft)...
Das ist in den meisten Fällen zwar unproblematisch, allerdings quittiert ein UIDoc.document.makeResponse(otherDoc) mit einer Fehlermeldung, dass beide Dokumente aus der gleichen DB sein müssen...
Würde mich nicht wundern, wenn @DBName nun noch eine dritte Variante liefern kann ;)


Gruß
Roland
Roland Praml

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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #3 am: 21.09.12 - 08:05:08 »
Sehr interessant ...

EDIT: war in Notes 5 auch schon so, ist mir noch nie aufgefallen
« Letzte Änderung: 21.09.12 - 08:11:26 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #4 am: 21.09.12 - 08:54:08 »
Sorry, hatte natürlich vergessen zu erwähnen: Gilt für lokale Datenbanken.... Auf dem Server liefert beides das selbe...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #5 am: 21.09.12 - 10:17:34 »
Ansätze:
Evaluate( @Subset( @DbName ; -1 ) ), geht aber nur, wenn ich den Pfad der "aktuellen" Datenbank wissen will...

Klingt danach, dass das Ziel ist, den Pfad eine anderen DB zu ermitteln? Was, wenn man dem Evaluate als zweiten Parameter etwas über die Ziel-DB mitgibst? Laut Hilfe sind da wohl auch andere Objekte als Documents mgl. - wäre mal interessant, ob das auch mit einem DB-Objekt funktioniert...
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 Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #6 am: 21.09.12 - 10:19:04 »
Dann würde ich das mit dem Directory aus der ini machen, prüfen, ob
Left (Lcase (Filepath (Len (ini-Eintrag)))) = Lcase (ini-Eintrag)
wenn ja, dann alles rechts davon (wegen Groß-Kleinschreibung), evtl. auf beginnenden Backslash prüfen.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #7 am: 21.09.12 - 11:43:10 »
Es geht bei der Anforderung schlicht darum, mir den Pfad einer lokalen Datenbank in der notes.ini zu merken. Diverse Symbolleisten- Aktionen greifen dann auf diese Info zu. Und sobald dann über diesen Pfad die Datenbank geöffnet wird, habe ich zwei Repliken im Workspace...

Darum geht es...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #8 am: 21.09.12 - 16:29:58 »
Hallo Tode,

als ich vorhin Deinen letzten Beitrag las, verstand ich nicht, was Du mir damit sagen wolltest. Es bedurfte eines lockeren 15-km-Laufes, bevor ich den Tages- und Wochenmüll soweit verarbeiten konnte, dass ich schnallte, was Du meinst, bzw. wie Du meinen Beitrag übersetzt hast.

Das Ziel war mir klar: aus Filepath nur den zum Notes-Dataverzeichnis relativen Teil herauszufiltern. Ich vermute, dass Du mich so verstanden hast, dass Du es später mit dem von Dir geschriebenen Ini-Eintrages machen solltest. Ich meinte mit Ini-Eintrag den Directory-Eintrag.

Deshalb nochmal deutlich, was ich meine. Ich weiß, dass ich Dir das nicht erklären muss, ich tue es für die Mitleser.

Der Directory-Eintrag lautet:

C:\Notes\Data\

Filepath gibt:

C:\Notes\data\test\Test.nsf

Ein strleft reicht hier nicht, da C:\Notes\Data\ nicht in C:\Notes\data\test\Test.nsf enthalten ist.

Vor dem strleft alles mit Lcase umwandeln, ist auch nicht gut, weil dann anstelle von test\Test.nsf test\test.nsf zurückkäme.

Deshalb

If Left (Lcase ("C:\Notes\data\test\Test.nsf"), Len ("C:\Notes\Data\")) = Lcase ("C:\Notes\Data\") Then
   filepathkorrekt = Mid ("C:\Notes\data\test\Test.nsf", Len ("C:\Notes\Data\") + 1)
End If

Falls im Directory nur C:\Notes\Data steht, bekommt man ein \test\Test.nsf zurück, deshalb zuletzt noch ein

Do While Left (filepathkorrekt, 1) = "\"
   filepathkorrekt = Mid (filepathkorrekt, 2)
Loop

Das ganze packt man sich noch als wiederverwendbare Funktion in eine zentrale Bibliothek und hat dann m.E. alle Eventualitäten abgefrühstückt (außer, dass statt \ ein / verwendet wird, habe ich aber noch nirgends gesehen).

Soweit mein Beitrag zum Wochenende, wünsche ein angenehmes ...

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #9 am: 21.09.12 - 16:40:23 »
Danke fürs aufdröseln...
Aaaber: Wenn man mit Verzeichnislinks arbeitet, dann hilft das alles nix.
Dann steht im FilePath sowas:

E:\AusgelagertesData\development\test.nsf

im Data- Verzeichnis ist dann ein Textfile "development.dir" mit dem Inhalt:
E:\AusgelagertesData\development\

und @DbName würde liefern "development\test.nsf"

Mit Bordmitteln kriege ich das Ergebnis von @DbName so nicht reproduziert... Da müsste ich schon jede Menge Voodoo anwenden...

Also: Danke für die Anteilnahme, aber mein Problem lässt sich damit wohl nicht lösen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #10 am: 21.09.12 - 16:47:56 »
Hallo Tode

In der Notes.ini ist doch auch der Notes DataPfad gespeichert (Directory)
Dann einfach diesen Wert von NotesDatabase.Filepath "subtrahieren"

Man sollte vorher alles lesen....
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #11 am: 21.09.12 - 17:23:13 »
Ihr arbeitet bei lokalen Datenbanken mit Directory-Links? Auf dem Server kann ich das ja verstehen, und da liefert Filepath das richtige zurück, aber welchen Sinn macht das lokal? Roaming-User mit lokal identischen Datenbanken?

Habe jetzt mal den Tipp von marschul ausprobiert, an den ich auch schon gedacht hatte. Das hier funktioniert bei mir

Sub Initialize
   Dim db As New NotesDatabase ("", "anderedb.nsf")
   Dim doc As New NotesDocument (db)
   Dim r As Variant
   r = Evaluate (|@Subset (@DBName; -1)|, doc)
   MsgBox r (0)
End Sub

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #12 am: 21.09.12 - 17:50:08 »
Ganz verstehe ich es auch noch nicht (hab schon Feierabend  ;))  aber bei strleft kann man als Parameter angeben,  dass Groß / Kleinschreibung ignoriert wird.

Gruß Roland
Roland Praml

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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @Subset( @DBName ; -1 ) <> NotesDatabase.FilePath
« Antwort #13 am: 22.09.12 - 07:51:15 »
Es geht hier im meinen.Entwickler-Pc. Hier habe ich fast alle Unterverzeichnisse von Data per Dir- Link in ein anderes Verzeichnis umgeleitet.

Welchen Sinn hat das?
Nun: "Früher" habe ich mit den verschiedensten Clients parallel entwickelt (Version 6, Version 7, Version 8.5). Und damit ich auf jede Schablone von jedem Client zugreifen konnte, habe ich mir damals dieses Konstrukt ausgedacht. Ausserdem macht das die Datensicherung wesentlich einacher, wenn alle Entwicklungen - Egal mit welchem Client sie gemacht wurden- in einem bestimmten Ordner (+Unterordner) liegen.

Heute arbeite ich zwar fast ausschliesslich mit dem 8.5er Designer (alle Kunden sind auf 8.5),
Aber die Struktur habe ich beibehalten.

Im Zuge der Entwicklung einer universellen Symbolleiste, die so Funktionen wie "Vergleiche zwei Dokumente", "exportiere die selektierten Dokumente als xml", "zeige mir den Dateipfad, die Replik- id der aktuellen db oder die universalid, die noteid des aktuellen Dokuments in nem prompt zum schnellen kopieren" u.v.m. Muss ich mir dem Pfad zur Tools- Datenbank irgendwo merken. Und da es in jeder beliebigen Datenbank funktionieren soll, ist dieses "irgendwo" eben die notes.ini...

Nun zurück zum Thema: das evaluate mit übergabe des docs ist natürlich eine Top- Lösung. Auf sowas simples bin ich nicht gekommen. Klar dass im context des docs bei @Dbname auch dessen Datenbank kommt. Super. Danke!!!

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz