Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Dubidu am 19.03.08 - 09:09:58

Titel: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 09:09:58
Hallo,
ich eigne mir gerade die Basics von LotusScript an und ein Beispiel in einem LotusScript-Buch, das schon etwas älter ist, will einfach nicht funktionieren:

Code
Sub Click(Source As Button)
	Dim ns As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Set db = ns.CurrentDatabase
	
	Dim doc As NotesDocument
	Set doc = New NotesDocument(db)
	
	doc.form = "FormOne"
	doc.FieldOne = "Created by View ActionScript"
	doc.SaveTrue, True
	
	Messagebox "New doc created, shouldn't be visible"
	
	ws.ViewRefresh
	
	Messagebox "New doc should now be visible"
	
	
End Sub

Sowohl bei die Methode "form" als auch "FieldOne" wurden bei mir beim Abtippen nicht automatisch angezeigt.
Beim Ausführen der Anwendung bekomme ich die Fehlermeldung "Illegal Use of Property".

Was genau mache ich falsch?!

Danke, im Voraus!

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 19.03.08 - 09:12:29
Es muss heissen "Call doc.save......"

Lies dir bitte dazu die Designer-Hilfe durch. Da gibt es sehr viele + gute Beispiele.

Dann fehlt da nooch ein Dim doc as.....


Benutze im Designer auch immer die Option declare.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: DerAndre am 19.03.08 - 09:14:20
Und der vielgeliebte Errorhandle.

Direkt angewöhnen.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Axel am 19.03.08 - 09:14:30
Sowohl bei die Methode "form" als auch "FieldOne" wurden bei mir beim Abtippen nicht automatisch angezeigt.
Beim Ausführen der Anwendung bekomme ich die Fehlermeldung "Illegal Use of Property".

Form und FieldOne sind keine Methoden sondern Felder innerhalb der Maske. Wobei das Feld Form ein internes Feld ist und den Namen der Maske enthält.

Die Fehlermeldung "Illegal...." kommt wahrscheinlich von der Save-Anweisung. Hier musst du ein Call davor setzen.

Die Zeile muss so aussehen:  Call doc.Save(True, True)


Axel
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: m3 am 19.03.08 - 09:14:33
1) "Form" und "FieldOne" sind keine Methoden, sondern Attribute bzw. Felder in der Notes-Diktion

2) "Save" wäre eine Methode ("SaveTrue" allerdings nicht), die man dann aber auch entsprechend aufrufen muss
Code
Call doc.Save( True, True )
Die von Dir verwendete Syntax
Code
doc.SaveTrue, True
wirft natürlich einen Fehler, steht so aber auch sicher nicht in dem Buch.

Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Axel am 19.03.08 - 09:16:08
Dann fehlt da nooch ein Dim doc as.....

Das ist aber vorhanden.

Nach Set db = ....

Axel
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 09:17:48
Und doc.form ist keine Methode sondern ein Feldname. Genauso wie doc.FieldOne. Und wenn das in der verkürzten Notation angesprochen wird, dann musst du es so schreiben doc.Form(0).

Und doc.savetrue gibt es auch nicht.

Welches Script Buch ist das eigentlich?
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: m3 am 19.03.08 - 09:20:15
Und doc.form ist keine Methode sondern ein Feldname. Genauso wie doc.FieldOne. Und wenn das in der verkürzten Notation angesprochen wird, dann musst du es so schreiben doc.Form(0).
Wenn er sie auslesen würde - aber er setzt sie ja, da ist das (0) nicht notwendig, odrrr?
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 09:22:16
Stimmt. Wobei ich das beim Setzen mittlerweile wirklich hassen gelernt habe.
Sinnvoller ist eigentlich immer der Weg über das Notesitem.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 09:26:43
Hi,
danke, an alle, für die schnelle Antworten!
Ich hatte ein Leerzeichen vergessen, denn mit
Code
doc.Save True, True

funktioniert es und es steht so auch im Buch!

Allerdings kann ich nicht erkennen, was nun zusätzlich sichtbar sein soll!

Zitat
Und doc.form ist keine Methode sondern ein Feldname.

Was genau soll das sein? In der Designer-Hilfe konnte ich dazu nichts finden (womöglich weil ich nicht die richtigen Stichwörter eingebe).

Zitat
Welches Script Buch ist das eigentlich?

"Lotus Notes and Domino R5 Development" von Deborah Lynd & Steven Kern.

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 19.03.08 - 09:29:01
Lies dir am besten in der Designer-Hilfe solche Kapitel durch wie:

- Masken erstellen
- Feldnamen
- Ansichten erstellen
- usw usw.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Glombi am 19.03.08 - 09:31:13
Aus der Designer Hilfe zur Methode "ReplaceItemValue" der Klasse "NotesDocument":

"Extended class" syntax
You can also change an item's value using the NotesDocument "extended class" syntax, which eliminates the need for ReplaceItemValue. For example, you have the following script:

Dim item As NotesItem
Set item = doc.ReplaceItemValue _
( "Subject", "Update on stock options" )
Call doc.Save( False, True )
You can achieve the same result by doing the following:
doc.Subject = "Update on stock options"
Call doc.Save( False, True )

This syntax lets you treat NotesDocument as an "extended class" by using an item name as if it were a property of NotesDocument. In the example above, "Subject" is used as if it is a property of the NotesDocument class. The result is the same as if you used ReplaceItemValue, except that ReplaceItemValue returns a NotesItem object representing the item you just created, and the IsSummary property defaults to True.



Das kann man sozusagen als Abkürzung verwenden. Diese Art ist aber nicht so performant wie ReplaceItemValue.



Andreas
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: DerAndre am 19.03.08 - 09:44:06
Und eine aktuelle Version des Buches wäre bestimmt auch nicht schlecht.
Lektüre gibt es auch beim Herdt-Verlag.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 09:57:10
Hi,
danke, für die Erklärungen!
Trotzdem kann ich nirgends erkennen, was bei meiner Anwendung eingeblendet werden soll nach dem ich das NotesUIWorkspace refreshe! :(

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 19.03.08 - 09:59:58
Zitat
Trotzdem kann ich nirgends erkennen, was bei meiner Anwendung eingeblendet werden soll nach dem ich das NotesUIWorkspace refreshe!

Meinst Du jetzt das Doc oder die Messagebox ?
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 10:02:09
Das im Hintergrund erstellte neue Dokument sollte dann in deiner Ansicht auftauchen.
Das ist genau das was das ws.viewRefresh bezwecken soll.

Es wird das aber vermutlich nicht tun. Denn diese Art Feldern Werte zuzuweisen setzt das Issummary Flag des Notesitems nicht. Und das wird wiederum in Ansichten gebraucht damit er den Wert darstellen kann.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: koehlerbv am 19.03.08 - 10:14:10
Denn diese Art Feldern Werte zuzuweisen setzt das Issummary Flag des Notesitems nicht. Und das wird wiederum in Ansichten gebraucht damit er den Wert darstellen kann.

Doch, das tut es, Thomas.

Bernhard
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 10:21:15
Du hast recht Bernhard. Falscher Film.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 10:29:10
Zitat
Trotzdem kann ich nirgends erkennen, was bei meiner Anwendung eingeblendet werden soll nach dem ich das NotesUIWorkspace refreshe!

Meinst Du jetzt das Doc oder die Messagebox ?

Nein, das neu erstelle Dokument meine ich.

Ich habe es mal mit der längeren Methode versucht. Da passiert auch nichts.

Code
Sub Click(Source As Button)
	Dim ns As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Set db = ns.CurrentDatabase
	
	Dim doc As NotesDocument
	Set doc = New NotesDocument(db)
	
	'doc.form = "FormOne"
	'doc.FieldOne = "Created by View ActionScript"
	
	Dim item As NotesItem
	Set item = doc.ReplaceItemValue _
	( "FormOne", "Created by View ActionScript" )	
	item.IsSummary = True
	doc.Save True, True
	
	Messagebox "New doc created, shouldn't be visible"
	
	ws.ViewRefresh
	
	Messagebox "New doc should now be visible"
	
	
End Sub

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Axel am 19.03.08 - 10:33:28
Ich habe es mal mit der längeren Methode versucht. Da passiert auch nichts.

Was heißt: "Da passiert auch nichts"?

Ein bisschen genauer musst du das schon definieren.  Meine Kristallkugel befindet sich schon im Osterurlaub.  ;)


Axel
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Glombi am 19.03.08 - 10:37:30
Anstelle von
Set item = doc.ReplaceItemValue _
   ( "FormOne", "Created by View ActionScript" )   
muss es heissen:

call doc.ReplaceItemValue("Form","FormOne")
call doc.ReplaceItemValue("FieldOne","Created by View ActionScript")

set item = doc.GetFirstItem("Form")
item.IsSummary = True

set item = doc.GetFirstItem("FieldOne")
item.IsSummary = True



Wobei m.M. nach das IsSummary automatisch gesetzt wird. Es gab mal vor langer Zeit den Bug, aber in Notes 7 gehts auf jeden Fall ohne!


Wenn das Dokument immer noch nicht in Deiner Ansicht angezeigt wird, dann solltest Du hier mal die SELECT Formel der Ansicht posten!

Andreas
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 10:39:56
Was du da programmiert hat ist eine Aktion die von einer Ansicht aus aufgerufen werden soll.
So erste Frage. Hast du den Code auch in eine Aktion verpackt?
Zweite Frage. Rufst du das auch von der Ansicht aus auf?

Ansonsten gilt Axels Satz. Die Kristallkugeln, Kaffeesätze Tarok Karten und anderes Wahrsagematerial sind leider schon in Urlaub. Mit Kurzbeschreibungen und Sätzen wie "Da passiert auch nichts" kommt man nicht wirklich weiter.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 10:49:34
Was du da programmiert hat ist eine Aktion die von einer Ansicht aus aufgerufen werden soll.
So erste Frage. Hast du den Code auch in eine Aktion verpackt?

Ja, ich habe das in einem Button gepackt, wobei der Code nach dem Klick auf den Button ausgeführt wird.

Zitat
Zweite Frage. Rufst du das auch von der Ansicht aus auf?

Ja, ich klicke auf NotesPreview und ich komme dann in Lotus Notes 7 rein.
Dann drücke ich den Button und das einzige was passiert ist, dass die Messageboxen auftauchen, aber ich sehe kein neu erstelltes Dokument!

Hier der neue Code.
Code
Sub Click(Source As Button)
	Dim ns As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Set db = ns.CurrentDatabase
	
	Dim doc As NotesDocument
	Set doc = New NotesDocument(db)
	
	'doc.form = "FormOne"
	'doc.FieldOne = "Created by View ActionScript"
	
	Dim item As NotesItem
	'Set item = doc.ReplaceItemValue _
	'( "FormOne", "Created by View ActionScript" )	
	
	Call doc.ReplaceItemValue("Form","FormOne")
	Call doc.ReplaceItemValue("FieldOne","Created by View ActionScript")
	
	Set item = doc.GetFirstItem("Form")
	item.IsSummary = True
	
	Set item = doc.GetFirstItem("FieldOne")
	
	item.IsSummary = True
	doc.Save True, True
	
	Messagebox "New doc created, shouldn't be visible"
	
	ws.ViewRefresh
	
	Messagebox "New doc should now be visible"
	
	
End Sub

Auch hier wird kein neues Dokument, wie von mir erwartet, erstellt.

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 10:52:38
Wie sieht die SELECT FORMEL deiner Ansicht aus. Andreas hat das zwar schon gefragt aber nur zur Sicherheit ....
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 19.03.08 - 11:00:25
Wie sieht die SELECT FORMEL deiner Ansicht aus. Andreas hat das zwar schon gefragt aber nur zur Sicherheit ....

Ich habe gar keine View erstellt, weil ich dachte, dass das alles der Code macht. :(

Wie muss denn die View aussehen, damit der Code auch funktioniert?

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 19.03.08 - 11:01:52
Ich denke mal, hier weiterzumachen ist sinnlos.
Lies erst einmal ein paar Seiten und eigne dir die Basics an.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 19.03.08 - 11:06:41
ARRGL
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 25.03.08 - 15:45:17
Also Leutz. Ich denke, ich bin ein Schritt weiter (siehe Screenshot). Die Felder "form" und "FieldOne" habe ich nun angelegt, aber leider öffnet sich immernoch kein neues Dokument, der in den Feldern irgendetwas hineinschreibt.

Hier der aktuelle Code:

Code
Sub Click(Source As Button)
	Dim ns As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim db As NotesDatabase
	Set db = ns.CurrentDatabase
	
	Dim doc As NotesDocument
	Set doc = New NotesDocument(db)
	
	doc.form = "FormOne" 'sets the form field for the new document
	doc.fieldOne = "Created by View Action Script"
	
	Call doc.Save(True, True)
	
	Messagebox "New doc created, shouldn't be visible"
	
	ws.ViewRefresh
	
	Messagebox "New doc should now be visible"
	
End Sub

Nach dem die Messageboxen aufgerufen werden, tut sich äußerlich nichts. Alles ist genauso, wie nach dem ich das Programm frisch compiliert habe (aus der Sicht eines Endanwenders).

Weiß jemand weiter?

Liebe Grüße
Giordano

PS: Das Screenshot wurde im Entwicklungsmodus geschossen, so dass ihr die Namen der Felder erkennen könnt.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 25.03.08 - 15:49:31
Taucht das Dokument denn in einer Ansicht auf ?

Oder erhöht sich in den Datenbankeigenschaften die Anzahl der Dokumente ?
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Thomas Schulte am 25.03.08 - 15:51:02
Liest du überhaupt was man dir schreibt.

Diese Aktion KANN NUR AUS EINER ANSICHT HERAUS FUNKTIONIEREN.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: m3 am 25.03.08 - 15:52:01
Ich bin zwar nicht der "Leutz", sondern der Martin, aber ich antworte trotzdem einmal.

1) Wer oder was ist der Dokument, "der in den Feldern irgendetwas hineinschreibt"? Den kenn ich nicht. Ist das ein Freund von Dir?

2) Mit "Nach dem die Messageboxen aufgerufen werden, tut sich äußerlich nichts. Alles ist genauso, wie nach dem ich das Programm frisch compiliert habe (aus der Sicht eines Endanwenders)." meinst Du vermutlich, dass die Dokumente nicht in der View (Ansicht) angezeigt werden.
Da kann man nur auf die Postings von Klaus und Thomas weiter oben verweisen, die Du bis jetzt geflissentlich ignoriert hast.
View erstellen, SELECT-Formel entsprechend wählen und dann geht das schon.

Ansonsten siehe die Postings von Thomas in diesem Thread.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 25.03.08 - 16:28:40
Danke an alle, die mir geantwortet haben.
Sorry, manche Infos sind einfach nicht in mein Hirn eingedrungen, da mir vieles wie Fachchinesisch vorkam.
Jedenfalls funktioniert jetzt dank euch alles wie gewünscht! :)

Eine kleine Sache habe ich noch:

Wenn ich eine neue View erstelle, sind standardmäßig auch vorgefertigte Actions dabei wie z. B. Edit.
Bei der ersten View, die ich erstellt habe, hat die Edit-Action noch funktioniert, aber wenn ich eine neue View erstelle, scheint sie alles von der erst erstellten zu erben wie z. B. die Spalten, die SELECT-Formel und die zusätzlichen Actions.
Wenn ich hier nun den Edit-Button drücke, bekomme ich folgende Fehlermeldung:

"Cannot locate FormOne"
"Cannot locate Default Form"

Weiß hier jemand weiter?

EDIT: Wahrscheinlich muss ich irgendwo den Namen der Form angeben.

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: ata am 25.03.08 - 20:17:26
... das Dokument soll mit einer bestimmten Maske geöffnet werden, die im Design der Datenbank nicht enthalten ist - eigentlich spricht die Fehlermeldung Bände - und da auch keine Vorgabemaske definiert wurde geht nichts auf...

Toni
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Dubidu am 26.03.08 - 10:25:46
Hallo,
ich habe den Fehler gefunden.
Scheinbar ist doc.form ein eigenes festdefinietes Textfeld, wo man den Namen der zu öffnenden Form angibt.
Nach dem ich das getan habe, funktioniert alles wie gewünscht.

Danke, für eure Hilfe! :)

Liebe Grüße
Giordano
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: klaussal am 26.03.08 - 10:29:21
Zitat
Scheinbar ist doc.form ein eigenes festdefinietes Textfeld, wo man den Namen der zu öffnenden Form angibt.

 ??? ??? ???

Ich wiederhole meine Aussage:
Zitat
Lies erst einmal ein paar Seiten und eigne dir die Basics an.
Titel: Re: Nicht vorhandene Methode in NotesDocument?
Beitrag von: Axel am 26.03.08 - 10:33:10
Scheinbar ist doc.form ein eigenes festdefinietes Textfeld, wo man den Namen der zu öffnenden Form angibt.
Nach dem ich das getan habe, funktioniert alles wie gewünscht.

Das hat man dir in den ersten Antworten schon geschrieben.

Axel