Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: skywook am 17.10.04 - 20:52:47

Titel: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 20:52:47
Hallo,
kann ich ein Dokument aus dem Backend drucken. Finde die Print-Methode nur fürs Frontend (NotesUIDocument).
Für einen Tipp wäre ich dankbar.
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 20:54:18
Drucken ist definitiv eine Frontend-Angelegenheit. Aber vielleicht gibt es Alternativen, also sag mal an, wo, wann, wie und warum gedruckt werden soll.
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 17.10.04 - 20:58:13
Drucken ist definitiv eine Frontend-Angelegenheit.

Zumindest bei Notes und wohl 99% aller anderen Software für Personal Computer.
Jens weitere Frage nach dem Warum und den weiteren Infos könnte aber wirklich zu Alternativen führen.

Nicht zu vergessen: Notes wurde ausdrücklich NICHT für das Drucken gemacht. Daran hat sich bis heute praktisch wenig geändert  ;)

Bernhard
Titel: Re: Drucken im Backend
Beitrag von: Heiggo am 17.10.04 - 21:01:59
Nicht zu vergessen: Notes wurde ausdrücklich NICHT für das Drucken gemacht. Daran hat sich bis heute praktisch wenig geändert  ;)

Ich hatte schon ernsthaft befürchtet, das der ermahnende Zeigefinger von Bernhard nie wieder auftaucht  ;D
Irgendwann fange ich tatsächlich an, meine Nutzer auf deine Beiträge zu schubsen. Dann könnte man mir endlich glauben, das ich nicht alleine in der Welt stehe.

Heiko, der am liebsten beim Start von Notes sämtliche Druckermappings unterdrucken, äääh unterdrücken würde
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 21:06:02
** smile **

Heikos Privatsupporter :)
Titel: Re: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 21:12:50
Mein Ansatz war falsch.
Aber hier mein Problem: In einer Maske habe ich eine versteckte Tabelle. Kann ich diese drucken (im Frontend) ohne das ich die Tabelle im Dokument sichtbar mache?
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 17.10.04 - 21:16:54
Erstens: Warum versteckst Du die Tabelle, wenn sie dann gedruckt werden kann ?
Zweitens: Klar, das geht, wenn Du zum Drucken die Maske wechselst.

HTH,
Bernhard
Titel: Re: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 21:24:20
Die Tabelle hat Felder die über eine Dialogbox bearbeitet werden. Der User soll den Tabelleninhalt nur über die Dialogbox sehen bzw bearbeiten. Ausser beim Druck soll diese mit ausgedruckt werden. 

Bernhard, wie meinst Du das mit dem wechseln der Maske vor dem Druck?
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 21:27:31
Dafür gibt es hier irgendwo im Board Beispielcode von mir .....
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 21:30:55
Druckformular wechseln wurde in diesem Thread (http://www.atnotes.de/index.php?topic=12734.0) abgehandelt, der Code geht auch in R5
Titel: Re: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 21:48:52
Wo wie ich das gelesen habe gehts das aber nicht mit Dokumenten die schon geöffnet sind. Ist das richtig?
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 21:59:16
Natürlich geht das mit Dokumenten, die schon geöffnet sind. Der zitierte Code steht etwa so bei mir in einem Buhtong, der aus dem geöffneten Doc heraus ausgelöst wirt.
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 17.10.04 - 21:59:57
@skywook:
Nein, das ist nicht richtig. Für die Anpassung des Codes ist lediglich die Instantiierung des Backend-Dokuments erforderlich. Der Rest funktioniert darüber und über den Umgang mit dem darüber erzeugten FrontEnd-Dokument. Absolut kein Problem. Jens' Code funktioniert - entsprechend angepasst - auf jeden Fall.

HTH,
Bernhard
Titel: Re: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 22:53:36
Habe Code angepasst. Aber leider erhalte ich die Fehlermeldung: Object variable not set. Wo steckt denn der Fehler? Der Button ist im Dokument das mit gewechselter Maske gedruckt werden soll.

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Doc As NotesDocument
   Set uidoc = workspace.CurrentDocument
   Set Doc=uidoc.Document
   doc.Form="DruckMaske"
   Call workspace.EditDocument(False,Doc)
   Set uidoc=WorkSpace.CurrentDocument
   Call uidoc.Print( 1 )
   Call uidoc.close
End Sub
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 17.10.04 - 22:56:13
Dann schalte mal den Debugger ein und sag an, in welcher Zeile der Fehler auftritt. Möglicherweise siehst Du das Problem auch schon selber im Debugger
Titel: Re: Drucken im Backend
Beitrag von: skywook am 17.10.04 - 23:02:05
Beim "Call uidoc.Print( 1 )" wird die Fehlermeldung ausgegeben.  Aber leider weiss ich nicht warum. "Set uidoc=WorkSpace.CurrentDocument" füllt doch uidoc wieder. Oder?
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 18.10.04 - 07:03:31
Eigentlich schon, erscheint denn das Dokument mit der Print-Maske oder nicht?
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 18.10.04 - 10:37:22
Wo befindet sich denn Dein Button ?
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 18.10.04 - 11:06:12
Jo, das ist wohl die entscheidende Frage, obwohl ja eigentlich nach dem WS.EditDocument das CurrentDocument in jedem Falle existieren sollte .... es sei denn, dieser Aufruf geht ins Nirvana
Titel: Re: Drucken im Backend
Beitrag von: skywook am 18.10.04 - 23:23:55
Der Button ist im Dokument. Die Printmaske erscheint aber mehr tuts nicht.
Titel: Re: Drucken im Backend
Beitrag von: TMC am 18.10.04 - 23:31:14
Klingt seltsam. Darfst Du Drucken, also ist kein $KeepPrivate vorhanden?

Ich habe hier in einer App folgenden funktionierenden Code:
Code
	Dim session As New NotesSession	
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uiws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument	
	Dim uidocTempPrint As NotesUIDocument	
	Set db = session.CurrentDatabase
	Set uidoc = uiws.CurrentDocument
	Set doc = uidoc.Document
	doc.Form = "DruckMaske"
	doc.~$KeepPrivate = ""
	Set uidocTempPrint = uiws.EditDocument( False, doc, True)
	Call uidocTempPrint.Print
	Call uidocTempPrint.close

Unterschied zu Deinem Code:
a) ich leere $KeepPrivate
b) Set uidocTempPrint = uiws.EditDocument( False, doc, True)  anstatt Deinem Zweizeiler
Titel: Re: Drucken im Backend
Beitrag von: TMC am 18.10.04 - 23:35:40
Nachtrag:

Danach bitte wieder "aufräumen", also zum Schluss noch ein:
doc.Form = "frmStandard"

Hintergrund: Könnte sein, dass User nach dem Printen das Dok weiterbearbeitet und speichert, und da soll natürlich dann nicht die PrintForm als Standardform verbleiben.
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 18.10.04 - 23:40:28
Es wird an der doppelten Verwendung des uidoc liegen - kann das aber gerade nicht verifizieren.

Nimm mal folgenden einfacheren Code:

Code
Set doc = ws.CurrentDocument.Document
	
	doc.Form = "Druckmaske"
	Set uidoc = ws.EditDocument( False, doc, True)
	Call uidoc.Print (1)
	Call uidoc.close

@Matthias: Das mit dem Rücksetzen des Form-Items ist unnötig, da der Anwender keine Chance hat, das Doc zu bearbeiten - das fällt nach dem Drucken wieder zu und ist gegen das Versetzen in den EditMode durch die entsprechenden Parameter geschützt.

HTH,
Bernhard
Titel: Re: Drucken im Backend
Beitrag von: TMC am 18.10.04 - 23:47:10
@Matthias: Das mit dem Rücksetzen des Form-Items ist unnötig, da der Anwender keine Chance hat, das Doc zu bearbeiten - das fällt nach dem Drucken wieder zu und ist gegen das Versetzen in den EditMode durch die entsprechenden Parameter geschützt.

Probiere es aus Bernhard:
In dem Beispiel wird im BackendDoc, welches über das *Current* Frontend-Doc instantiiert wurde, ein Item gesetzt.
Ich würde mich schwer täuschen, würde das Setzen des Items nicht verweilen, solange das Current-UIDoc offen ist. Folgt also nach dem Print-Buthong ein Klick auf einen weiteren Buthong, der z.B. erneut das UIDoc ins Backend instantiiert und dort dann ein call NotesDocument.Save macht, dann wird die "DruckMaske" als neue Form gesetzt.

Ist mir auch schon so passiert, daher mein expliziter Hinweis darauf.
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 18.10.04 - 23:53:50
Ich habe das Procedere mit dem Code wie oben gepostet bei mir mehrfach zu laufen. Da kommen etliche tausend Anwender zusammen. Da hätte sich schon mal wer beschwert  ;)

Wie gesagt - das uidoc fällt nach dem Drucken sofort zu. Damit entfällt auch das das Backend-Document.

Wird natürlich entweder doc oder uidoc irgendwie im Focus behalten - selbstverständlich muss dann Form wieder zurückgesetzt werden. Nicht aber im Kontext von skywook oder meinem Code.

Bernhard
Titel: Re: Drucken im Backend
Beitrag von: TMC am 18.10.04 - 23:59:55
Bernhard,
meine Bemerkung war auch auf meinen Code bezogen (da direkt darauf gefolgt und nicht auf Deinen: geht auch gar nicht: Deiner kam zeitlich später  ;D )

Nachdem ich bei mir ein 2. UIDoc instantiiere, wird das *Current* UIDoc auch NICHT geschlossen - sondern nur das 2. UIDoc. Daher verbleibt der neue Iteminhalt hier im Beispiel.

Bei Dir kann das logischerweise nicht zutreffen, da Du uidoc neu zuordnest.

Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 19.10.04 - 00:04:12
Jo, aber auf den Fall hatte ich ja auch hingewiesen. Und genau um diesen Fall zu vermeiden, arbeite ich ja auch mit dem von mir genannten Verfahren, der selbst ein geöffnetes UIDoc nicht anfasst  ;)

Bernhard
Titel: Re: Drucken im Backend
Beitrag von: TMC am 19.10.04 - 00:11:47
Bernhard, ich habe jetzt auch Deinen Code getestet.

System: R5.0.11

Geöffnetes Dok.

1. Man betätigt diesen Button:
Code
	Dim session As New NotesSession	
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uiws As New NotesUIWorkspace
	Dim uidocTempPrint As NotesUIDocument	
	Set db = session.CurrentDatabase
	Set doc = uiws.CurrentDocument.Document
	doc.Form = "frmPrint"
	Set uidocTempPrint = uiws.EditDocument( False, doc, True)
	Call uidocTempPrint.Print
	Call uidocTempPrint.close

2. Man betätigt diesen Button:
   
Code
Dim session As New NotesSession	
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uiws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument	
	Dim uidocTempPrint As NotesUIDocument	
	
	Set db = session.CurrentDatabase
	Set uidoc = uiws.CurrentDocument
	Set doc = uidoc.Document
	
	doc.Subject = "HALLO WELT"
	Call doc.Save(True,True)

Problem: Es wird definitiv so die Druckmaske "frmPrint" beibehalten und gespeichert (!!!), zumindest in meiner Test-DB !
Hat mich auch gewundert, denn so unterschiedlich sind die Codes nicht auf den 2. Blick.
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 19.10.04 - 00:27:15
Matthias, das muss ich mir morgen (äh, heute) nochmal in Ruhe anschauen. Ich drücke meinen Standard-Druck-Buhtong (Doc im EditMode !), dann Strg-S - und das Form-Item bleibt unberührt.
Bin wohl zu müde heute ... Aber den Zusammenhang kriegen wir schon noch heraus ! Morgen schlage ich mir vermutlich vor die Stirn.

Bernhard
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 19.10.04 - 08:40:08
Streich aber vor dem Schlag die Haare zur Seite - sonst gibts Dellen in die Stirn .....  ;D
Titel: Re: Drucken im Backend
Beitrag von: TMC am 19.10.04 - 22:53:16
Streich aber vor dem Schlag die Haare zur Seite - sonst gibts Dellen in die Stirn .....  ;D
;D

Hast Du schon ein Ergebnis Deiner Tests, Bernhard? Wie gesagt, via Backend gespeichert, werden bei mir auch die zuvor via Backend gesetzten Items dann mitgespeichert. Imho eigentlich auch nur konsequent. Habe jetzt nicht getestet, wie es sich verhält wenn man das Objekt (Backend-Doc) löscht - eigentlich dürfte dann nix mehr passieren.

Matthias
Titel: Re: Drucken im Backend
Beitrag von: TMC am 19.10.04 - 23:09:43
Gerade getestet: selbst ein doc Delete bringt nix, Maske wird neu gesetzt.

Ich habe das Procedere mit dem Code wie oben gepostet bei mir mehrfach zu laufen. Da kommen etliche tausend Anwender zusammen. Da hätte sich schon mal wer beschwert ;)
Mag vielleicht auch Glück gewesen sein, dass darauf noch nie ein Script-Code mit doc.save gefolgt ist.

Ich habe mal eine Test-DB attached. Selbst ein "Delete doc" bringt nix, es wird die Form geändert beim betätigen des 2. Buttons nach dem Print (wenn Dok im Lese(!)modus)
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 19.10.04 - 23:20:48
Hallo, Matthias (& All),

ich arbeite daran. Es ist ja wirklich so: Die Form muss eigentlich zurückgesetzt werden (unbedingt - und wenn, es schadet auf jeden Fall nix).

Momentan kann ich nicht schauen, warum mein Code so "wunderbar" funktioniert (und er ist wirklich nicht auszutricksen, siehe mein voriges Posting). Ich sehe das als äusserst peinlich (für mich). Muss mal ins QuerySave schauen oder so  ;D

Ich muss aber gerade Code von einem A****loch-Programmierer reparieren, der der Meinung war, in einer Applikation, die bekanntermassen von Portugal bis Australien läuft, einen Datumwert in einem Textfeld abzulegen. Zwischen
"19.10.2004",
"19/10/2004" und
"10/19/2004"
gibt es ja gewisse Unterschiede. Leider hat der Volltrottel darauf bei der späteren Auswertung keinerlei Rücksicht mehr genommen. Datum wird "down under" generiert und in "sverige" ausgewertet - tolles Ergebnis.
Wenn man dann noch sieht, was der Trottel dann auf seine Rechnung geschrieben hat ... Der Kunde konnte die Tretmine ja nicht ahnen !

Sowas von stinkesauer,

Bernhard

PS: Würde mich jetzt lieber um das "Wunder" des Druckbuttons kümmern. Geld ist nicht alles ... Wird noch eine lange Nacht !
Titel: Re: Drucken im Backend
Beitrag von: TMC am 19.10.04 - 23:38:08
in einer Applikation, die bekanntermassen von Portugal bis Australien läuft, einen Datumwert in einem Textfeld abzulegen.

Stirbt Dummheit nie aus? So wie Du schreibst hat er wohl auch nur @Text(@Today) oder sowas verwendet, womit eine Zerlegung anhand z.B. 3stelligem Monatsnamen wohl auch völlig entfällt.
Viel Erfolg bei der Rekonstruktion der Daten, wenn Du Hilfe brauchst für die Vor-Ort-Rekonstruktion via Befragung der User vor Ort in Australien, dann sag Bescheid  ;D
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 19.10.04 - 23:55:58
Das ganze AtNotes-Forum kommt auf Kosten des Kunden mit ....  ;D
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 20.10.04 - 00:09:03
Stirbt Dummheit nie aus? So wie Du schreibst hat er wohl auch nur @Text(@Today) oder sowas verwendet, womit eine Zerlegung anhand z.B. 3stelligem Monatsnamen wohl auch völlig entfällt.
Viel Erfolg bei der Rekonstruktion der Daten, wenn Du Hilfe brauchst für die Vor-Ort-Rekonstruktion via Befragung der User vor Ort in Australien, dann sag Bescheid  ;D

Wenn es nur das wäre ... Er (nein, sie - Mehrzahl - da war eine ganze Truppe dran !) dealte mit LS und @functions immer mit dem Textfeld.
"Netter Nebeneffekt": Ohne AM / PM ist 8 Uhr 08:00:00, mit 8:00:00. Was ist jetzt kleiner als 12 Uhr ? Das wird dann in Ansichten abgefragt ...

@Semeaphoros: Wenn sich dieser Trip ergibt, bist Du dabei (und Matthias auch). Aber auf jeden Fall nicht das ganze Forum ... Nur die, die mit ihrem Herzblut unterschreiben: Ich werde immer und nur und nur und nur Datumswerte in Datumsfeldern und Zahlen in Zahlfeldern abspeichern. So, wie das in anderen Programmierspachen ja auch läuft.

Und die Anzahl der Leute, die soweit denken (kann), dürfte die Runde 'gen Australien klein werden lassen ...
Sorry, bin aber heute bös' drauf - aus berechtigtem Grunde.

Bernhard
Titel: Re: Drucken im Backend
Beitrag von: Semeaphoros am 20.10.04 - 00:23:15
Das sind ja Aussichten :)
Titel: Re: Drucken im Backend
Beitrag von: koehlerbv am 20.10.04 - 00:42:57
Die in Frage kommenden losen dann: Australien, Neuseeland, Deutschland, Belgien, Portugal, Schweden (ich, ich, ich !), Finnland, Kroatien, Frankreich, Schweiz, Österreich, ...)

Bernhard