Autor Thema: Lotus Script und Textfeld  (Gelesen 4168 mal)

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Lotus Script und Textfeld
« am: 10.05.05 - 10:10:06 »
Moin zusammen!

Ich habe in einer Maske ein Textfeld und ein Datumsfeld.
Diese nutze ich als Protokoll für eine kleine Anwendung.

Bisher habe ich das Protokoll ausschliesslich per Formelsprache
befüllt. Nun möchte ich aber an einer Stelle einen Eintrag mit Lotus
Script ergänzen.

Hier erstmal die Formel:

@If(prot_Date="";@SetField("prot_Date";@Now);@SetField("prot_Date"; prot_Date : @Now));
@SetField("prot_Action";prot_Action : "Auftrag wurde erfasst / bearbeitet");


Ich füge also jeden Eintrag in einer neuen Zeile an. In der Formel mach ich das mit dem ":" als Trennzeichen.

In Lotus Script habe ich es mal ähnlich versucht:


Call doc.ReplaceItemValue("prot_Date", prot_Date + ":" + Now)
Call doc.ReplaceItemValue("prot_Action", prot_Action + ":" + "Der Auftrag wurde komplett abgeschlossen")


Leider ohne Erfolg!

Kann mir jemand sagen wie ich das realisieren kann?

Vielen Dank im Voraus!

Gruß

René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Lotus Script und Textfeld
« Antwort #1 am: 10.05.05 - 10:17:49 »
Leider ohne Erfolg!


Perfekte Fehlerbeschreibung, man weiss gleich, was schief läuft ......  :-[



Das sind Multivalue-Felder, die lassen sich in Script so nicht bearbeiten. Zudem sind Listen in Script deutlich anders realisiert als in @Formel. Im Grunde genommen ist es nicht sehr sinnvoll, hier die Formel durch Script zu ersetzen.

Zum Thema selber: Schau mal in der Hilfe die Methoden GetItemValue und AppendToTextList an, das geht dann mal fürs Textfeld. Fürs Datumsfeld wird es komplizierter, da muss man das alte Feld in einen Array auslesen und dann wieder über ReplaceItemValue zurückschreiben.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Re: Lotus Script und Textfeld
« Antwort #2 am: 10.05.05 - 10:36:31 »
Hi Semeaphoros!

Vielen Dank für die prompte Antwort.

Es ist so, das ich bei bestimmten Aktionen (Formeln) einen Protokolleintrag hinzufüge.

Im Querysave der Maske wir dann per Script abgeprüft ob alle Statusfelder den Status "abgeschlossen" tragen. Sollte dies bei allen Statusfeldern der Fall sein, so wollte ich
im Protokoll den Eintrag "Der gesamte Auftrag wurde abgeschlossen" ausgeben.

Weiss nicht wie ich das sonst steuern soll. Könnte ich evtl. per Lotus Script einen Agenten
aufrufen? Dieser sollte nur dann ausgeführt werden wenn bei den Statusfeldern der Status abgeschlossen ist.

Gibt es alternativen?

Gruß René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Lotus Script und Textfeld
« Antwort #3 am: 10.05.05 - 10:40:51 »
Schau Dir in LotusScript die Evaluate Funktion/Statement an
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline reraru

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Geschlecht: Männlich
Re: Lotus Script und Textfeld
« Antwort #4 am: 10.05.05 - 13:46:59 »
Mahlzeit!

Ich bin ersteinmal verwirrt. Werde mal schauen wie ich das Problem nun löse.

Vielen Dank erstmal!

Gruß René
System:
Lotus Notes 8.5.2 / Lotus Domino 8.5.2 FP2
Notes-Formelsprache (wenig Script-Kenntnisse)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Lotus Script und Textfeld
« Antwort #5 am: 11.05.05 - 00:04:56 »
Ich würde sagen, Du kannst es machen wir Pfarrer Nolte: So oder so.

Hier die Variante mit LS:
Code
Sub Click (Source As Button)
	
	Dim ws As New NotesUIWorkspace
	Dim docCurrent As NotesDocument
	Dim vDTList As Variant
	Dim vActDT As Variant
	
	Set docCurrent = ws.CurrentDocument.Document
	
	If Not (Isdate (docCurrent.DTList (0) )) Then
		docCurrent.DTList = Now
	Else
		vDTList = docCurrent.DTList
		vActDT = Now
		vDTList = Arrayappend (vDTList, vActDT)
		docCurrent.DTList = vDTList 
	End If
	
	Call ws.ViewRefresh
	
End Sub

Zu beachten ist, das Arrayappend eine etwas fragile Konstruktion ist (ich habe dafür eine eigene Routine und verzichte komplett auf Arrayappend): Wenn Du nicht den Umweg über vActDT = Now gehst, sondern als zweiten Parameter gleich Now einsetzt, kannst Du Quincy (R5) oder dem NSD (R6) bei der Arbeit zusehen - Notes geht gnadenlos krachen. Vorteil: Wenn Du danach den Desktop komprimierst (ein Totalcrash ist eine hervorragende Möglichkeit dafür  ;D ), dann wird dieser anschliessend wieder wunderbar klein.. Nur nicht wundern, dass einige Icon längst gelöschter DBs wieder auftauchen  ;)


Und hier die kürzere Variante: Der Rückgriff auf die mächtigen und meist effektiven @functions via Evaluate:
Code
Sub Click (Source As Button)
	
	Dim ws As New NotesUIWorkspace
	Dim docCurrent As NotesDocument
	Dim vDTList As Variant
	Dim vActDT As Variant
	
	Set docCurrent = ws.CurrentDocument.Document
	
	If Not (Isdate (docCurrent.DTList (0) )) Then
		docCurrent.DTList = Evaluate ("@Now")
	Else
		docCurrent.DTList = Evaluate ("DTList : @Now", docCurrent)
	End If
	
	Call ws.ViewRefresh
	
End Sub

Anmerkung:
Ich habe für diese Snippets auf ErrorHandler verzichtet. Das ist m.E. für Prinzipbeispile dieser Art unnötig. Ausserdem hat jeder anständige Programmierer da sowieso eigene Standards.
Und: Die Variante mit Evaluate lässt sich mittels @Trim noch verfeinern und auf eine (eigentliche) Zeile eindampfen. Logisch. Für die Gegenüberstellung habe ich es aber mal so gelassen.

HTH,
Bernhard
« Letzte Änderung: 11.05.05 - 00:07:21 von koehlerbv »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz