Autor Thema: Datei anhängen im Frontend  (Gelesen 3660 mal)

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Datei anhängen im Frontend
« am: 13.09.10 - 11:11:28 »
Hallo Notesler!

Ich will einen Anhang im Frontend anhängen. Hier im Forum finde ich Hinweise das es nicht geht. Diese Diskussionen sind teilweise aber schon 5 Jahre und älter. Gibt es da immer noch keine Lösung für (Notes Client 7.0.3) ?

Ich möchte Daten in ein geöffnetes Dokument importieren. Dafür liegt eine Übergabedatei vor, die den Feldnamen und den Feldinhalt für die Maske enthält. Bei Textfeldern sehe ich da keine Schwierigkeiten. Jetzt soll aber noch in ein Richtextfeld eine Datei eingefügt werden. Über das Backend kann ich nicht gehen, weil auf den Masken viele Feldvalidierungen sind. Ein UIDOC.Save bringt mir dann einen Validierungsfehler nach dem anderen.
Evaluate darf keine @Command( [EditInsertFileAttachment] ; "C:\\Temp\\test.txt" ) ausführen. Dann habe ich versucht das in einen zweiten Agenten auszulagern und diesen aus meinem Importscript zu starten.
Anhangsagent:
@Command([EditGotoField];"Body");
@Command( [EditInsertFileAttachment] ; "C:\\Temp\\test.txt" );

Das bewirkt aber leider auch nichts.
Bin ich da auf dem ganz falschen weg? Oder liegt es vielleicht an den Laufzeiteinstellungen des Agenten? Die sind mir nämlich nicht ganz klar. Jetzt habe ich z.B. eingestellt das der Anhangsagent in der "Auswahl der Agentenliste" erscheint, und als Ziel "Keines" angegeben.

Könnt ihr mir Hinweise zur Lösung geben?

Bernd
« Letzte Änderung: 13.09.10 - 14:43:11 von Hatschi »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #1 am: 13.09.10 - 11:21:25 »
Dass das nicht gehen soll, kann ich nicht nachvollziehen.

Für eine ähnliche Aktion habe ich in einer Teilmaske eine Schaltfläche, die in Script geschrieben ist. Soll eine Datei angehängt werden, schreibe ich Pfad und Dateiname in ein Feld des Dokuments und führe ein uidoc.Refresh aus. Im Postrecalc der Teilmaske ist sinngemäß folgende Formel hinterlegt:

@If (Dateiname = ""; @Return (""); "");
@Command ([EditInsertFileAttachment]; Dateiname)

Funktioniert schon seit 5.10 und auch noch unter 8.

Natürlich muss das Richtextfeld bearbeitbar sein.
« Letzte Änderung: 13.09.10 - 11:24:27 von Peter Klett »

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #2 am: 13.09.10 - 11:25:21 »
Nachtrag:
Wenn ich den Agenten auf "Auswahl im Menü Aktionen" stelle, dann kann ich ihn auch von Hand starten. Das funktioniert dann auch und die Datei wird angehangen. Starte ich jedoch das Script zum Importieren der Daten, der wiederum den Anhangsagenten ausführt, wird nichts angehangen. Der Anhangsagent wird aber ausgeführt, zumindest laut Agentprotokoll. Auch ein eingefügtes @Statusbar wird nicht ausgegeben.
Werden diese Befehle im Anhangsagenten einfach ignoriert, wenn der Agent von einem anderen Agenten aufgerufen wird?
 
@StatusBar("Angekommen");
@Command([EditGotoField];"Body");
@Command( [EditInsertFileAttachment] ; "C:\\Temp\\Test.txt" );


Bernd

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #3 am: 13.09.10 - 11:29:45 »
Poste mal das Script, mit dem Du den Anhangsagenten startest

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #4 am: 13.09.10 - 11:39:16 »
Hallo Peter,

der Import soll vom Anwender ausgelöst werden. Deshalb liegt mein Import in einer Aktion. Dein Ansatz würde einen Eingriff in jede Maske bedeuten. Weil der Agent aber zur Zeit in mindestens 3 Datenbanken und mit zig Masken eingefügt werden soll, müssten alle Masken im Postrecalc angepasst werden. Diese Fleissarbeit würde ich gerne umgehen, zu mal dieses Event auch schon in manchen Masken Verwendet wird.

Irgendwie habe ich das Gefühl das der aufgerufene Agent die Befehle nicht ausführt. Siehe auch meinen Nachtrag etwas weiter oben. Habe ich da etwas übersehen?

Bernd

PS: Jetzt haben wir uns wieder überschnitten, aber hier der Code:
Sub AgentAnhaengenStarten
   
   Dim agent As NotesAgent
   
   'suchen des Agenten um die Datei anzuhängen
   Forall a In db.Agents
      If ( a.Name = "CIM~Import~anhaengen" ) Then
         Set agent = a
         Exit Forall
      End If
   End Forall
   
   'Umgebungsvariable mit dem Pfad setzen
   
   'Agent starten
   Call agent.run
   Call uidoc.refresh
End Sub


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #5 am: 13.09.10 - 11:48:18 »
Da sehe ich jetzt keinen Fehler drin. Den Agenten findest Du einfacher mit Set agent = db.GetAgent ("Name des Agenten"), aber das nur am Rande.

Ich würde mal mit den Einstellungen des Agenten spielen (markierte Dokumente usw.).

Was spricht dagegen, den Import anstelle über eine Aktion in einer Teilmaske zu realisieren. Vorteil ist, dass in der Teilmaske (also in einem einzigen Gestaltungselement) alles enthalten ist, was Du brauchst: Die Schaltfläche mit dem Script und das PostRecalc in Formelsprache.

Dann kopierst Du nur die Teilmaske in alle Schablonen der Datenbanken (idealerweise mit Vererbung aus einer zentralen Gestaltungselementedatenbank) und fügst die Teilmaske in jede Maske ein, die die Routine verwenden soll. Dann hast Du eine sauber gekapselte Aktion. Teilmaske rein -> Routine ist da, Teilmaske raus -> Routine ist wieder weg.

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #6 am: 13.09.10 - 12:07:50 »
Hallo Peter,

danke für die Anregung um den Agenten zu finden. Das werde ich direkt ändern.
Ansonsten probiere ich noch etwas mit Agenteneinstellungen des Agenten herum.

Vielleicht fällt dir/mir ja noch etwas in der Mittagspause ein.
Bernd

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #7 am: 13.09.10 - 13:38:53 »
Jetzt habe ich die Einstellungen des Anhangsagenten verfummelt. Starte ich ihn aus der Liste der Aktionen, dann wird die Datei auch angehangen. Wird der Anhangsagent jedoch von meinem Importscript aufgerufen, dann erhalte ich jetzt die Fehlermeldung:
"Notes Error @Funktion ist in diesem Kontext ungültig"
Hier im Forum finde ich dazu den Hinweis, das dieser Fehler auftritt, wenn der gestartete Agent "@command"-Befehle enthält.
Das ist dann für mich anscheinend das K.O. Eine Datei im Frontend per Agent anzuhängen.

Bernd

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #8 am: 13.09.10 - 13:44:37 »
Stimmt, daran habe ich nicht gedacht. Dann würde ich das mit der Teilmaske versuchen, finde ich sogar eleganter, weil (wie schon geschrieben) nur ein Designelement nötig ist. Sonst musst Du sowohl die Aktion als auch den Agenten in alle Datenbanken übernehmen.

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #9 am: 13.09.10 - 14:13:59 »
Das Einfügen von dem Importscript und dem Anhangsagent in die 3 Datenbanken ist das kleinere übel. Die beiden Agenten würden völlig losgelöst von allem in der Datenbank liegen. Aber in fremden Masken herumzufummeln und eine Teilmaske einzufügen, da hab ich ein schlechtes Gefühl. Die Masken sind gewachsene Masken und zum Teil auch schon mit vielen Events belegt.

Zur Zeit spiele ich deshalb mit dem Gedanken dem Anwender es zuzumuten nach dem Import noch eine weitere Aktion für den Anhang zu drücken. Im ersten Agent schreibe ich dann den Pfad zur Datei in die Umgebungsvariable und der zweite Agent liest den Pfad aus und hängt die Datei an.

Bernd
 

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #10 am: 13.09.10 - 14:21:45 »
Was passiert, wenn Du Deinen Anhangsagenten von einem Formelagenten aufrufst?

@Command ([ToolsRunMacro]; "Name des Agenten")

Hängt er dann die Datei an? Falls ja, würde ich mit 3 Agenten arbeiten.

1. Formelagent, der den
2. Scriptagent zum Import und festlegen der anzuhängenden Datei
und den
3. Agent zum Anhängen

nacheinander startet. Ist zwar ein wildes Konstrukt, aber einen Versuch wert.

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #11 am: 13.09.10 - 14:42:53 »
Tata Tata Tata

Danke Peter. Das war es!
Es gibt jetzt einen Steueragenten in Affen(@)sprache. Er ruft das Script zum Importieren auf. Der Import wertet die zu importierende Datei aus. Dabei werden die Feldwerte in die jeweiligen Felder geschrieben und als letztes das Environment mit der anzuhängenden Datei befüllt. Dann ruft der Steueragent den zweiten Agenten auf. Dieser Affenagent hängt mir nun die Datei an und löscht mir wieder die Umgebungsvariable. Hmmm, jetzt könnte er ja auch noch gleich die angehangene Datei löschen. Da kümmere ich mich auch noch drum.
Auf jede Fall funktioniert es so.
Vielen Dank für deine Unterstützung Peter.


Bernd

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Datei anhängen im Frontend
« Antwort #12 am: 13.09.10 - 14:52:05 »
Löschen der Datei geht per Script mit Kill Dateiname.

Um zu vermeiden, noch einen 4. Agenten zu bauen, kannst Du den in den 2. integrieren. Ist die Ini-Variable zum Dateianhängen nicht definiert, führt der Agent den Import durch und schreibt die Variable. Ist sie definiert, löscht er die Datei.

Der Steueragent 1 ruft dann Agent 2, Agent 3 und nochmals Agent 2 auf.

Nachtrag:

Natürlich darf dann Agent 3 nicht die Variable löschen

Offline Hatschi

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Datei anhängen im Frontend
« Antwort #13 am: 13.09.10 - 16:00:32 »
Gute Idee,

selbst wenn ich einen vierten Agent einbauen müsste, wäre mir das lieber als in allen Masken zu fummeln. Die Agenten werden ohne viel Aufwand per Cut&Paste verteilt.

Einen schönen Tag wünsche ich dir.

Bernd


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz