Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Scotty67 am 25.05.10 - 14:41:05

Titel: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 25.05.10 - 14:41:05
...also entwicklungs-flasche :P - darf ich euch wieder quälen ?

ich lese in einer while-wend schleife mit getitemvalue z.B. email Adresse heraus - das funkt !
nur auslesen ist nicht genug ich sollte die gesammelt wegschreiben weil ich diese dann in einem neuen Dokument
brauche zum erstellen des SendTo Buttons

meine frage wie lege ich das array an und wie kann ich in der schleife die
werte dort hineinschreiben


in der 2ten stufe möchte ich dieses soeben erzeugte Array an eine neues Dokument übergeben, in dem neuen
dokument sollen die einzelnen arraywerte via Checkbox im Dokument nummer B anklickbar sein.....

vIELEN dank für Euer Feedback

LG/Hannes
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 25.05.10 - 15:28:35
Hier ein paar Brocken, aus denen Du Dir das zusammenbasteln kannst:

Dim meinarray As Variant
Redim meinarray (5) '-> jetzt 6 Elemente, Element 1 = meinarray (0)
Ubound (meinarray) '-> die Obergrenze, hier also jetzt 5
Redim Preserve meinarray (6) '-> jetzt ein Element mehr, die alten Einträge bleiben erhalten (wg. Preserve)
Redim Preserve meinarray (Ubound (meinarray) + 1)'-> jetzt noch ein Element mehr, aber dynamisch
meinarray (3) = "Onkel Otto" '-> das 4. Element hat jetzt den Wert "Onkel Otto"
NotesDocument.MeinFeld = meinarray '-> MeinFeld enthält jetzt den Inhalt von meinarray, dieses Feld könntest Du als Formel für Auswahl in dem Ankreuzfeld verwenden

Damit kommst Du doch bestimmt etwas weiter, oder?
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Klafu am 25.05.10 - 16:50:06
Eine etwas leichtere Darstellung aus der Hilfe zum Thema "Array"

Dim states(1 to 50) As String
states(1) = "Alabama"
states(2) = "Alaska"
states(3) = "Arizona"
' and so on.
Print states(2)
' Output: Alaska

Chris
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Axel am 25.05.10 - 18:51:39
Dim states(1 to 50) As String

Das würde ich mir von Anfang an nicht angewöhnen. Standardmäßig fängt Notes bei 0 an, also

Dim states(3) as String

Damit legst du eine Array-Variable mit 4 (0 - 3) Elementen an.

Du machst dir und anderen das Leben dadurch nur leichter, denn jede Dokumentation und auch jede Hilfestellung, z.B. in Foren gehen davon aus.

Axel
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 07:03:51
danke mal vorab - aber wie geht man an die sache ran wenn das auslesen von email adressen nicht abschätzbar ist ?
d.h. mal können es 20 mal 100 sein ?

ob die Übergabe der gesammelten Werte richtig ist ? vielleicht könnt ihr dazu noch etwas sagen ?

ich hätte mir mal folgendes zusammengestellt (das wichtigste halt)

Dim myNames () As Variant
...
in der while not schleifen
Redim Preserve myNames(arrayIndex)
myNames(arrayIndex) = emailAddress(0)
arrayIndex = arrayIndex + 1      

übergabe:
Set item = maildoc.ReplaceItemValue    ( "Empfaenger", myNames )
      
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: WildVirus am 26.05.10 - 07:27:41
Hallo Scotty,

nimm statt
Redim Preserve myNames(arrayIndex)
...
arrayIndex = arrayIndex + 1
doch das von Peter vorgeschlagene:
Redim Preserve meinarray (Ubound (meinarray) + 1)'-> jetzt noch ein Element mehr, aber dynamisch
denn das kommt mit einer Zeile aus und falls Dein maildoc eine normale Memomaske ist, dann sollte die Übergabe ein
Code
maildoc.SendTo = myNames
sein. Es sei denn, Du benötigst das Item nicht mehr im Folgecode.

CU,
Axel
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 07:39:14
Das sieht doch gut aus. Unabhängig davon, ob es nun 20 oder 100 sind, verlängerst Du mit jeder weiteren Adresse myNames mit Redim Preserve. Irgendwann könntest Du allerdings ein Größenproblem des Feldes bekommen (vielleicht > 3000 Adressen?), aber diese Grenze sollte eher theoretisch sein. Da Du die Adressen via Checkbox auswählen willst, sollten es sowieso nicht zuviele sein, sonst würde ich die Checkbox lieber sein lassen.

Sind alle Adressen unterschiedlich oder können die in den zu durchsuchenden Dokumenten doppelt auftreten? Bei Bedarf solltest Du noch dafür sorgen, dass doppelte Adressen nicht in myNames geschrieben werden.

Die Übergabe ist korrekt, alternativ kannst Du auch

maildoc.Empfaenger = myNames

schreiben, das Ergebnis ist identisch.
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 07:49:13
Hallo Scotty,

nimm statt
Redim Preserve myNames(arrayIndex)
...
arrayIndex = arrayIndex + 1
doch das von Peter vorgeschlagene:
Redim Preserve meinarray (Ubound (meinarray) + 1)'-> jetzt noch ein Element mehr, aber dynamisch
denn das kommt mit einer Zeile aus
Allerdings brauchst Du dann doch noch eine Zeile mehr, weil Du dann prüfen musst, ob der oberste Wert gesetzt ist

If myName (Ubound (myName)) <> "" Then
   Redim Preserve myName (Ubound (myName) + 1)
End If
myName (Ubound (myName)) = ...

Prüfst Du das nicht, wird myName (0) immmer leer sein. In Deinem konkreten Anwendungsfall halte ich es für angebracht, mit einer Laufvariablen (arrayIndex) zu arbeiten.
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 08:05:51
@Peter !

Danke, im Moment scheitere ich mit der Checkbox Sache...
Im Schnitt werden es ehr nur 4-5 mögliche Adressen sein.

In meinem Mail-Formular: das Checkbox Feld wie muss das aufgebaut sein ? computed.... ????
Ich schaffe es nicht die Array Werte ins Mailformular zu übertragen
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 08:23:51
In das neue Dokument schreibst Du Dein array in ein beliebiges Feld (kann unsichtbar sein). Der Feldname sei AuswahlSendTo. Falls Du das Feld in der Maske anlegst, denk dran, Mehrfachwerte zuzulassen.

Für die Checkbox benötigst Du ein eigenes Feld (bearbeitbar, Typ Checkbox (deutsch Kontrollkästchen)).

In der Eigenschaftenbox des Feldes in der zweiten Lasche änderst Du von "Auswahl eingeben (eine pro Zeile)" in "Formel für Auswahl verwenden" (wenn Du einen englischen Client hast, musst Du das entsprechend übersetzen) und trägst als Formel AuswahlSendTo ein (den Namen des Feldes, in das Du Dein Array geschrieben hast).

Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 09:19:02
@Peter !

....ja das hätte ich auch gemacht nur bekomme ich eine Fehlermeldung
"Illegal use of PROPERTY"

Ich hab englisches Frontend :-)

Via Action-Bar Button führe ich folgendes durch:

Set uinewdoc = workspace.ComposeDocument ( "", "", "DBMemo" )
Set maildoc=uinewdoc.document
uinewdoc.SendTo = myNames
''''Set item = maildoc.ReplaceItemValue    ( "SendTo", myNames )
Call uinewdoc.FieldSetText ( "SMNummer", uismnummer )
Call uinewdoc.FieldSetText ( "Subject", uibetreff )

Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 09:38:59
Der Fehler wird wohl bei uinewdoc.SendTo = myNames liegen. uinewdoc ist ein NotesUIDocument, kein NotesDocument.

Ich würde das Dokument im Backend erstellen, dann die Felder befüllen und erst danach öffnen.

Dim maildoc As New NotesDocument (db)
maildoc.Form = "DBMemo"
maildoc.Subject = uibetreff
maildoc.SendTo = myNames
maildoc.SMNummer = uismnummer
Call workspace.EditDocument (True, maildoc)
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 09:57:37
....hey das mit dem Backend Dokument erzeugt geht super - wieder etwas gelernt DANKE !!!!

Aber jetzt steckt der Fehler im Mail-Form.
Ich habs hier mal zum Anschauen - vielleicht bin ich einfach nur blind oder doch soooo schlecht im programmieren :-)

http://www.lichtwerk.at/temp-work/Array-Mail.nsf
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Thomas Schulte am 26.05.10 - 10:01:45
Ja aber nur wenn du die LocalAccessProtection rausnimmst und Die Verschlüsselung ausschaltest.
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 10:04:24
Die Datenbank hat lokalen Zugriffsschutz und ist zudem wohl auch mit Notes 8 erstellt. Ich kann nur bis Version 7 lesen. Erstell doch bitte eine Kopie Deiner Datenbank mit der Dateiendung ns7 (ich hoffe das geht auch für 7 so, bei 4 und 5 hat das funktioniert), und in der ACL gibst Du Default Managerrecht.
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 10:10:22
uppss Sorry !

hier jetzt die neue version
http://www.lichtwerk.at/temp-work/Array-Mail2.nsf
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 10:12:12
Die Datenbank hat lokalen Zugriffsschutz und ist zudem wohl auch mit Notes 8 erstellt. Ich kann nur bis Version 7 lesen. Erstell doch bitte eine Kopie Deiner Datenbank mit der Dateiendung ns7 (ich hoffe das geht auch für 7 so, bei 4 und 5 hat das funktioniert), und in der ACL gibst Du Default Managerrecht.

ich hätte gemeint das dein 7er Client das kann - bitte bestätige meinen Glauben ?
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 10:15:52
Ok, die Datenbank habe ich jetzt und kann sie auch öffnen. Jetzt suche ich nur noch das Problem. Was muss ich tun, damit der Fehler auftritt?
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 10:25:46
...also ich hab jetzt nur das Mail-Form rauskopiert...
weil hier 100%ig der Fehler steckt....im Feld "Emfpaenger" stehen die z.B. 2 email-Adressen (aus dem Array) mit Komma getrennt drinnen

Kannst du anhand deines beschriebenen Wegs (Backend-dokument erzeugen) in Kombination mit diesem Form etwas erkennen....?
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Peter Klett am 26.05.10 - 10:47:45
Funktioniert bei mir, welcher Fehler tritt bei Dir auf?
Titel: Re: ...wie erstellt/befüllt man ein Array ?
Beitrag von: Scotty67 am 26.05.10 - 11:05:55
jetzt funkts bei mir auch !!!

PETER - ich möcht mich ganz ganz herzlich bedanken !
Ich hab in knapp 2h eine Präsentation und da kann ich verkünden das wir (DU+ich) das "Problem" gelöst haben !

nochmals DANKE !!!  :)