Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: KilleKalle am 29.02.12 - 11:09:18

Titel: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 11:09:18
Hallo zusammen,

ich möchte einen Agenten erstellen, der Immer eine Nachricht auf Betreff überprüft und den Betreff ändert.

Als Beispiel:

Betreff: User hat sich eingeloggt

User xyz hat sich soeben eingeloggt.

Der Betreff ist immer gleich!
Nun sollte der Agent den Betreff erkennen, den Usernamen aus der eMail auslesen und im Betreff anhängen.

Wie stell ich das an?


LG KilleKalle
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 11:15:49
Hallo,

Langsam zum mitschreiben.

1. Agent in einer Mailbox
2. wenn Mail ankommt, pruefen, ob im Betreff 'User hat sich eingeloggt'
3. wenn Ja, dann aus dem Text der Mail den Namen des Benutzers auslesen.
4. Betreff um den ermittelten Benutzernamen erweitern und Mail speichern.

Wie willst Du den Punkt 3. realisieren?
Woran soll der Agent erkennen, was im Text der Mail der Benutzername ist?


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 11:30:46
Hallo,

ich dachte, dass man, da der Inhalt immer der selbe ist, irgendwie den Username sondieren könnte.

z.B. durch ein Trim ?

Ansonsten könnte ich mir noch vorstellen, dass man da es derzeit nur 15 unterschiedliche Benutzer gibt, nach diesen Worten sucht.
Allerdings wäre das müssig, falls man neue User anlegt, müsste man auch immer den Agenten anpassen...

KilleKalle


Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 11:38:46
Von wem werden die Mails denn erstellt?

Kann man denn nicht bereits hier ansetzen?


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 11:40:23
Nein, leider nicht.
Die Mails werden automatisch von einer Cisco ASA erstellt, leider hat man da nicht die Möglichkeit das schon im Vorfeld zu ändern.

Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 11:47:06
Das kann man sauber herausschneiden:
- erst @Middle (ab n Zeichen bis zum Namen)
- dann @Left mit Parameter " hat"

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 11:58:24
Wieso denn dann noch ein left?

Mit dem middle kann ich doch den Offset, der immer gleich ist, schon an den Anfang des Usernamen gehen.
Oder lieg ich da falsch?

Ich hatte das nun so gedacht? (Nicht erschlagen ;o))

Code
FIELD subject:=subject;
FIELD message:=message;

TempSubject:=@if(@Contains(subject;"ASA Alert (ASA-101)"););
TempUser:= @Trim(@middle(message;66;10););

@prompt([ok];"Neuer Betreff";@SetField("subject";TempSubject && TempUser););

@SetField("subject";TempSubject && TempUser);
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 12:19:54
Dann lautet
a) der Messagetext anders als hier gepostet und
b) schon mein Name hat mehr als 10 Zeichen und
c) wozu das @Trim und
d) in der TempUser := -Zeile ist ein Semikolon zu viel.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 12:25:14
zu a) Ja, der Messagetext ist ein anderer, war ja auch als Beispiel deklariert.
zu b) Die Namen sind tatsächlich unterschiedlich lang, aber bekommt man das so variabel hin?
zu c) Das Trim war natürlich falsch geklaut ;o)
zu d) wieso ein Semikolon zuviel? @middle(string;offset;charaters)
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 12:28:45
Zu b) Vielleicht schreibst Du mal den richtigen Text auf??
Zu d) TempUser:= @Trim(@middle(message;66;10););
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 13:28:33
Ok...

also die nachricht sieht wie folgt aus:

Betreff:ASA Alert (ASA-101)

<165>Feb 29 2012 11:31:39: %ASA-5-713000: Group = pez, Username = XXXX, IP = 82.100.20.42, PHASE 2 COMPLETED (msgid=f4ecbd1c)
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 13:31:56
Jetzt sieht das ja ganz anders aus und der @Middle-Versuch erscheint noch abwegiger.

Ein @Right ab "Username = " und dann ein @Left bis zum Komma.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 13:38:17
Du meinst dann so?

Code
FIELD Subject:=Subject;
FIELD Message:=Message;

TempSubject:=@If(@Contains(Subject;"ASA Alert (ASA-101)"));
TempUser:= @Right(message;"Username = ");
TempUser:= @Left(TempUser;", IP");

@prompt([ok];"Neuer Betreff";"@SetField(Subject;TempSubject  && TempUser"));
@SetField(Subject;TempSubject && TempUser);
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 15:01:07
Hmmm,

nun stellt sich mir ein neues Problem in den Weg :-/

Ich habe nun folgendes:
Code
Field Subject:=Subject;
Field Body:=Body;

@If(@Contains("Subject";"ASA Alert (ASA-101)"));
TempSubject:=Subject;

@If(@Contains("Body";"Username ="));
TempUser:= @Right(Body;"Username = ");
TempUser:= @Left(TempUser;", IP");
TempUser:= " - " + TempUser;
@SetField("Subject";Subject  + TempUser);

SELECT @All

Soweit funktioniert es auch, solange ich es nur auf die Mails Anwende, die eben diesen Betreff haben, alle anderen werden ebenfalls bearbeitet, allerding werden die Mails dann Zerstört und es steht im Betreff eine Fehlermeldung: FEHLER: Falscher Datentyp für Operator oder @Funktion: Text erwartet

Ich dachte durch die IF Bedingung habe ich dem Script schon gesagt, dass es nur auf die ASA Meldungen reagieren soll?!?


LG KilleKalle
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 15:03:25
Der Agent arbeitet aber danach weiter.

An welcher Stelle soll er denn die Arbeit einstellen?
(Abbruchkriterium)


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 15:05:01
Wenn der Betreff nicht ASA Alert (ASA-101) ist, soll der mit der Mail nichts machen!
Aber es gibt ja kein Else...
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 15:07:55
Du solltest vielleicht doch erstmal in der DesignerHelp nachlesen, bevor Du blind @functions benutzt. Das Dir abnehmen und vorkauen werden wir ganz sicherlich nicht.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Axel am 29.02.12 - 15:11:08
In der Formelsprache sieht die Syntax der @If - anweisung so aus

@if(Bedingung; Anweisung bei Bedingung erfüllt; Anweisung bei Bedingung nicht erfüllt),

Wenn ich mir deine IF-Anweisung so anschaue, ist die völlig für die Katz. Es gibt zwar eine Bedingung, aber keinerlei Anweisungsen. Der Code im Anschluß wird immer ausgeführt.

Eine Alternative wäre die hier:

...
@If(@Contains("Subject";"ASA Alert (ASA-101)"); ""; @Return(""));
...


Axel
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 29.02.12 - 16:59:34
Dann müsste es ja prinzipiell so aussehen...
Code
FIELD Subject:=Subject;
FIELD Body:=Body;

@If(@Contains("Subject";"ASA Alert (ASA-101)");@If(@Contains("Body";"Username =");
(TempSubject:=Subject) & (TempUser:= @Right(Body;"Username =")) & 
(TempUser:= @Left(TempUser;", IP")) & (TempUser:= " - " + TempUser) & 
(@SetField("Subject";TempSubject + TempUser));@Nothing);@Nothing);

SELECT @All


EDIT BK: Code-Zeile auf sinnige Breite gesetzt.
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 17:00:46
Warum?

Axel hat Dir doch schon einen Ansatz gezeigt.

Auch muesstest Du bei der Verkettung von mehreren Anweisungen im @If Dich noch ein wenig mit der
Function @Do auseinandersetzen.


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 17:10:15
@Do braucht man hier überhaupt nicht (wie meistens). Aber mit der DesignerHelp *muss* man sich auseinandersetzen und mal nachlesen, was "&" in Formelsprache bedeutet, dass "&&" sinnfrei ist etc. pp.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 18:14:45
@Bernhard

Ich moechte ja auch immer etwas lernen, aber wie kann ich ohne @Do auskommen, wenn ich alle notwendigen Aktionen innerhalb des @If ausfuehren moechte.


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 29.02.12 - 18:27:34
Du bildest das neue Subject ohne Rücksicht auf Verluste, aber das Übertragen des Inhalts in das Item machst Du erst, wenn die Bedingung (die sonst vor dem @Do stehen würde), passt.
Das ist nur eine Methode. Das @Return ("") wurde bereits erwähnt.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Peter Klett am 29.02.12 - 18:29:43
@Bernhard

Ich moechte ja auch immer etwas lernen, aber wie kann ich ohne @Do auskommen, wenn ich alle notwendigen Aktionen innerhalb des @If ausfuehren moechte.


Andreas
Wenn Du mehrere Aktionen INNERHALB eines If-Zweiges ausführen willst, brauchst Du natürlich das @Do. Der Ansatz von Axel ist aber der, dass zuerst geprüft wird, ob etwas getan werden muss. Falls nicht, wird die Formel beendet. Alles, was danach kommt, wird also nur dann ausgeführt, wenn die Bedingung zustimmt.

Variante 1: @Do innerhalb @If, wenn Bedingung = True

@If (Bedingung;
   @Do (
      @Formel1;
      @Formel2
   );
"");

Variante 2: Ausstieg mit @Return, wenn Bedingung = False

@If (Bedingung; ""; @Return (""));
@Formel1;
@Formel2

Ich persönlich mag lieber Variante 2, ist weniger zu schreiben und leichter zu lesen und zu warten. Es kann aber sein, dass von der Bedingung zwei verschiedene Abläufe abhängig sind, dann geht es mit dem @Return nicht.

@If (Bedingung;
   @Do (
      @Formel1;
      @Formel2
   );
   @Do (
      @Sonst-Formel1;
      @Sonst-Formel2
   )
);

-> ist nur skizziert, möglich, dass bei den Klammern oder Semikolon Fehler enthalten sind.
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 18:33:25
Danke Peter,

Soweit war ich ja auch und dies ist mir durchaus bewusst.

Meine Bemerkung mit dem @Do bezog sich aber auf das Stueckchen Code, was KilleKalle nach Axel seinem kleinen Beispiel skizziert hat.
Hier hatte er alles in das @If verfrachtet.


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Peter Klett am 29.02.12 - 18:42:36
Ok. Sorry, wenn ich das so schreibe, die Formel von KilleKalle hat recht wenig mit einer funktionierenden @Formel in Lotus Notes zu tun. Ich vermute da eine starke Anlehnung an ihm Gewohntes aus einem anderen Umfeld, Java, o.ä.. Das hat Bernhard auch schon völlig korrekt kommentiert.

Also, wenn mehrere Befehle innerhalb eines @If, dann mit @Do, aber ob notwendig, steht auf einem anderen Blatt. Ich würde es vermeiden, wo es geht, weil es - insbesondere bei langen Formeln - sehr schnell unübersichtlich wird. Oft geht es ohne, man muss manchmal nur etwas knobeln. Aber gerade das ist doch das Salz in unserer täglichen Suppe (wenn es denn unbedingt Formelsprache sein muss, die auf jeden Fall oft genug ihre Berechtigung hat).

EDIT: Allerdings kann ich mich nicht erinnern, wann ich zuletzt einen periodischen Agenten in Formelsprache geschrieben hätte, da würde ich IMMER zu Script greifen, falls nicht irgendwelche anderen Gründe dagegen sprechen (z.B. die Notwendigkeit von Java-Funktionalität).
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: ascabg am 29.02.12 - 18:45:36
Na dann wollen wir mal hoffen, das KilleKalle diese Diskussion aufmerksam verfolgt hat und einige Anregungen fuer sein Vorhaben mitnehmen konnte.


Andreas
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 02.03.12 - 12:41:15
Hallo zusammen,

vielen Dank für eure Kommentare!
Mit der Designer Hilfe hat es letztlich auch funktioniert ;o)

So siehts nun aus!
Gibt es Einwände, zur Verbesserung?

Code
FIELD Subject:=Subject;
FIELD Body:=Body;

@If(
@Contains(Subject;"ASA Alert (ASA-101)");
"";
@Return("")
);

@If(
@Contains(Body;"Username =");
@Do
(TempSubject:=Subject;
TempUser:= @Right(Body;"Username =");
TempUser:= @Left(TempUser;", IP");
TempUser:= " - " + TempUser;
@SetField("Subject";TempSubject + TempUser)
);
@Return("")
);

SELECT @All

Danke!

LG KilleKalle
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Axel am 02.03.12 - 12:49:39
Gibt es Einwände, zur Verbesserung?

Ja.

Das @Do kannst du dir schenken, wenn du die zweite @IF - Anweisung nach dem Przinzip der ersten aufbaust.

Code
FIELD Subject:=Subject;
FIELD Body:=Body;

@If(@Contains(Subject;"ASA Alert (ASA-101)");"";@Return(""));

@If(@Contains(Body;"Username ="); ""; @Return("");

TempSubject:=Subject;
TempUser:= @Right(Body;"Username =");
TempUser:= @Left(TempUser;", IP");
TempUser:= " - " + TempUser;
@SetField("Subject";TempSubject + TempUser);

SELECT @All


Auf die Schnelle; sollte so funktionieren.

Axel
 
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 02.03.12 - 14:08:36
Moin,

noch 'ne Frage... ;o)

Der Agent verändert nun leider die Schriftart in den Mails. Kann man das verhindern?

Habe schon versucht mir den Body bevor ich den durchsuche in eine Variabel zu lesen und dort nur zu bearbeiten, aber das verhindert es auch nicht.

LG KilleKalle
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: koehlerbv am 02.03.12 - 14:40:20
Das die Formatierung des Textes eine Rolle spielt, hätte man vielleicht gleich mit ansagen sollen ...

Für den genannten Fall muss mit NotesRichText gedealt werden. Also: LotusScript und NotesRichText classes, hier insbesondere NotesRichTextRange class und die Methode FindAndReplace.

Bernhard
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Peter Klett am 02.03.12 - 14:40:35
Lass mal FIELD Body := Body weg, die Zeile brauchst Du nicht, möglich, dass dabei was kaputtgeht.
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: Peter Klett am 02.03.12 - 14:43:28
Das die Formatierung des Textes eine Rolle spielt, hätte man vielleicht gleich mit ansagen sollen ...

Für den genannten Fall muss mit NotesRichText gedealt werden. Also: LotusScript und NotesRichText classes, hier insbesondere NotesRichTextRange class und die Methode FindAndReplace.

Bernhard
Nö, das Richtextfeld wird doch nur gelesen, wenn da nicht zurückgeschrieben wird, dürfte da nichts passieren. Es soll doch nur Subject geändert werden.
Titel: Re: Agenten um Betreff zu ändern
Beitrag von: KilleKalle am 02.03.12 - 14:50:00
Danke,

das Field Body:=Body war die Ursache des übels!
Nun passt alles!

Vielen Dank,

LG KilleKalle