Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: C_T am 10.03.08 - 14:41:43

Titel: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 10.03.08 - 14:41:43
Hi @ all

ich habe da mal wieder ein kleines problemchen,
und zwar möchte ich gerne das die Namen aus einem Namens bzw. DIalogfeld (beides als Quelle das Addressbuch) nur mit Ihrem     Namen angezeigt werden.

Dies brauche ich zb beim Versenden von mails oder aktualisierung von Dokufeldern im Dokument.

Ich habe es zurzeit mit folgendem Evaluate versucht
(INFO:   an = Variant      NameAn = String)

NameAn = Cstr(Evaluate(|@name([CN];" | & an & | ")|))


Könnt Ihr mir vielleicht einmal helfen?

Vielen DANK

MFG Christian T.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 10.03.08 - 14:43:07
Hast du dir schonmal die Klasse NotesName angeschaut? Die bietet solche Funktionen ohne Evaluate direkt in Script.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: ata am 10.03.08 - 15:06:44
... das ist etwas zu wenig Code. Dein "an" ist vom Typ Variant, du verwendest die Variable im Evaluate aber als String.

Wie initialisierst du die Variable?

Toni
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 10.03.08 - 16:05:57
Zuzreit benutze ich die oben genannten Zeile in einem Selbstgeschrieben Mail Sub

ANbei der Code

Code
Sub SendMail (An,Art as String)
REM Standard
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uidoc As NotesUIDocument
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
	Set db = session.CurrentDatabase
	
	Dim item As notesitem
	Set item = doc.GetFirstItem("Dok")	
REM Mail Deklarationen
	Dim DocSend As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim richStyle As NotesRichTextStyle
	
	Set richStyle = session.CreateRichTextStyle
	
	
	Set DocSend = New NotesDocument(db)
	Set rtitem = New NotesRichTextitem(DocSend, "Body")
	DocSend.Form ="Memo"
	
	Dim commonuser As String
	commonuser = Cstr(session.CommonUserName)
	Dim NameAn As String
	NameAn = Cstr(Evaluate(|@name([CN];" | & an & | ")|))

               .........CODE.....

                END SUB
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 10.03.08 - 16:09:31
Ich sehe in deinem Code-Ausschnitt leider nicht, wo das "an" definiert und initialisiert wird.

EDIT: Ist ja ein Parameter der Prozedur, dann sag mal mit was das an aus den Aufrufern gesetzt wird.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 10.03.08 - 16:18:58
axo sry vergessen

explizit bei diesemaufruf habe ich das Problem.

Code
Sub Click(Source As Button)
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim db As NotesDatabase

	Dim item As NotesItem
	Dim ItemDok As NotesItem
	
	Set uidoc = workspace.CurrentDocument
	Set db = session.CurrentDatabase
	Set doc = uidoc.Document
	commonuser = session.CommonUserName

	flag = workspace.DialogBox( "fMessage" , False , False)
	If flag = True Then
		Set item = doc.GetFirstItem("send")
		Set ItemDok = doc.GetFirstItem("Dok")

		If doc.User(0) <> "" Then
			For i = 0 To Ubound(doc.User) 
				If Not item.Contains(doc.User(i)) Then
					Call mail(doc.User(i),"INFO")
					item.AppendToTextList(doc.User(i))
				End If				
			Next
		End If


Ich habe auch nachgeschaut ist ein Wert mit "CN=" in dem an drin.....
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: ata am 10.03.08 - 17:07:02
... du übergibst einen Variant, verwendest in deiner Sub Mail() aber einen String - konvertiere im Evaluate das "an" mit Cstr( an ) - dann sollte es gehen

Toni
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 10.03.08 - 21:04:49
Code
Sub Mail (An,Art As String)

Jetzt sehe ich es erst... Wenn ich mich jetzt nicht täusche, sollte sich die Parameterdefinition genauso verhalten, wie die Deklaration von Variablen:
Ein
Code
Dim An,Art As String
erzeugt dir offensichtlich zwei Variablen. Aber was nicht so offensichtlich ist: An ist vom Typ Variant und Art ist vom Typ String. Jetzt hast du zwei Alternativen: Die erste hat dir Anton schon genannt, nämlich die Konvertierung des Variants in einen String bei der Verwendung. Die andere ist, dass du deinen Parameter für die Prozedur auch zum String machst, dann brauchst du ihn bei Verwendung nicht konvertieren. Hierbei musst du halt wissen, wo du die Prozedur noch verwendest. Danach kannst du halt entscheiden, was für dich sinnvoller ist. Aber dem Code der Prozedur nach, würde ich den Parameter explizit zum String machen.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: ata am 10.03.08 - 22:18:14
... die Deklaration in der Sub ist "etwas" unsauber - es ist auch kein Variant notwendig - das wäre anders, wenn eine Textliste übergeben werden würde, was hier aber nicht ansteht...

Toni
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 11.03.08 - 08:06:44
SO habe das mal geändert, doch jeztt bekomme ich immernoch ein TypeMissmatch

Änderung:

Code
	NameAn = Cstr(Evaluate(|@name([CN];" | & an & | ")|))

zu

Code
	Dim NameT As String
	NameT = Cstr(an)
	NameAn = Cstr(Evaluate(|@name([CN];" | & NameT & | ")|))

Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 11.03.08 - 08:28:32
Bei welcher der Zeilen bekommst du denn die Meldung? Warum hast du nicht die Parameterdeklaration "aufgeräumt"? Dann müsstest du dir hier nicht diese Umwege machen.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: DAU-in am 11.03.08 - 08:29:06
Wo ist das 'doc'?

sorry, das muss gar nicht rein an der Stelle.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 11.03.08 - 08:38:20
Bei welcher der Zeilen bekommst du denn die Meldung?

Bei der Zeile mit dem Evaluate

Warum hast du nicht die Parameterdeklaration "aufgeräumt"? Dann müsstest du dir hier nicht diese Umwege machen.

was meinst du damit?
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 11.03.08 - 08:48:21
Mach den Parameter explizit zum String (das ist doch der Typ, den du eigentlich auch erwartest der Schreibweise nach), das habe ich vorher schonmal geschrieben... Also folgendermaßen sollte die Kopfzeile aussehen:
Code
Sub Mail (An As String, Art As String)

Und genau dieses Vorgehen solltest du dir auch zur Gewohnheit machen, sonst passiert dir so etwas bestimmt nochmal...
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 11.03.08 - 09:34:46
habe ich gemacht bringt leider trotzdem nicht den gewünschten erfolg, sondern nur den selben fehler...

Code
Sub Mail (An As String,Art As String)

.....CODE

Dim NameAn As String
NameAn = Cstr(Evaluate(|@name([CN];" | & An & | ")|))

.....CODE
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 11.03.08 - 09:55:45
Hm... Was sagt denn der Debugger?

Zieh' vielleicht mal die Zeile ein wenig auseinander und separiere Formelaufbau, Formelauswertung und Typkonvertierung voneinander. Dann siehst du bei welcher dieser drei Schritte es kracht.

Und noch eine Kleinigkeit, von der ich nicht weiß, ob es überhaupt schlimm ist: Schreib mal das Name bei @name mit einem Großbuchstaben.

Und noch eine Frage: Was machen die Leerzeichen vor und nach den Anführungsstrichen?
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: koehlerbv am 11.03.08 - 10:01:24
Evaluate gibt ein Array zurück - das Cstr führt daher logischerweise zu einem Type Mismatch ebenso wie die Zuweisung zu einem skalaren Wert.
Entweder also NameAn an Variant deklarieren und das Evaluate-Ergebnis dann mit NameAn (0) ermitteln, oder NameAn als String lassen und das Ergebnis wie folgt zuweisen: Evaluate (....) (0)

Markus:
@name ist absolut das gleiche wie @Name, die Leerzeichen sind auch egal.

HTH,
Bernhard
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 11.03.08 - 10:08:47
Jetzt ist klar, warum der Fehler kommt. Das hatte ich nicht bedacht mit dem Rückgabewert von Evaluate. Wieder was dazugelernt, genauso wie bei den Antworten auf meine beiden anderen Fragen (wobei ich die halb auch aus Interesse gestellt habe)... Danke Bernhard für die Aufklärung.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 11.03.08 - 10:37:02
Leider klappt auch das irgendwie nicht

folgender auszug


Code
Dim NameAn As Variant
Dim NameT As String
Dim var As Variant

NameAn = Evaluate(|@Name([CN];" | & an & | ")|)       <---- hier schon wieder das type missmatch
NameT = NameAn(0)
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: ata am 11.03.08 - 10:39:16
... hast du beim Aufruf einen String übergeben?

Toni
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: koehlerbv am 11.03.08 - 12:05:07
Wenn "an" wirklich vom Typ String ist, dann funktioniert der Code genauso, wie er da steht.

By the way: Statt Evaluate kann man auch mit der NotesName-Klasse arbeiten - NotesName.Common liefert dann ebenso genau das, was auch @Name ([CN]; ...) ergibt.

Bernhard
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 11.03.08 - 12:25:26
Und genau das über die Klasse NotesName habe ich in meinem ersten Posting schon geschrieben... Es wurde aber geflissentlich ignoriert...

Vor allen Dingen ist die Klasse NotesName an der Stelle bestimmt eine Ecke komfortabler und man muss nicht die Typen hin und her casten.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 13.03.08 - 11:27:36
@Markus (MadMetzger)
Sry das ich dich ignoriert habe war nicht so gemeint gomen



Ich habe dienen Ratschlag nochmal befolgt und es nochmals mit der NotesName Klasse ausprobiert und es klappt. Nochmal Vielen Dank an euch alle....
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: MadMetzger am 13.03.08 - 11:29:43
Schon in Ordnung... Wichtig ist, dass wir dir helfen konnten.
Titel: Re: Kleines Problem mit Namen und Evaluate
Beitrag von: C_T am 13.03.08 - 11:42:22
Nicht nur diesesmal..... Nochmals danke