Das Notes Forum

Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: bificypdog am 08.01.04 - 18:11:23

Titel: Von Formel zu Script
Beitrag von: bificypdog am 08.01.04 - 18:11:23
Kann mir jemand einen kleinen Tipp geben?
Wie setze ich folgende Formel in Script um:

Code
@SetField("History";(@Text(@Now)+" Call wurde von " + @Name([CN];@UserName)+" --> "+@Implode(@Name([CN];Next))+" zugeordnet."):History);

Danke.
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 08.01.04 - 18:15:57
Äh, was fehlt Dir denn hier an Know-How ?
Dann wissen wir auch, wie tief wir bei der Hilfestellung gehen müssen ...

Bernhard
Titel: Re:Von Formel zu Script
Beitrag von: bificypdog am 08.01.04 - 18:17:47
Die Agenten sind in Lotus Script fertig.
Ich weiss nur nicht, wie ich die Formel umschreiben soll.
Bisher habe ich das Feature im Script rauslassen müssen. Jedoch sollte die Dokumentenhistorie auch bei der Nutzung von Script-Agenten benutzt werden. Sonst entsteht bei mir eine Lücke in der Historie.
Titel: Re:Von Formel zu Script
Beitrag von: Glombi am 08.01.04 - 18:24:25
Am einfachsten geht so was (falls der Code bereits in Formelsprache da ist) mit Evaluate:

'doc ist das Backend-Dokument, in das geschrieben werden soll

dim ret_eval as Variant
ret_eval = Evaluate(|FIELD History := (@Text(@Now)+" Call wurde von " + @Name([CN];@UserName)+" --> "+@Implode(@Name([CN];Next))+" zugeordnet."):History);@True|,doc)

Andreas
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 08.01.04 - 18:25:19
@bifi:
... was meine Frage immer noch nicht beantwortet ...
Magst Du jetzt das ganze Ding fertig vorgekaut haben ?
@SetField in LS sollte klar sein.
@Now ist in diesem Kontext CStr (Now) in LS
Das @Implode ist unnötig.
@Name ([CN]; @UserName) ist NotesSession.UserName.Common

Für die Verkettung des Listenfeldes musst Du Dir was einfallen lassen. Gib' mal ArrayAppend eine Chance (siehe DesignerHelp), Du musst dort aber sicherstellen, dass das Ursprungsfeld schon ein Array ist.

Also: Sag' mal genaueres.

Bernhard
Titel: Re:Von Formel zu Script
Beitrag von: Semeaphoros am 08.01.04 - 18:36:10
Zitat
@Name ([CN]; @UserName) ist NotesSession.UserName.Common

Das geht nicht. UserName ist ein String.
Stattdessen NotesSession.CommonUserName

Für das Anhängen des Textes eignet sich auch
NotesItem.AppendToTextList
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 08.01.04 - 18:45:45
Vollkommen richtig, Semeaphoros - aus dem Hut habe ich hier LS zuviel Vererbung zugetraut (ich war bei der NotesName class).
AppendToTextList ist natürlich auch die simpel-weil-geniale-Methode ...

Mit rotem Kopf,
Bernhard
Titel: Re:Von Formel zu Script
Beitrag von: Semeaphoros am 08.01.04 - 19:29:40
Lass mal nur den roten Kopf weg ...... passiert doch allen mal :-)
Titel: Re:Von Formel zu Script
Beitrag von: bificypdog am 08.01.04 - 20:23:24
Ich bin der Lösung schon ganz nah.
Auch wenn ich das nicht gerade elegant (aber halt Anfänger) mit Evaluate gelöst habe.

Ich werde es morgen weiterprobieren.

Alle pur in LS schaffe ich nicht. Aber das ist okay.
Titel: Re:Von Formel zu Script
Beitrag von: bificypdog am 08.01.04 - 20:23:43
Das wichtigste habe ich vergessen:

DANKE.
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 08.01.04 - 20:35:20
Das "DANKE" war jetzt wirklich sehr nett ! Das macht leider nicht jeder ...
Wenn Du "pur LS" magst - sag - wie von mir schon angesprochen - an, wo es bei Dir klemmt.
Ansonsten: Glombis Vorschlag ist ein wirklich guter und gangbarer Weg (die Syntax habe ich jetzt nicht überprüft, aber herrjeh - es ist von Glombi - das passt schon oder wird von ihm dann passend gemacht !). Es spricht nur in wenigen Fällen etwas dagegen, Evaluate einzusetzen, um auf die meist performante @functions Engine von Notes zuzugreifen.

Ciao,
Bernhard
Titel: Re:Von Formel zu Script
Beitrag von: bificypdog am 09.01.04 - 14:07:22
Ich zeig euch mal, wie mein Agent aussieht.

Code
Sub Initialize
   
   Dim s As New notessession
   Dim db As notesdatabase
   Dim coll As notesdocumentcollection
   Dim doc As NotesDocument
   Dim item As NotesItem
   Dim erg As Variant
   Dim ret_eval As Variant
   
   Set db=s.currentdatabase
   Set coll=db.unprocesseddocuments
   
   If coll.Count = 1 Then
      erg = Msgbox ("Soll der Call reaktiviert werden? Fortfahren?", 1+48, "Hinweis")
   Else 
      erg = Msgbox ("Sollen die Calls reaktiviert werden? Fortfahren?", 1+48, "Hinweis")
   End If
   
   If erg = 2 Then
      Exit Sub
   End If
   
   If coll.count>0 Then
      Set doc = coll.GetFirstDocument
      While Not doc Is Nothing
         Set item = doc.ReplaceItemValue("CALL_Status","Gesendet")
         Set item = doc.ReplaceItemValue("DocStatus","1")
         Set item = doc.ReplaceItemValue("CALL_Verantw_Mitarbeiter","")
         Set item = doc.ReplaceItemValue("Next","")
         Set item = doc.ReplaceItemValue("Bearbeiter","")
         ret_eval = Evaluate(|@SetField ("History";(@Text(@Now)+" reaktiviert von " + @Name([CN];@UserName)):History);@True|,doc)
         Call doc.save(True,True)
         Set doc = coll.GetNextDocument(doc)
      Wend
      
      If coll.Count = 1 Then
         Messagebox "Der Call befindet sich jetzt wieder im Status -Gesendet-.", 64, "Information"
      Else 
         Messagebox "Die Calls befinden sich jetzt wieder im Status -Gesendet-.", 64, "Information"
      End If          
      
   End If
   
End Sub 

Ich hab' mir nur gedacht, dass die Lösung mit Evaluate ein nicht gerade "stylischer" Trick ist. Deswegen schrieb ich, dass ich dachte, es seie nicht gerade elegant. Damit war aber nicht Glombis Vorschlag gemeint, sondern meine Umsetzung.
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 09.01.04 - 16:02:33
Hallo, bifi,

ich habe mal ein bisschen herumgeschnitzt an Deinem Code (meinen konnte ich natürlich *nicht* sinnvoll testen), aber vielleicht helfen Dir meine Ideen zur Vereinfachung und "pure LS" weiter.
Voraussetzung ist, dass in Deinem Modul global "lsconst.lss" per %INCLUDE" eingebunden wird. Deine Massagebox-Konstanten lesen sich dann besser ;-)

HTH,
Bernhard

Code
   
   Dim s As New notessession
   Dim db As notesdatabase
   Dim coll As notesdocumentcollection
   Dim doc As NotesDocument
   Dim item As NotesItem
   Dim erg As Variant
   Dim ret_eval As Variant
   Dim szTextOption As String
   Dim aNewHistoryEntry (0 To 0) As String
   Dim nameActUser As New NotesName (s.UserName)   
   
   Set db=s.currentdatabase
   Set coll=db.unprocesseddocuments
   
   If coll.Count = 1 Then
      szTextOption = "er Call"
   Else
      szTextOption = "ie Calls"
   End If
   
   erg = Msgbox ("Soll d" & szTextOption & " reaktiviert werden? Fortfahren?", MB_OKCANCEL + MB_ICONEXCLAMATION, "Hinweis")
   
   If erg = IDCANCEL Then
      Exit Sub
   End If
   
   If coll.count > 0 Then
      Set doc = coll.GetFirstDocument
      While Not doc Is Nothing
         doc.CALL_Status = "Gesendet"
         doc.DocStatus = "1"
         doc.CALL_Verantw_Mitarbeiter = ""
         doc.Next = ""
         doc.Bearbeiter = ""
         
         aNewHistoryEntry (0) = Cstr (Now) & " reaktiviert von " & nameActUser.Common
         If doc.History (0) = "" Then
            doc.History = aNewHistoryEntry
         Else
            doc.History = Arrayappend (aNewHistoryEntry, doc.History)
         End If
         
         Call doc.Save (True, False, True)
         Set doc = coll.GetNextDocument (doc)
      Wend
      
      Messagebox "D" & szTextOption & ": Jetzt wieder im Status -Gesendet-.", MB_ICONINFORMATION, "Information"
      
   End If
Titel: Re:Von Formel zu Script
Beitrag von: Glombi am 09.01.04 - 16:08:41
Den Satz
"Auch wenn ich das nicht gerade elegant (aber halt Anfänger) mit Evaluate gelöst habe."
versteh ich nicht! Was soll an Evaluate nicht elegant sein?
Ich mache sowas meistens damit.

Aus didaktischen Gründen ist es jedoch gut, wenn Du Dich auch mit der "reinen" Scriptmethode beschäftigst.

Andreas
Titel: Re:Von Formel zu Script
Beitrag von: koehlerbv am 09.01.04 - 16:42:06
Jo, Andreas: Gegen Evaluate ist überhaupt nix zu sagen (nur in performancekritischen "Schlaufen" sollte man von Fall zu Fall nachschauen, was jeweils günstiger ist). Gegen den didaktischen Ansatz ist selbstverständlich auch überhaupt gar nichts einzuwenden !

Mit einem Y geht es nun ins Wochenende !

Herzliche Grüsse an alle AtNotes'ler von
Bernhard