Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: dani_blues am 10.07.08 - 13:22:49

Titel: Formel in Lotus Script ausführen
Beitrag von: dani_blues am 10.07.08 - 13:22:49
Hallo zusammen, ich habe bereits in diesem Thread http://atnotes.de/index.php?topic=41643.0 nach einer Lösung für mein Problem gefragt.

Nachdem dort keine Antwort kam, probier ich es jetzt einfach über einen neuen Thread, da es sich ja eigentlich um ein neues Problem handelt.

Meine Frage: Wie bekomme ich diese Formel in das Exiting eines Feldes? Da geht nur Lotus Script.

@SetField("alter";@DbLookup("":"NoCache"; ""; "Ansicht"; konvert1_2; "Alterandersdok"));
@If(@IsError(alter);@Prompt([Ok];"Hinweis";"Keine Übereinstimmung gefunden");"")

Gruss und Danke
Dani
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: koehlerbv am 10.07.08 - 13:27:41
Im anderen Thread ist Dir aber auch schon gesagt worden, dass Dein Konstrukt im Exiting Event nichts taugt. Kein Benutzer ist verpflichtet, das Feld auch zu verlassen.

Bau das in LS (NotesView.GetDocumentByKey) ins PostRecalc rein, dann wird das auch im QuerySave ausgeführt und bei F9. Und ins Exiting packst Du ein NotesUIWorkspace.ViewRefresh ein - das triggert dann das PostRecalc beim Verlassen des Feldes.

Bernhard
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: dani_blues am 10.07.08 - 14:24:04
Dankeschön!

Wenn ich nun diesen Code hinter eine Schaltfläche zum testen lege, erscheint erst der Fehler: Object variable not set
danach: Invalid key value type.

Hängt es wohl mit key = konvert_z1    zusammen?
konvert_z1 ist ein Feld.



Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   key =  konvert_z1
   Set db = session.CurrentDatabase
   Set view = db.GetView ("VorbelegteAlterView" )
   Set doc = view.GetDocumentByKey (key )
   If Not (doc Is Nothing) Then
      Messagebox "$" & doc.GetItemValue ("Alter")(0),, _
      "Alter"
   Else
      Messagebox "VorbelegteAlterView " + key,, "Not found"
   End If
End Sub

W

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   key =  konvert_z1
   Set db = session.CurrentDatabase
   Set view = db.GetView ("VorbelegteAlterView" )
   Set doc = view.GetDocumentByKey (key )
   If Not (doc Is Nothing) Then
      Messagebox "$" & doc.GetItemValue ("Alter")(0),, _
      "Alter"
   Else
      Messagebox "VorbelegteAlterView " + key,, "Not found"
   End If
End Sub
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: m3 am 10.07.08 - 14:28:40
Na dann würde ich das Feld "konvert_z1" auch als solches verwenden NotesDocument.GetItemValue(...).

Im Gegensatz zur @-Formelsprache stehen einem die Felder in Lotusscript nicht automatisch als Variablen zur Verfügung.

Titel: Re: Formel in Lotus Script ausführen
Beitrag von: eknori am 10.07.08 - 14:29:01
Zitat
Object variable not set

Benutze Option Declare und den debugger. Dann lösen sich solche Fehler sofort in Wohlgefallen auf.
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: dani_blues am 10.07.08 - 14:41:54
Bei dem NotesItem.... kommt lt Debugger ein Variant does not contain an object

Das Script sieht so aus:

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   NotesDocument.GetItemValue(konvert_z1)
   key =  konvert_z1
   Set db = session.CurrentDatabase
   Set view = db.GetView ("VorbelegtealterView" )
   Set doc = view.GetDocumentByKey (key )
   If Not (doc Is Nothing) Then
      Messagebox "$" & doc.GetItemValue ("alter")(0),, _
      "alter"
   Else
      Messagebox "VorbelegtealterView " + key,, "Not found"
   End If
End Sub
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: koehlerbv am 10.07.08 - 14:42:58
Warum sieht das immer noch so aus? Martin hat doch den Fehler schon genannt samt Lösung.

Bernhard
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: dani_blues am 10.07.08 - 14:49:21
Ja aber ich hab doch das Feld konvert_z1 als Variable NotesItem.... angesprochen?!?

Hatte ich vorher nicht.  :-:

Generell: Wenn ich mir aus der Notes-Hilfe den Code rauskopiere in meine Schaltfläche und es exitstieren genau die Ansichten und Felder -> funktioniert das dann oder muss man diesem Code noch etwas hinzufügen?
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: koehlerbv am 10.07.08 - 14:53:20
Bevor Du Code kopierst, solltest Du Dir die Dokumentation dazu durchlesen. Dein NotesDocument.GetItemValue ist vollkommener Nonsens.

Bernhard
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: jokky am 12.12.08 - 12:35:58
Na dann würde ich das Feld "konvert_z1" auch als solches verwenden NotesDocument.GetItemValue(...).

Im Gegensatz zur @-Formelsprache stehen einem die Felder in Lotusscript nicht automatisch als Variablen zur Verfügung.


Titel: Re: Formel in Lotus Script ausführen
Beitrag von: m3 am 12.12.08 - 12:45:21
Ja, aber Du solltest schon den Unterschied zwischen einem Klassennamen wie "NotesDocument" und einer Instanzvariablen wie "doc", über die dann die Methode einer Klasse aufgerufen werden kennen/verstehen.
Ansonsten würde ich mal mit einem Programmier-Grundkurs beginnen.
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: SlyFox am 12.12.08 - 15:39:37
Versuch's doch mal mit

Code
key = doc.GetItemValue(konvert_z1)

Christoph
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: koehlerbv am 12.12.08 - 20:13:23
Christoph, das ist auch falsch. Und wir sollten uns hier auch keine Mühe mehr geben: Daniel war hier vor genau einem Monat das letzte Mal angemeldet.

Jetzt aber: Warum ist Dein Hinweis falsch? Er würde zu einem type mismatch führen, da
NotesDocument.GetItemValue
ein Array zurückliefert, der "Einsatzort" NotesView.GetDocumentByKey jedoch einen skalaren Wert erwartet.

Ich schlage jetzt (für meine eigene Person!) hier ein Ei darüber. Daniel "dani_blue" ("blue" wäre ich dann wohl auch) ist sehr offensichtlich mit einer Aufgabe konfrontiert, der er nicht gewachsen ist, und in seiner Organisation kann er ja wohl zu Weiterbildungszwecken nichts aktivieren. Das, was in *den* Dokumentationen steht, mag er auch nicht nachlesen.

Dieses von manchen vielleicht als "brutalen Text" erscheinende Posting mag vielleicht als Erklärung dienen, warum ich auf manche Anfragen einfach nicht mehr beantworte.

Bernhard
Titel: Re: Formel in Lotus Script ausführen
Beitrag von: dani_blues am 17.12.08 - 12:11:14
Das glaub ich ja etz doch nicht. Ich hatte im Juli ein Problem. Aus irgendeinem Grund wird das Thema wieder aufgegriffen, und dann geht der Superhirni Koehlersdings ab wie 80er Rettich.
Weißte was Koehlersdings: ich habe übringends bereits im Juli die gutgemeinten Ratschläge im Forum befolgt, mich informiert und es hat gefunzt.

Wenn ich nun nur noch 1 bis 2 Wochen weitergelernt hätte, könnte ich mindestens genauso arrogant durchs Forum streifen wie Du.

Und bitte: Unterstell niemanden hier im Forum Inkompetenz. Den dafür ist glaub dieses Forum nicht gedacht. Prüf lieber selber mal deine soziale Kompetenz!

Titel: Re: Formel in Lotus Script ausführen
Beitrag von: gossifu am 17.12.08 - 13:54:52
Hallo dani_blues,

Du brauchst eine Objektvariable für dein aktuelles Dokument und eine für das zu beschreibende.

Das aktuelle holst Du Dir über den NotesUIWorkpace (erst ein UIDoc setzen und davon das Document ableiten)
Dann setzt Du in eine Variable x den Wert aus dem aktuellen Dokument.
Und benutzt diesen Wert bei der Suche.

Code
Sub Click(Source As Button)
   Dim ws as New NotesUIWorkspace 'ZUSATZ
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim uidoc as NotesUIDocument   'ZUSATZ
   Dim currDoc as NotesDocument   'ZUSATZ
   
   Set uidoc = ws.CurrentDocument
   Set CurrDoc = uidoc.Document
   key =  currDoc.GetItemValue("konvert_z1")(0) 'Um genau das Feldelement zu bekommen Achso, war ein Edit
   Set db = session.CurrentDatabase
   Set view = db.GetView ("VorbelegtealterView" )
   Set doc = view.GetDocumentByKey (key, true )'Beachte bei GetDocumentByKey exakte Treffer
   If Not (doc Is Nothing) Then
      Messagebox "$" & doc.GetItemValue ("alter")(0),, _
      "alter"
   Else
      Messagebox "VorbelegtealterView " + key,, "Not found"
   End If
End Sub

mfg

Kjeld