Beiträge von Patrick

    @Brane: Dann setztst du wohl im Backend einen falschen Datentyp, welcher im Frontend, nach deinem Save von Notes automatisch korrigiert wird.


    Zur Fehlersuche in einem solchen Fall könnte man ja auch anfangs ein einziges Feld nehmen und dann den Query immer erweitern, bis man auf das "falsche" Feld stösst.


    Wir sehen hier leider, weder deinen Code, noch deinen Debugger...

    taurec: Ich hatte es bei mir getestet. Es scheint tatsächlich nicht zu gehen mit dem ArrayAppend, obwohl im Feld eine Zahlenliste steht und mit einer Zahl Array-appended wird...
    Im Debugger hat der Variant auch eine Zahlenliste angezeigt. Ich kann mir auch nicht erklären weshalb dieser Fehler kommt...


    Detti: Tipp: benutz doch die Code Funktion, um Code darzustellen...
    Das "Redim Preserve" kannst du dir eigentlich sparen, wenn du es so wie in meinem Beispiel machst. Du kennst ja am Anfang den Wert, in welchem das Array dimensioniert ist. Bei deiner Variante muss er bei jedem Loop im Speicher den Wert wieder anpassen... (Performance)

    Er scheint ein Problem mit den Datentypen zu haben, bei einer Zuweisung...


    Mit

    Code
    Redim arrZahl(Ubound(doc.Zahl)+1) As Currency
    	Dim i As Integer
    	For i=0 To Ubound(doc.Zahl)
    		arrZahl(i)=doc.Zahl(i)
    	Next i
    	arrZahl(i)=10
    
    	doc.Zahl=arrZahl


    geht's.
    (Einfach dem Array den entsprechenden Datentyp zuweisen).

    Nein, das gibt es leider nicht. Aber ich habe jetzt bemerkt, dass ich sowieso das falsche Feld hole!


    Ich muss nämlich den memberOf haben, nicht den member. Und mit dem memberOf kann man dann durchloopen. (Der member war glaub ich sowieso leer, bei meinen Usern. Der ist nur bei Gruppen-Objekten vorhanden, und ich hole die User-Objekte) :roll:


    Für alle die's interessiert, hier der Loop durch die Gruppen:

    Code
    Call ws.CurrentDocument.FieldAppendText("Userdata","MEMBER: ")
    		vMemberOf=objRecordset.Fields("memberOf").Value
    		If Isarray(vMemberOf) Then
    			Forall Group In vMemberOf
    				Call ws.CurrentDocument.FieldAppendText("Userdata", Group)
    				Call ws.CurrentDocument.FieldAppendText("Userdata", LSEnter)
    			End Forall
    		End If

    Wieso definierst du das Richtext Item als Variant?

    Code
    Dim rtitem As Variant


    Versuch's doch mit

    Code
    Dim rtitem As NotesRichTextItem


    Von wem wird das ganze ausgelöst? User oder Agent? Eventuell musst du die ECL beachten. Bei Agenten den Runtime Security Level. Das ExtractFile ist eine restricted Methode.

    Hallo taurec


    Das hab ich von einem Beispiel im Netz, welches ich gefunden habe...


    Aber auch ein

    Code
    Call ws.CurrentDocument.FieldAppendText("Userdata", objRecordset.Fields("member"))


    nützt nichts. Da verlangt er einen String.
    Ein CStr() darum herum bringt auch nichts. Ebenfalls

    Code
    objRecordset.Fields("member")(0)


    Da sagt er "Wrong number of arguments for automation object"

    Hallo allerseits


    Ich bin gerade daran ein Script zu schreiben um Active Directory Daten auszulesen. Hab' es dabei mit ADODB versucht und stehe nun mit einem Mehrfachwert-Feld des externen Objektes an.


    Folgender Code (testeshalber schreibe ich alles mal in ein Textfeld auf dem Formular):

    Code
    Dim objConnection As Variant	Set objConnection=CreateObject("ADODB.Connection")	objConnection.Open "Provider=ADsDSOObject;"	Dim ojbCommand As Variant	Set objCommand=CreateObject("ADODB.Command")	Set objCommand.ActiveConnection=objConnection	objCommand.CommandText= "<LDAP://dc=firma,dc=ch>;(objectCategory=User);distinguishedName,name,member;subtree"	Dim objRecordSet As Variant	Set objRecordSet=objCommand.Execute	Dim ws As New NotesUIWorkspace	While Not objRecordSet.EOF		Call ws.CurrentDocument.FieldAppendText("Userdata", "USER: " & objRecordSet.Fields("Name").Value)		Call ws.CurrentDocument.FieldAppendText("Userdata", LSEnter)		Call ws.CurrentDocument.FieldAppendText("Userdata",objRecordSet.Fields("distinguishedName").Value)		Call ws.CurrentDocument.FieldAppendText("Userdata", LSEnter)		Call ws.CurrentDocument.FieldAppendText("Userdata","MEMBER: ")		Call ws.CurrentDocument.FieldAppendText("Userdata", LSEnter & LSEnter)		objRecordSet.MoveNext	Wend	objConnection.Close


    Das Problem liegt nun beim objRecordSet.Fields("member"). Dies ist ein Multivalue Feld.
    Eine Zuweisung wie

    Code
    Cstr(oRecordset.Fields("member").Value)

    schlägt fehl. Und durch das Objekt kann ich nicht durchloopen, weil LS es nicht als Array "erkennt".
    Wenn ich den Wert einer Variable (Variant) zuweise, dann hat die Variable nachher den Wert NULL.
    Auch eine Zuweisung in der Art

    Code
    objRecordSet.Fields("member")(0).Value

    bringt nichts.


    Schlussendlich müsste es eigentlich einen Loop im Sinne von

    Code
    Forall element In objRecordSet.Fields("member")
    			Call ws.CurrentDocument.FieldAppendText("Userdata", element)
    		End Forall


    geben


    Kann mir jemand weiterhelfen?

    Ja, also OO Technisch wird das nicht korrekt sein, was ich mache hab ich in der Zwischenzeit bemerkt. Ich müsste nämlich eine Utility Klasse machen für meine "getMessage" Funktion, und dann diese Utility Klasse instanzieren.


    Aber deine Aussage muss ich entkräften, ein Methoden Aufruf einer Übergeordneten Klasse kann ich mit Klassenname..Funktionsaufruf machen. Hab ich auch in entsprechenden OO Beispiel-Datenbanken so gesehen. ...oder du meinst etwas anderes.
    Ich kann ihn natürlich auch mit Me.Funktionsaufruf machen, oder mit Funktionsaufruf. Das steht mir alles frei. Ich machs eigentlich nur mit Klassenname..Funktionsaufruf weil ich damit einen besseren Überblick habe wo die Funktion herkommt. Aber eigentlich von der Klassen-Logik her wäre es wohl besser ein Me.Funktionsaufruf zu machen.
    Aber die Erfahrung kommt halt erst durch die Anwendung. :D

    taurec: Nein, ich hab Option Declare eingeschaltet, und der Compiler "meckert" da gar nichts rum. :)


    leth: Das hab ich ja geschrieben, dass es mit "Me.Title" geht. Die Frage ist, weshalb es mit "ProUIMultiLanguage..Title" nicht funktioniert. Diese Syntax passt mir nämlich besser, da ich dann auf einen Blick sehe welche Klasse ich verändere/aufrufe. Grundsätzlich könnte ich sogar Title="" schreiben, das funktioniert auch. Aber die Pflegbarkeit der Klasse leidet dann arg darunter.


    Bei anderen Klassen hab auch immer mit "ProUIMultiLanguage..Title" gearbeitet, und es hat immer funktioniert, eben ausser jetzt, wenn ich das in einem ForAll Loop drin mache, da verliert er irgendwie den Fokus...

    Okay, stark vereinfacht:


    ScriptLibrary ProUIMultiLanguage:

    Code
    Public Class ProUIMultiLanguage	Private cTitle As String	Private cPrompt As String	Property Set Title As String		Me.cTitle=Title	End Property	Property Set Prompt As String		Me.cPrompt=Prompt	End Property	Public Function getMessage() As Integer		getMessage=Msgbox(Me.cPrompt,,Me.cTitle)	End Function	End Clas


    ScriptLibrary ProUIForm, vererbt von MultiLanguage:

    Code
    Class ProUIForm As ProUIMultiLanguage	Sub new(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)		On Event queryReCalc From Source Call queryReCalc	End Sub	Private Sub queryReCalc(Source As Notesuidocument, Continue As Variant)		Dim arrFields(1) As String		arrFields(0)="Feld1"		arrFields(1)="Feld2"		Forall Element In arrFields			'Me.Title="Feldnamen"			'Me.Prompt="Feld Name: " & Element			'Call Me.getMessage()			ProUIMultiLanguage..Title="Feldnamen"			ProUIMultiLanguage..Prompt="Feld Name: " & Element			Call ProUIMultiLanguage..getMessage()		End Forall	End SubEnd Class


    Dann hab ich ein Form.
    Im Options Teil:

    Code
    Use "ProUIForm"


    Im Declarations:

    Code
    Dim p As ProUIForm


    Im QueryOpen:

    Code
    Set p=New ProUIForm(Source, Mode, IsNewDoc, Continue)


    Nun, wenn ich die Properties und den Auftruf mit "ProUIMultiLanguage.." dann verliert er "Element", wenn ich (wie mein remark) den auftruf mit Me.Title etc mache, dann funzt es.

    Hallo zusammen


    Ich habe folgende Klassen:
    UIMultiLanguage
    mit Property Set und Get Title
    und Property Set und Get Prompt


    Dann eine Methode getMessage(), bei welcher eigentlich eine Messagebox mit den Properties angezeigt wird.


    Nun habe ich eine Klasse UIForm, bei welcher UIMultiLanguage vererbt wird. Dort will ich nun die Methode getMessage() aufrufen.
    Ich verändere dazu erst:
    UIMultiLanguage..Title="Titel"
    UIMultiLanguage..Prompt="Text zum Anzeigen"


    und dann rufe ich die mit:
    Call UIMultiLanguage..getMessage()
    die Funktion auf.


    Nun mache ich das ganze noch in einem:
    Forall Element in ArrrayField
    drin.


    Sobald er den Titel von UIMultiLanguage setzt, verliere ich in UIForm "Element"? Kann mir jemand weiterhelfen?


    Ist das überhaupt OO Konform wie ich das mache? Oder müsste ich UIMultiLanguage instanzieren und die Methode so ausführen (Dann funktionerts übrigens).


    Greets


    Nachtrag: Wenn ich in UIForm mit:
    Titel="Titel"
    Prompt="Text zum Anzeigen"
    Call getMessage()
    arbeite, dann funktionierts :-?