Autor Thema: Button Action in Agent auslagern  (Gelesen 2449 mal)

Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Button Action in Agent auslagern
« am: 25.09.04 - 21:28:48 »
Hallo zusammen,

folgendes Problem : Ich möchte eine action, die bisher aus jedem form ausgeführt wird, über einen agenten ablaufen lassen. Diese Action beinhalted jedoch @commands (compose, filesave, fileclose). Diese sind bei Agenten ja nicht zulässig. Ein "Run once" Agent bringt ja auch nihct viel, da ja jedes Dokument im View die Agentenaction ausführen soll.

Wie kann man das umschiffen? Bisher selektiert der Agent über
@PostedCommand( [OpenView] ; "onlymainsys" );
@PostedCommand([EditSelectAll]);
alle Dokumente, und startet dann den agenten mit den @commands.
@PostedCommand([ToolsRunMacro]; "createsubsys");
@PostedCommand( [CloseWindow] )

Man müsste dem Agenten irgendwie sagen das er den "createsubsystems" agenten auf jedes anwenden soll damit dieser als run once agent durchlaufen kann.


?Alternativ wäre es auch denkbar die Action in jedem Form zu öffen, also ein Agenten befehl zu haben, der beim öffnen automatisch einen Action Button ausführt?

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Button Action in Agent auslagern
« Antwort #1 am: 25.09.04 - 21:46:10 »
Gegenfrage  ;)

Was genau macht denn Dein Agent?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Button Action in Agent auslagern
« Antwort #2 am: 25.09.04 - 21:57:51 »
Weitere Gegenfrage: Warum überhaupt der krampfhafte Versuch mit @functions / @commands, der vermutlich gar nicht realisierbar sein wird (soweit ich das an Hand Deiner Frage übersehen kann). Ergo: Warum nicht gleich LS ?

Bernhard

Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Re: Button Action in Agent auslagern
« Antwort #3 am: 25.09.04 - 22:10:19 »
ok, nochmal ausführlich:

Bisher:
Ich habe verschiedene Systeme in einer DB zusammengefasst. Diese bestehen aus Main- und Subsystemeinheiten. Man erstellt jedoch nur die Main-Einheit und kann bisher in dem Form auf einen Action Button (in der Action bar) klicken. Dieser generiert dann die dazugehörigen Subsystemeinheiten (@command([compose]..etc), in abhängigkeit von einigen Maineinheit Daten. Das funktioniert soweit ganz gut.

Jetzt:
Inzwischen habe ich so viele Mainsysteme, das ich das generieren der Subsysteme innerhalb der Forms als recht lästig finde. Ich will im View gleich mehrere Mainsystem Forms auswählen können und dann einen Agenten laufen lassen, der mir die Subsysteme generiert - also die bisherige Aktion ausführt. Das beist sich aber mit der tatsache, das Agenten normal keine @commands ausführen - es sei denn als "Run once", das nützt aber nix, da er ja nicht über die markierten Einträge rennt...

*hilfe*

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Button Action in Agent auslagern
« Antwort #4 am: 25.09.04 - 22:19:05 »
Ich habe keine Ahnung was Du unter "Mainsystem" und "Subsystem" verstehst, vielleicht kannst Du noch erklären was Du da meinst in Notes-Sprache (Dokumente?).

Riecht aber stark nach LotusScript und Backend. Hatte das beim 1. Posting schon gedacht, daher die Nachfrage. Bernhard hat es auch schon erwähnt.

Also:
1) was sind bei Dir "Mainsystem" und "Subsystem" ?
2) Wie fit bist Du in LotusScript?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Button Action in Agent auslagern
« Antwort #5 am: 25.09.04 - 22:29:31 »
Main- und Subsystems werden wohl Geräte sein, die er mit Notes-Docs (ggf. die Subs in Responses) erfasst. Das ist jetzt aber Kaffeesatzleserei.

Und: Derartige Anlage über mehr als ein Doc ist mit Formelsprache nicht möglich - dafür wurde diese geschaffen. Es geht "nur" mit LS.

Ich schliesse mich also Matthias' berechtigter Frage an: Wie sieht es bei Dir mit LS aus ? Ohne LS brauchen wir nicht weitermachen.

Bernhard

Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Re: Button Action in Agent auslagern
« Antwort #6 am: 25.09.04 - 22:46:34 »
ein paar grundlagen in LS habe ich intus - naja, bis jetzt nicht wirklich gebraucht. EVtl könnt ihr mir ja helfen. Hier der bisherige Formelcode, den es jetzt gilt in LS zu übertragen:

n:=numberss;

@While(n!=0;
FIELD subsys_temp:=subsys[n];

@Environment("singlelongname"; alllongnames[n]);



@Command([FileSave]);
@Command([Compose];"add_subsystem");
@Command([FileSave]);
@Command( [CloseWindow] ) ;

@Set("n";n-1));

@Command([FileSave]);

@Environment("singlelongname"; "");
SELECT @All


Ich habe in der Hilfe nix zu Environment Deklarationen in LS gefunden - wie stellt man das an?

Auch ist mir unklar wie folgender befehl in LS aussieht:
FIELD subsys_temp:=subsys[n];

Der folgende Ansatz ist wohl falsch... er hängt sich an dem [n] auf....
Set item = doc.ReplaceItemValue( "subsys_temp", subsys[n] )

, den rest könnte ich mir zusammen suchen...
« Letzte Änderung: 25.09.04 - 22:59:48 von Peacemaker »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Button Action in Agent auslagern
« Antwort #7 am: 25.09.04 - 22:57:22 »
Dann hast Du aber die Designer-Hilfe nicht bemüht, Friedensstifter:

NotesSession.Set(Get)Environment(Var, Value, String)

HTH,
Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Button Action in Agent auslagern
« Antwort #8 am: 25.09.04 - 22:57:38 »
Wo steckt denn der Code?

Kleine Anmerkung: "n:=numberss;" <--- wirf hier mal das doppelte s raus, nicht dass das probleme macht.

Zu Environment:
In LS braucht man das meistens gar nicht.
Du kannst global Variablen "dimmen".

Z.B. in einer Maske setzt Du ein
     Dim strMeineStringVariable as String
unter (Globals) / (Declarations)

Im Script selbst kannst Du dann in einem Button z.B. ein
    strMeineStringVariable = "hallo welt"
machen.

In einem 2. Button kannst Du dann die Variable auslesen:
    Msgbox strMeineStringVariable

Die Variable ist hier in diesem Beispiel solange verfügbar, wie das Dokument geöffnet ist.

Buchtipp am Rande: Lotus Notes and Domino 6 Programming Bible, beinhaltet eine hervorragende Einführung zu Lotus Script.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Re: Button Action in Agent auslagern
« Antwort #9 am: 25.09.04 - 23:03:43 »
Danke soweit für die Anregungen, werde mir wohl morgen den Sonntag damit um die Ohren hauen...

folgenden Befehl (Formelsprache): FIELD subsys_temp:=subsys[n];
habe ich versucht in LS zu übersetzen:
Der folgende Ansatz ist aber wohl falsch... er hängt sich an dem [n] auf....
Set item = doc.ReplaceItemValue( "subsys_temp", subsys[n] )

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Button Action in Agent auslagern
« Antwort #10 am: 25.09.04 - 23:08:38 »
Der folgende Ansatz ist aber wohl falsch... er hängt sich an dem [n] auf....
Set item = doc.ReplaceItemValue( "subsys_temp", subsys[n] )

[n] gibt es nicht in LotusScript.

Schau mal in Best Practices hier, da gibt es z.B.
Schleifenkunde in Lotus Script
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Button Action in Agent auslagern
« Antwort #11 am: 25.09.04 - 23:13:22 »
Und bitte grundlegend LS lernen, und nicht herumschnitzen. Am morgigen Sonntag bekommst Du das niemals (sicher) gebacken.

Code
Set item = doc.ReplaceItemValue( "subsys_temp", subsys[n] )
wäre soetwas wie

doc.subsys_temp" = doc.subsys (DeineIntegerLoopVariable)

Geh' es langsam und grundlegend an - Du wirst später, aber nur dann davon profitieren.

HTH,
Bernhard


Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Re: Button Action in Agent auslagern
« Antwort #12 am: 27.09.04 - 07:59:32 »
So, hab jetzt folgenden LS Code fertig - das  mit dem grundlegend einarbeiten geht nicht immer so einfach, vor allem wenn die Zeit drängt...

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim agent As NotesAgent
   
   Set db = session.CurrentDatabase
   Set doc = CurrentNotesDocument
   Set agent = db.GetAgent("test")
   Set n = doc.numberss
   
   
   While n >= 1
      doc.subsys_temp = doc.subsys (n)
      doc.ecnumbers_temp = doc.ecnumbers (n)
      doc.alldrivers_temp = doc.alldrivers (n)
      doc.allrec_temp = doc.allrec (n)
      doc.allact_temp = doc.allact (n)
      doc.allacttime_temp = doc.allacttime (n)
      doc.allmax_temp = doc.allmax (n)
      doc.allacc_temp = doc.allacc (n)
      
      Call session.SetEnvironmentVar( "singlelongname", doc.alllongnames(n) )
      Call session.SetEnvironmentVar( "singlenumber", n )
      Call session.SetEnvironmentVar( "sysid", doc.sysid )
      Call session.SetEnvironmentVar( "location", doc.location(n) )
      Call session.SetEnvironmentVar( "type", doc.type(n) )
      Call session.SetEnvironmentVar( "model", doc.model(n) )
      Call session.SetEnvironmentVar( "customer", doc.customer(n) )
      Call doc.Save( False, False )
      agent.Run
      
      n=n-1
      
   Wend
   
   doc.subsys_temp = "Contains all "
   doc.ecnumbers_temp = "Mainframe "
   doc.alldrivers_temp = "Information"
   doc.allrec_temp = ""
   doc.allact_temp = ""
   doc.allacttime_temp = ""
   doc.allmax_temp = ""
   doc.allacc_temp = ""
   
   
   Call doc.Save( False, False )
End Sub


Beim Run bekomme ich ein Type missmatch - habe aber keine Idee wieso...
Ein weiteres Problem war, folgende Formulas äquivalent umszuscripten :
@Command([Compose];"add_subsystem");

Daher der "Run once" Agent test.
@Command([Compose];"add_subsystem");
@Command([FileSave]);
@Command( [CloseWindow] ) ;


Kann mir jemand helfen???? Ist ein fehler oben offensichtlich?

Danke schonmal

Marinero Atlántico

  • Gast
Re: Button Action in Agent auslagern
« Antwort #13 am: 27.09.04 - 10:11:24 »
vor allem wenn die Zeit drängt...
Du solltest wirklich ein Buch zu LotusScript lesen, z.B. wie die von Raimund Mann. So ist das wirklich zu anstrengend und stürzt z.B. mich in mittelschwere Identitätskrisen.  So beschleicht mich schnell das Gefühl, dass ich neben meiner sowieso grundsätzlich unterbezahlte Arbeit auch noch die Arbeit von anderen mache.
Dies war jetzt nicht persönlich gemeint.

1. Wenn ihr Hilfe braucht, baut bitte vernünftiges Errorhandling ein. Du weisst vermutlich nicht, was das ist. Aber nur weil du einfach kein vernünftiges LotusScript Buch gelesen hast.
2. Neue Dokumente kann man einfach mit notesDatabase.createDocument erstellen (oder so ähnlich)
3. Du hast irgendwie kein Gespür für Datentypen.

Code
Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
        Dim docNew As NotesDocument
	Dim agent As NotesAgent
	Dim strN As String
        Dim n as Integer

   on Error goto Fehler
	Set db = session.CurrentDatabase
	Set doc = CurrentNotesDocument
	Set agent = db.GetAgent("test")
	strN = doc.numberss(0)
	n = Cstr(n)
	
	While n >= 1
                 set docNew = db.createDocument
                docNew.form = "add_subsystem"     
		docNew.subsys_temp = doc.subsys (n)
		docNew.ecnumbers_temp = doc.ecnumbers (n)
		docNew.alldrivers_temp = doc.alldrivers (n)
		docNew.allrec_temp = doc.allrec (n)
		docNew.allact_temp = doc.allact (n)
		docNew.allacttime_temp = doc.allacttime (n)
		docNew.allmax_temp = doc.allmax (n)
		docNew.allacc_temp = doc.allacc (n)
		docNew.save true, false
		
		n=n-1
		
	Wend
	
	doc.subsys_temp = "Contains all "
	doc.ecnumbers_temp = "Mainframe "
	doc.alldrivers_temp = "Information"
	doc.allrec_temp = ""
	doc.allact_temp = ""
	doc.allacttime_temp = ""
	doc.allmax_temp = ""
	doc.allacc_temp = ""
	
	
	Call doc.Save( False, False )
exit sub
fehler: 
msgbox "Fehler:" & Error$ & "(" Cstr(Err) & ") in Zeile " & Cstr(Erl)
End Sub

Das ist nicht gut, sollte aber ein paar Ideen geben. Und ich mache sowieso immer Syntaxfehler, weil ich seit ca. 4 Monaten kaum LotusScript programmiert habe.

Gruß Axel
« Letzte Änderung: 27.09.04 - 10:13:06 von Marinero Atlántico »

Offline Peacemaker

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Ich liebe dieses Forum!
Re: Button Action in Agent auslagern
« Antwort #14 am: 30.09.04 - 12:47:56 »
sorry fehlpost

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz