Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Raymond am 05.04.07 - 15:45:28

Titel: @DbName gibt kein Server zurück...
Beitrag von: Raymond am 05.04.07 - 15:45:28
Hallo zusammen

ich debugge gerade eine Web-Applikation. Dort wurde @subset(@dbname;1) verwendet um den Servernamen zu erhalten und basierend auf diesem Wert geschehen Lookups in andere Datenbanke etc. Also Notes Standard.

Plötzlich funktionierten die Lookups nicht mehr und siehe da, beim Debuggen bemerkte ich, dass das Feld Server nicht berechnet wurde, beziehungsweise "@Subset(@DbName;1)" keinen Rückgabewert hatte. Wie gesagt, ich bin nicht Lokal, dies ist ein produktiver Lotus Domino Server Version 7  ???

Hat jemand von euch sowas schon gesehen bzw. eine Idee, was die Ursache sein könnte?

Besten Dank für alle Tipps

Gruss
Ray
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: spamSTOP am 05.04.07 - 18:37:32
versuch mal @Servername

Gibt den Namen des Servers zurück, auf dem sich die aktuelle Datenbank befindet. Wenn die Datenbank lokal ist, wird der Benutzername zurückgegeben.
Hinweis  Diese @Funktion gibt es ab Version 6.
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: Raymond am 09.04.07 - 22:04:02
Danke, natürlich könnte ich den ganzen Code umschreiben. Das wäre aber wohl mehr Sympthombekämpfung. Ich würde aber gerne die Ursache finden. Der anhin eingesetzte Code hat während mehreren Jahren einwandfrei funktioniert. Ich möchte rausfinden, warum @Servername plötzlich den Servernamen-Teil nicht mehr zurückgibt...

Vielleicht hat sonst noch jemand die gleiche Erfahrung gemacht.

Gruss
Ray
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: flaite am 10.04.07 - 07:36:36
Falls ich mich recht erinnere, gibt @dbName für den ersten Wert der Ergebnisliste nie etwas zurück. (Kann mich irren).
Hiess diese seit Notes4 in der Webentwicklung sehr gebräuchliche Formel zur Generierung von nicht-hart-kodierten URLs nicht:
Code
@Subset(@DbName;-1);
(das -1 ist wichtig). Das funktioniert auch. Eben ausprobiert. Guck besser noch mal bei den Formeln nach, die schon vorher in der Datenbank funktioniert haben. Vielleicht hast du einfach das - übersehen.
Oder noch besser:
Code
@ReplaceSubstring(@Subset(@dbName;-1); "\\";"/"); 
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: Raymond am 10.04.07 - 10:25:36
Danke für die Antort. Klar, um den Server unabhängig den Db-Pfad zu erhalten, kann man deinen Code verwenden.

Gemäss Help sollte @DbName aber wirklich zwei Werte zurückgeben.

Zitat
Syntax
@DbName
Return value
server ; path
Text list with two elements


Code
@Subset(@DbName;-1);
gibt den Pfad zurück

Code
@Subset(@DbName;1);
sollte den Servernamen zurückgeben, und genau das funktioniert nicht mehr.


Als Workaround verwende ich jetzt
Code
@ReplaceSubstring( @UpperCase(@Name([Abbreviate]; @ServerName));"\\"; "/" )

Gruss
Ray
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: flaite am 10.04.07 - 11:22:14
IMHO hat das im Web nie funktioniert. Zumindest mit den Versionen 4 und 5 nicht.
Du kannst das aber so machen:
Code
"/" + @ReplaceSubstring(@Subset(@dbName;-1); "\\";"/") + "/" + dieFormOderWasImmer. 
Bei solchen relativen Links nimmt Domino immer den aktuellen Server und das ist in der Regel was du willst.
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: Raymond am 10.04.07 - 11:34:01
Hallo Axel

Danke für die Infos. Die DB wurde von mir debugged und nicht entwickelt weshalb ich davon ausging, das das versteckte Feld "Server" mit eben dieser Formula auch mal korrekt abgefüllt wurde...
Möglicherweise war das aber wirklich nie der Fall. Wie wir nun rausgefunden haben wurde der Fehler in der Applikation durch ein fehlendes DB-Config-Dokument verursacht und nicht durch den fehlenden Servernamen.

Nochmals vielen Dank für alle beigesteuerten Antworten/Vorschläge

Ray
Titel: Re: @DbName gibt kein Server zurück...
Beitrag von: flaite am 11.04.07 - 07:44:20
Es ist aber eigentlich eine schlechte Praxis den letztlich hartkodierten Servernamen irgendwo wie auch immer zu pflegen.
Ein solcher Link "/myApp.nsf/view1/doc3?openDocument" geht dank des ersten slashes immer gegen den Server, auf den er geklickt wird. Zur Verlinkung von Notesanwendung braucht es deshalb den Servernamen gar nicht.
Ich hab das in Domino Web Anwendungen immer so gemacht, dass es in allen Dokumenten, in denen Links erzeugt werden, ein Feld baseURL mit der Formel
Code
"/" + @ReplaceSubstring(@Subset(@dbName;-1); "\\";"/") + "/"
gab. Da konnte man die Links auf Dokumente, Views, etc. easy drauf aufbauen.
Unnötige Konfigurationen (wie der hartkodierte Servername) besitzen ein hohes Risiko, doofe Arbeit, Verwirrung, etc. in der Zukunft zu erzeugen.