Domino 9 und frühere Versionen > ND8: Entwicklung

Weblink auf ersten Dateianhang

(1/2) > >>

jr:
Guten Morgen,

mein Kunde hat eine Anforderung von der ich nicht weiß, ob sie so umsetzbar ist. Es geht um folgendes:

In einem Dokument wird in einem RT-Feld eine Datei eingehängt. Normalerweise könne es auch mehrere sein, aber für diesen speziellen Fall ist es immer nur eine Datei. Über einen Browser und verschiedene andere Applikationan kann diese Datei nun einzeln heruntergeladen werden. Hierfür benutze ich die URL

http://server/pfad/datenbank/view/document/$File/dateiname
oder
http://server/pfad/datenbank/_/uid/$file/dateiname

was auch problemlos funktioniert. Dieser Link wird aber von einigen Applikationen gespeichert und an verschiedenen Stellen immer wieder benutzt. Und jetzt soll sich die Datei ändern. Dummerweise wird nicht nur der Inhalt der Datei geändert, sondern auch der Dateiname. So wird zum Beispiel aus der alten Officewelt eine Vorlage als "Vorlage-Version-4.doc" angeboten und später auf das neue Office gewechselt und die Vorlage heißt nun "Vorlage-Version-5.docx". Der Link soll aber trotzdem noch der gleiche sein.

Gibt es da eine Möglichkeit? Innerhalb des Notes-Clients kann ich z. B. automatisch den ersten Dateianhang öffnen. Gibt es so etwas auch für das Web? Oder gibt es Default-Werte für den ersten Dateianhang in der Form

http://server/pfad/datenbank/_/uid/$file/$FirstAttachment

oder so ähnlich  :-\?

Vielleicht musste ja jemand schon eine ähnliche Anforderung umsetzen und hat einen anderen Ansatz.

Bin für jeden Tipp dankbar.


Viele Grüße,

Joachim

pram:
Evtl geht es so (ungetestet):
1. Du erstellst dir eine "launcherView" welche die gewünschten (oder alle) Dokumente enthält.
2. Diese View hat eine Form-Selection Formel, welche eine "launcherMaske" definiert
3. Die Launchermaske macht dann mit @SetHttpHeader/<meta...>/javascript einen Redirect auf:
"/" + @WebDbName + "/0/" +@DocumentUniqueID + "/$file/" + @attachmentNames[1]
(ggf. reicht auch der rel. Pfad @DocumentUniqueID + "/$file/" + @attachmentNames[1])

Das Dokument öffnest du dann mittels
http://server/pfad/datenbank/launcherView/uid?OpenDocument

Gruß
Roland

jr:
Hallo Roland,

vielen Dank für Deine Antwort. Die Idee ist klasse und ich habs gleich mal ausprobiert. Prinzipiell scheint das zu funktionieren, wenn ich auch im Detail noch ein bisschen was machen muss. Ich bin mir aber noch nicht sicher, ob diese Umleitung von den Zielapplikationen erkannt wird, das muss ich dann beim Kunden prüfen.

Hier meine Umsetzung:

1. Eine Ansicht mit den Dokumenten und einer Link-Spalte. Eine Maskenformel "WebOpen" und der Link wird wie folgt generiert (sKey ist ein Primärschlüssel):
   "[" + "<a href='" + "viewLookupByKey/" + sKey + "?OpenDocument" + "'>" + sTitle + "</a>]"

2. Maske WebOpen mit folgendem Code im HTML Head Content:
   url   := @Text(@DocumentUniqueID) + "/$File/" + @Subset(@AttachmentNames; 1);
   "<script language='JavaScript' type='text/javascript'>window.open('" + url + "', '_self');</script>"

   oder alternativ

   "<meta http-equiv='refresh' content='0; " + url + "'>"

Klick auf den Link bringt öffnet sofort den "Datei speichern"-Dialog im Browser. Bei der meta-Variante erscheint im Browser noch das Dokument selbst (was nur aus dem Dateianhang besteht), was ich eigentlich vermeiden möchte.

Jetzt gibts aber noch folgendes kleine Problemchan: Bei a href ohne target öffnet er die leere Seite (im Prinzip die Maske WebOpen) und die Ansicht ist weg. Mit target=_blank macht er eine neue Seite auf. Dort wird dann der "Datei speichern"-Dialog angezeigt, aber das Fenster bekomme ich nicht mehr weg. Wenn ich im HTML Head Content noch ein "opener.close()" hinzufüge, erscheint der Dialog erst gar nicht, sondern öffnet kurz das Fenster und schließt es gleich wieder. Wenn ich im window.open ein anderen target angebe, dann will er einen Popup öffnen und das sperrt der Browser. Hab noch keine sinnvolle Lösung gefunden, aber das sind nur Kleinigkeiten und ist sicher irgend wie hinzubekommen.

Das größere Problem ist die Umleitung. Ob mit <meta http-equiv...> oder window.open, beides sind Umleitungen auf eine zweite Seite und ich vermute, dass das Zielprogramm einfach den HTML-Code ausliest. Aber wie gesagt kann ich das erst beim Kunden testen. Auf jeden Fall ein super Ansatz und jetzt heißt es für mich "mach was draus.." ;-)

Nochmals vielen Dank,

Joachim

pram:
du könntest noch versuchen, wie ich bereits angemerkt habe, ein Redirect über HTTP-Header auslösen, das müsste mit
@setHTTPHeader("Location","/"+@webDBName....)
gehen, das wäre m.E. die sicherste Variante.

Gruß
Roland

jr:
Danke für den Tipp. Ich werde alle Varianten durchtesten.

Gruß,

Joachim

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln