Domino 9 und frühere Versionen > Administration & Userprobleme

Von Formel zu Script

<< < (3/3)

koehlerbv:
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

bificypdog:
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

--- Ende Code ---

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.

koehlerbv:
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

--- Ende Code ---

Glombi:
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

koehlerbv:
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

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln