Servus,
ich brauche mal wieder Hilfe.
Ich möchte den Inhalt eines Dokumentes in einem druckerfreundlichen Formular anzeigen. Das Öffnen des Dokumentes im Browser mit der Standardform klappt ohne weiteres. In dieser Form sind aber diverse Elemente (Farbig, Buttons, etc.), die ich nicht drucken möchte. Zusätzlich wird die Form im eigenen Frame innerhalb eines Framesets angezeigt. Und wie der IE so etwas verdruckt, ist ja hinlänglich bekannt.
Daher möchte ich aus der Dokumentenansicht über einen Button ein neues Browserfenster öffnen. Hier soll nun eine andere Form (ohne irgendwelchen Schnickschnack) verwendet werden, damit man das sauber drucken kann.
Also flugs kleine JS Funktion, und los:
function OpenPrintForm(db, ParentUNID) {
window.open('/' + db + '/frmDocumentWebPrint/?OpenForm&ParentUNID=' + ParentUNID);
}
Klappt auch alles, die generierte URL passt soweit, auch die ParentUNID stimmt. Trotzdem werd ich nicht glücklich:
- Lt. Designer-Hilfe kann ich nur ein Dokument in einer bestimmten Form öffnen, wenn ich irgendwie Vererbung nutze. Mache ich das so wie in der Hilfe beschrieben, öffne ich tatsächlich ein neues Browserfenster und die angegebene Form wird auch verwendet. Nur leider sind alle Felder leer, nur statische Elemente (Tabellen, Feldnamen, etc.) sind sichtbar. Für den Notesclient hatte ich diese Form mit berechneten Feldern erstellt. Klappt im Notesclient wunderbar. Nur im Browser sind alle Felder leer.
Bin nun langsam ratlos - dass muss doch möglich sein, oder?
Gruß
Karsten
Hi,
Nachtrag!
Vergiss diesen Beitrag, Uwe hat das schon beschrieben (ich sollte wirklich die Beiträge vollständig lesen)!
eine viel einfachere Variante:
1. Erstelle eine Maske mit den entsprechenden Feldern (wie auch in deiner Originalmaske), layoute die Maske, Maskenname z. B. PrintForm
2. Erstelle eine Ansicht, Ansichtsname = "print", Liste hier alle Dokumente auf, 1. Spalte zeigt die DocUNID (aufsteigend sortiert), Maskenformel = "PrintForm"
Fertich!
Nun bastle deine JS um:
function OpenPrintForm(db, ParentUNID) {
window.open('/' + db + '/print/' + ParentUNID + '?OpenDocument');
}
Nun wird dein Dokument über die Ansicht "print" aufgerufen und automatisch mit der Maske "PrintForm" gerendert; klarer Vorteil: Keine Vererbungsgeschichten...
Und wenn Du besonders fleißig sein möchtest, dann kannst noch in der Maske PrintForm in den onLoad-Event folgenden Code einpasten:
Damit wird automatisch das Druck-Dialog-Fenster vom Betriebssystem beim öffnen der Seite aufgerufen.
Viel Spaß ;)
Danke Uwe und Ayhan,
habs nun wie empfohlen gelöst. View erstellt und die Form-Formula auf meine Printformulare zeigen lassen. Alles wie gewünscht.
Da in der DB häufig Abbildungen in Sections gepackt werden, sollten diese beim Ausdruck auch erweitert und angezeigt werden. Das ist nun nicht mehr ganz so trivial. Habe dazu folgendes gefunden: http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/30b9ebb8160f458585256ede0047038f?OpenDocument
Allerdings liefert der Domino HTTP-Task abhängig vom verwendeten Browser unterschiedliche Lösungen für die Section-Header. Im IE werden <span> Tags verwendet, im Mozilla u.a. werden Anker geliefert. Daher also nun die angepasste JS Funktion, die erstmal prüft, welcher Browser verwendet wird. Insgesamt also eine nette JavaScript Übung...
Hier nun für Interessierte der gesamte Code:
// Get Numberlist of all sections in document
function expandAll() {
var secList="";
var Browser = navigator.appVersion;
if (Browser.indexOf('MSIE') != -1) {
//found Internet Explorer
var TagArray = document.getElementsByTagName("span")
// loop through all <span> tags
var i = 0;
spanTag = document.getElementsByTagName("span")[i].id;
while (spanTag != "") {
if (spanTag.indexOf('cSec') != -1) {
// found Section
secNum = spanTag.substring(4, spanTag.length);
if(secList=="") {
//first section
secList=secNum;
}
else {
//append Sectionnumber to list
secList=secList + "," + secNum;
}// if
}// if
try {
// at end of <span> array, any access causes an error
spanTag = document.getElementsByTagName("span")[i++].id;
} catch (e) {
spanTag = "";
}
}// while
}// if
else {
//any other Browser (no warranty :))
// Loop through all Anchors with _Section in Anchor.name
for (var i=0; i<document.anchors.length; i++) {
var a=document.anchors[i].name;
if (a.indexOf('_Section') != -1) {
// Found a section. Store its # in secNum
secNum=a.substring(8, a.length);
if (secList=="") {
// this is the first Section found begin the list of sections
secList=secNum;
} // end if
else {
// append additional Section numbers to list of sections
secList=secList+","+secNum;
} // end if...else
} // end if a.indexOf
} // end for loop
}
// Check for 'stop' in QueryString to prevent infinite loop (this is for onLoad execution)
if (window.location.search.indexOf('Stop') == -1) {
return secList;
}
} //end function
function OpenPrintForm(db, UNID, t) {
newwin=window.open('/' + db + '/html/Print/' + UNID + '?OpenDocument&ExpandSection=' + expandAll(), "Print", "top=50, left=50, menubar=yes, toolbar=no, statusbar=no, location=no, scrollbars=yes, resizable=yes");
newwin.print();
}
Gruß & Gute Nacht
Karsten
Moin zusammen,
stimmt Uwe, die <computed values> funktionieren hier wieder. Werde die Form dahin auch wieder reformieren. Ist für mich einfach sauberer in einer reinen Anzeigeform keine RTF zu verwenden.
und hier noch ein Nachtrag.
Wenn ich schon soweit bin, dann möchte ich in meine Ansichtsform auch noch Buttons zum Öffnen und Schliessen aller Sections einbauen. Die Funktion zum Finden aller Sections ist ja schon da (für Aufmerksame: ist im Übrigen in 'GetSections()' umbenannt).
Also zwei einfache Funktionen:
function SectionExpandAll(db, UNID) {
location.href = '/' + db + '/0/' + UNID + '?OpenDocument&ExpandSection=' + GetSections();
}
function SectionCollapseAll(db, UNID) {
location.href = '/' + db + '/0/' + UNID + '?OpenDocument&CollapseSection=' + GetSections();
}
Soweit, so gut. Das Aufklappen funktioniert. Zuklappen allerdings nicht. Der Aufruf der "Printform" wie gehabt funktioniert auch nicht mehr.
Des Rätsels Lösung:
Lovely-Domino liefert (nachdem alle Sections geöffnet sind) nun auch für den Internet Explorer <a> Anker, keine <span> Tags mehr. Verhalten also wie bei anderen Browsern.
Also die Funktion GetSections() dahin ändern, dass zuerst geprüft wird, ob ein IE ruft. Wenn ja, einmal nach <span> Tags suchen. Anschliessend, wenn die Sectionliste noch leer ist auf jeden Fall auch noch nach Ankern suchen (unabhängig vom Browsertyp).
in Pseudocode:
wenn Browser = MSIE {
suche nach <span> Tag
solange spanTag nicht leer {
hole Nummer der Section und hänge an Liste an
}
}
wenn Liste noch leer {
suche nach Anker
solange Anker nicht leer {
wenn Anker eine Section {
hole Nummer der Section und hänge an Liste an
}
}
}
Ist schon immer wieder erstaunlich, wie quer man doch denken muß...
Gruß
Karsten