Autor Thema: Web: Dokument mit bestimmter Form anzeigen  (Gelesen 2784 mal)

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Web: Dokument mit bestimmter Form anzeigen
« am: 24.01.07 - 18:01:00 »
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:
Code
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

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #1 am: 24.01.07 - 20:19:45 »
Das ist möglich und Dein URL sieht auch völlig korrekt aus
und sollte genau das machen, was Du erwartest.
Wir nutzen hier exakt analoge URLs und die tun's problemlos.

Dein URL
window.open('/' + db + '/frmDocumentWebPrint/?OpenForm&ParentUNID=' + ParentUNID);

hat zwar einen Mini-Kosmetikfehler,

- der Slash zwischen ...Print/?OpenForm... gehört da nicht hin
  sondern es braucht nur ...Print?OpenForm... heißen

daran liegt es aber nicht, das habe ich hier mal ausprobiert und es klappt trotzdem.

Wenn etwas mit der UNID nicht stimmen würde, kommt eine Erroranzeige beim Öffnen der neuen Maske, also scheint das bei Dir auch ok zu sein..., dito bei Lesezugriffsschutz.

Das Dokument muss natürlich vorher gespeichert sein...
und es muss aus der gleichen Datenbank kommen.

Kann ja fast nur an den Feldern in der neuen Maske selbst liegen, aber da muss ja eigentlich nur noch die Berechnungsformel oder der Vorgabewert so heißen, wie das Feld im Parent-Dokument.

Der Ansatz und der URL sind also - so gesehen - völlig richtig...
und in der Praxis funktioniert das auch, zumindest hier, sorry.
Aber es kann ja auch schon mal helfen, das zu wissen.



Alternative  Möglichkeit:

Du kannst auch das bestehende Dokument direkt öffnen und nutzt - analog wie in Notes - eine Maskenformel in einer Ansicht. Du brauchst dazu eine Ansicht mit Maskenformel auf die Druckmaske (z.B. "AnsichtDM").

Das Dokument öffnest Du im Web über diese Ansicht per URL:

server/db/AnsichtDM/DokumentKey?opendocumemt bzw. ?editdocument

Da Du die UNID des Dokuments ja bereits im Zugriff hast, kannst Du die AnsichtDM in der ersten Spalte  nach UNID sortieren und als DokumentKey die UNID in den URL nehmen. Die Technik ist zu vergleichen mit einem DBlookup, es wird die Ansicht aus dem URL gesucht und danach der DokumentKey aus der URL in der ersten sortierbaren Spalte gesucht. Die Maskenformel wird im Web genauso ausgewertet wie in Notes - und das Dokument öffnet sich in der Druckmaske.

Gruß,
Uwe

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #2 am: 24.01.07 - 21:05:22 »
Vielen Dank für deine Hilfe,
es stimmt, es war soweit alles korrekt. Mit einer Ausnahme:
In meiner Printform müssen alle Felder natürlich "echte" Felder sein, nicht nur <computed text> wie in meiner Notesform.

Gruß
Karsten

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #3 am: 25.01.07 - 15:25:15 »
 :-\ Servus,
das Thema ist leider noch nicht ganz erledigt.
Das Vererben und Anzeigen in eine neue Form klappt schon ganz gut, aber nur fast.
Der Haken ist, dass der Inhalt eines RTF nicht vollständig in das erbende Feld übernommen wird.
Auch werden eingebettete Images überhaupt nicht übernommen. Es wird zwar ein <img> Tag erzeugt, nur leider ohne Inhalt.

Gibt es da Limits für das Vererben aus RTF? Und was soll das mit den Bildern, die sollen natürlich ebenfalls gedruckt werden. Bisher habe ich noch nichts gefunden.  ???

Gruß
Karsten

Offline Ayhan

  • Aktives Mitglied
  • ***
  • Beiträge: 102
  • Geschlecht: Männlich
  • Geht immer!
    • fabrique d' images ebusiness GmbH
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #4 am: 25.01.07 - 15:37:45 »
Hi,
Code
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:
Code
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:
Code
window.print();
Damit wird automatisch das Druck-Dialog-Fenster vom Betriebssystem beim öffnen der Seite aufgerufen.

Viel Spaß  ;)

« Letzte Änderung: 25.01.07 - 15:45:12 von Ayhan »
Ayhan

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #5 am: 26.01.07 - 00:36:08 »
Zitat
Das Vererben und Anzeigen in eine neue Form klappt schon ganz gut, aber nur fast.

Ahhh - Du willst natürlich wieder gleich die ganze Hand...

Please remember:
Bei Notes bekommst Du IMMER nur 99 Prozent !

Dein Notes-Auto fährt super gut - wie auf der "Autosphere" präsentiert - aber daheim merkst Du, es fährt nur vorwärts, den Rückwärtsgang haben sie vergessen...
Gute Notes-Programmierer müssen dann Programme bauen, mit denen man auch nur mit dem Vorwärtsgang in eine Parklücke kommt...

Dein Notes-Flugzeug überzeugt Dich mit besten Flugeigenschaften und Du bist begeistert - aber oh Schitt - es kann nicht landen. Landung erst in der nächsten Version - oh oh...

Die Notes-Table-Dancerin begeistert Dich wie keine andere - aber sie wird NIEMALS die letzte Hülle fallen lassen -
das macht den "Reiz" von Notes aus ! Das macht Notes, damit es IMMER spannend bleibt und NIE langweilig wird !

Sonst könnte es ja jeder...

Eigentlich wollte ich nur sagen:
Nix Richtext und embedded Bilder mit ParentUNID,
zumindest nicht als serienmäßiger Rückwärtsgang, das sind dann teure "Sonderaussattungen" .

Gruß,
Uwe

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #6 am: 26.01.07 - 00:37:02 »
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:
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

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #7 am: 26.01.07 - 00:43:33 »
Uih Uwe,
so spät noch am Helfen? Super Zug von dir!

Aber im Erst, ist klar was du meinst. Aber alle diese fehlenden 1% erkennt man ja immer einmal zu ersten Mal. Und wenn man sich dann erstmal festgebissen hat, ist es häufig zu spät, um wieder umzukehren und sich in Verzicht zu üben. Hoffentlich denkt man dann beim nächsten Mal daran, zum Traumauto auch noch 4 Räder zu bestellen.

Nochmal vielen Dank
Karsten

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #8 am: 26.01.07 - 00:43:53 »
Aber das mit der richtigen Darstellung des Richtext und den embedded Bildern geht doch auch mit dieser Alternative nicht ?
Ich hab's hier gerade probiert... ich kriegs auch damit nicht hin.

Klappt das bei Dir ?

Gruß,
Uwe


Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #9 am: 26.01.07 - 00:45:57 »
Hi nochmal,
embedded images funktionieren auf diese Weise sehr gut.
Richtext ist häufig etwas merkwürdig formatiert. Da muss ich wohl einige Formatierungsstandards entwickeln und festlegen, damit es im Notesclient und im Browser vernünftig aussieht.

Karsten

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #10 am: 26.01.07 - 01:00:05 »
Jupp, jetzt hab ich's auch.
Je nachdem, wie man die Bilder einfügt, klappts.

Übrigens gehen über diesen Weg auch die <computed values>,
hier (in der Printform) sind also nicht unbedingt Felder nötig.

Gute Nacht.
Uwe

Offline kdreier

  • Frischling
  • *
  • Beiträge: 32
  • Geschlecht: Männlich
Re: Web: Dokument mit bestimmter Form anzeigen
« Antwort #11 am: 26.01.07 - 08:45:22 »
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:
Code
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:
Code
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz