Autor Thema: [gelöst] verzwicktes Problem mit @Command([EditMakeDocLink])  (Gelesen 4487 mal)

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Hallo zusammen. Ich habe ein auf den erstem Blick sehr einfaches Problem, konnte es aber dennoch bisher nicht lösen.

Situation:
Ich habe ein Hauptdokument aus dem heraus ich ein Tochterdokument (Typ: Antwort) erzeuge. Das Antwortdokument soll eine E-Mail werden und enthält sie klassichen Felder Subject, Body, CopyTo etc. und noch ein paar weitere, die aus dem Mutterdoc übernommen werden bei der Neuanlage. Deshalb trägt es auch das Kennzeichen "...übernimmt Werte des gewählten Doc ...". Im Body des Mails möchte ich nun aber einen DocLink zum Mutterdoc mitsenden und diesen bei der Neuanlage des Antwortdokumentes auch schon mal eintragen. Das Ganze funktioniert mit:

Code
@Command([EditMakeDocLink]) ;
@Command([Compose]; ""; "(Mail)");
@Command([EditGotoField] ; "Body" );
@Command([EditInsertText]; @NewLine + @NewLine );
@Command([EditInsertText]; "DocLink zum Dokument => " );
@Command([EditPaste]) ;
@Command([EditGotoField] ; "SendTo" )

auch einwandfrei.

Wenn das Mutterdoc aber noch nicht gespeichert (und reöffnet) wurde, bekomme ich den sinngemäßen Fehler: "... kein Dokument gewählt ...". Es reicht dann auch nicht aus, dass Mutterdoc zu speichern und es nochmal zu versuchen. Ich muss es speichern, schließen, öffnen und dann klappt es.

Hab es jetzt schon mit

Code
	If uidoc.EditMode = True Then
		Call uidoc.Refresh
		Call uidoc.Save
		Call uidoc.Close(True)
		
		Set newuidoc=workspace.editdocument(True,doc)
		Call workspace.ComposeDocument( "", "", "(Mail)" )
	Else
		Call workspace.ComposeDocument( "", "", "(Mail)" )
	End If

gemacht; klappt! Habe aber da das riesen Problem,  dass ich den DocLink nicht in den Body hineinbekomme, wie bei der Formel ... Sowas wie @Command([EditMakeDocLink]) gibt es offenbar nicht in Script. AppendDocLink klappt nicht

Also mir dampft inzwischen die Birne ....
Hat jemand eine Idee??

Vielen Dank im voraus
Alex


« Letzte Änderung: 04.02.13 - 15:01:51 von Alexander 28 »

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #1 am: 04.02.13 - 07:26:57 »
Guten Morgen,

wo erzeugt Dein Script den Doclink ? Den sehe ich nicht.

In solchen Fällen erzeuge ich das Antwortdokument komplett in Script und fülle die relevanten Felder.

CU,
Axel

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #2 am: 04.02.13 - 08:45:55 »
Schau Dir in der DesignerHelp NotesRichTextItem.AppendDocLink und das Beispiel dazu an.

Bernhard

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #3 am: 04.02.13 - 11:42:57 »
ja, habe ich bereits getan, aber bisher keinen weg gefunden, den doclink im body des maildocs sichtbar zu machen, ohne dieses im vorfeld zu speichern. genau das möchte ich aber nicht, da der nutzer im zweifel die mailerstellung doch noch abbrechen möchte. das doc ist aber dann schon da, also müsste ich irgendwie löschen, das widerum erfordert löschrechte in der acl ... soll so auch nicht sein.

kann ich einen doclink im rt field sichtbar machen, ohne dieses zu speichern? meine mal irgendwo hier im forum eine anleitung dafür gesehen zu haben, kann das post aber bei besten willen nicht wiederfinden...

mein code bisher
Code
Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim newuidoc As NotesUIDocument 
	Dim db As NotesDatabase 
	Dim doc As NotesDocument 
	Dim maildoc As NotesDocument 
	Dim rtitem As NotesRichTextItem
	Set uidoc = workspace.CurrentDocument
	Set db = session.CurrentDatabase
	Set doc = uidoc.Document 
	
	Set maildoc = New NotesDocument( db )
	Call maildoc.ReplaceItemValue( "Form", "(Mail)" ) 
	
	Set rtitem = New NotesRichTextItem( maildoc, "Body" )
	
	Call rtitem.AppendText("Link => ")
	Call rtitem.AppendDocLink( doc, "Dokument" )
	
	Call maildoc.MakeResponse(doc)
	
	'muss Speichern wirklich sein ==== ???
	Call maildoc.Save(True,False, True)
	
	Set newuidoc = workspace.editdocument(True,maildoc)	
	Call newuidoc.GotoField("SendTo")

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #4 am: 04.02.13 - 12:04:40 »
Du kannst mit einem versteckten, temporären Dokument arbeiten, dort das Richtextitem befüllen, das speichern und das Richtextitem in Dein neu erstelltes Dokument vor dem Öffnen kopieren. Das temporäre Dokument hebst Du pro User für spätere Verwendung auf (Löschen wirst Du es ja nicht können, denn die Benutzer werden dazu hoffentlich kein Recht haben).

Als Resultat hast Du dann die Möglichkeit, eine Mail als Antwortdokument zu einem Hauptdokument zu erstellen, das dann zu versenden und am Ende das Hauptdokument zu verlassen, ohne es zu speichern. Antwortdokument weg (bzw. ohne Bezug zum Elterndokument), Mail mit Link ins Leere. Willst Du das?

Was spricht denn dagegen, das Hauptdokument, wie im Ursprungspost erwähnt, zu speichern, und notfalls auch zu schließen und wieder zu öffnen (wenn es wirklich nicht anders geht)? Das kannst Du doch automatisiert per Script tun, der Benutzer bemerkt nur ein kurzes Flimmern, wenn überhaupt.

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #5 am: 04.02.13 - 12:54:40 »
Was spricht denn dagegen, das Hauptdokument, wie im Ursprungspost erwähnt, zu speichern, und notfalls auch zu schließen und wieder zu öffnen (wenn es wirklich nicht anders geht)? Das kannst Du doch automatisiert per Script tun, der Benutzer bemerkt nur ein kurzes Flimmern, wenn überhaupt.

so würde ich es gern machen, aber wenn das schließen und reöffnen mache ich mit script, das mail erstelle ich mit fs, eben wegen @Command([EditMakeDocLink]). würde das mail ja auch mit script erstellen, dann sind wir aber wieder dort wo wir am anfang waren weil ich den doclink nicht setzen kann ohne speicherung. ich bräuchte also idealerweise eine kombination aus script fürs reopen und anlegen des mails und dann fs zu setzen des doclinks. habe schon zwei agenten (einen script und den 2. in fs) erstellt, aber wenn ich versuche den 2. agenten aus dem ersten per Call agent.run zu starten klappt es nicht. kriege einen fehler bzgl. ui funktionen nicht möglich !?!?!?!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #6 am: 04.02.13 - 13:05:00 »
Für den Fall, dass das Mail nicht gespeichert / versendet wird oder - vor allem - das Hauptdokument nicht gespeichert wird: Wie willst Du dann den Ablauf der Funktion synchron halten?
Mit Deinem bisherighen Konstrukt wäre es ja auch möglich, das Mail zu versenden, aber das Hauptdokument zu verwerfen ...

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #7 am: 04.02.13 - 13:15:20 »
Ungetestet, könnte aber gehen:

Agent 1 in Script, speichert das aktuelle Dokument, schließt und öffnet es

Agent 2 in Formel, erstellt die Mail

Im Dokument eine Schaltfläche in Formel, die mit @Command ([ToolsRunMacro]) erst Agent 1 und dann Agtent 2 ausführt.

Alternativ, wenn es garnicht zu kombinieren geht, erstelle eine Schaltfläche, um das Hauptdokument anzulegen (Agent 1) und erst danach zeigst Du eine zweite Schaltfläche für Agent 2.

Bin aber sicher, dass es auch mit einer hinzubekommen ist ...

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #8 am: 04.02.13 - 13:19:49 »
@bernhard
ich würde vor dem erstellen des mails das hauptdoc natürlich zwingend speichern, dann reopen und dann das maildoc erzeugen damit die mama im vorhanden ist.

@peter
ja, 2 x @Command([ToolsRunMacro]; ... nacheinander über einen button hatte ich schon probiert, aber das speichern und reopen des mamadocs im ersten agenten klappte damit irgendwie nicht. kann aber auch ein flüchtigkeitsgehler gewesen sein. ich probier das gleich nochmal und melde mich zurück.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #9 am: 04.02.13 - 14:07:56 »
Mit @Formeln in dem Kontext habe ich zu wenig Erfahrung, aber es gäbe noch den (undokumentierten) LS-Befehl
Code
notesRichTextItem.AddLinkByIds( dbReplicaID$, serverHint$, viewUNID$, documentUNID$, comment$ [, HotSpotText$ ])
Dieser prüft nicht auf die Existenz des Dokuments/View/Datenbank sondern fügt den Link "einfach so" hinzu.

Natürlich musst du irgendwie sicherstellen, dass man die Mail dann nur versenden kann, wenn das Dok gespeichert wurde.
Weiterhin muss man wissen, dass man Richtext über Die Backend-LS-Klassen nur ändern kannies nur funktioniert wenn das Dokument noch nicht offen ist.
(z.B. im QueryOpen).
Sobald UI beteiligt ist, muss andere Wege gehen, z.B auf die (ebenfalls undokumentierte) Methode "importItem" zurückgreifen oder über den Zwischenablage-Trick.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #10 am: 04.02.13 - 14:25:57 »
hi roalnd. danke, aber auch hier erfordert es das speichern des docs, sonst ist der link im body nicht sichtbar

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #11 am: 04.02.13 - 14:51:19 »
Dann haben wir aneinander vorbei geredet...
Du meinst das Dokument welches den DocLink enthält muss gespeichert werden?
dann ist dein Problem schlichtweg ein anderes....
Code
	Set rtitem = New NotesRichTextItem( maildoc, "Body" )
	
	Call rtitem.AppendText("Link => ")
	Call rtitem.AppendDocLink( doc, "Dokument" )
und sollte durch ein zusätzliches "call rtItem.update()" nach allen RT-Operationen gelöst sein.

Gruß
Roland

Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #12 am: 04.02.13 - 15:01:30 »
jetzt gehts. hier meine lösung für alle die vielleicht mal ein ähnliches problem haben. ist doch eigentlich eine gaaaanz einfache sache gewesen ...

also, einen button in die maske, der folgenden formelcode ausführt
Code
@If( @IsNewDoc ;

			@If( @IsValid;


								@Do( 
											@Command([RunAgent];"(Reopen)");
											@Command([ToolsRunMacro];"(Mail)")
										);

					@Return(""));

@Command([RunAgent];"(Mail)") )

1. im ersten agenten "(Reopen)" neues doc speichern (validierung der pflichtfelder läuft im querysave) und dann reopen.

Code
Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim newuidoc As NotesUIDocument 
	Dim db As NotesDatabase 
	Dim doc As NotesDocument
	Set uidoc = workspace.CurrentDocument
	Set db = session.CurrentDatabase
	Set doc = uidoc.Document 
	
	Call uidoc.Refresh
	Call uidoc.Save
	Call uidoc.Close(False)
	
	Set newuidoc=workspace.editdocument(True,doc)

2. im 2. agenten dann die erstellung der eigentlichen mail

Code
@Command([EditMakeDocLink]) ;

@Command([Compose]; ""; "(Mail)");

@Command([EditGotoField] ; "Body" );
@Command([EditInsertText]; @NewLine + @NewLine );
@Command([EditInsertText]; "DocLink zum Mutterdokument " );
@Command([EditPaste]) ;
@Command([EditGotoField] ; "SendTo" )

funktioniert wie sau. ging nur bei meinen ersten versuchen nicht, weil ich im quellcode des reopen agenten statt uidoc.Close(False) den parameter uidoc.Close(True) verwendet hatte. damit war das doc fürs reopen nach dem schließen nicht mehr im zugriff und ich bekam einen fehler. ok, workaround über GetDocByUniID wäre dann noch gegangen, habe ich aber nicht gleich dran gedacht.

wie auch immer .... herzlichen dank an alle beteiligten

alex

Offline StefanP1962

  • Frischling
  • *
  • Beiträge: 23
  • Geschlecht: Männlich
Re: [gelöst] verzwicktes Problem mit @Command([EditMakeDocLink])
« Antwort #13 am: 23.04.13 - 10:23:13 »
Hallo zusammen,

hatte auch das Problem in 7.0.2, dass der DocLink nicht sichtbar war im UIDocument, welches ich mit ws.EditDocument öffne. Genialerweise wurde er immer sichtbar, wenn ich im Debugger mit Einzelschritten durch das Script ging. Liess ich den Debugger durchlaufen, war nichts zu sehen und ohne Debugger auch nicht.   :-:

Der rtitem.update() war es, der fehlte.

Also auch von mir "Danke".  :D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz