Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet 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
-
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?
-
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
-
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
-
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 )
-
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
sein. Es sei denn, Du benötigst das Item nicht mehr im Folgecode.
CU,
Axel
-
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.
-
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.
-
@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
-
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).
-
@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 )
-
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)
-
....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
-
Ja aber nur wenn du die LocalAccessProtection rausnimmst und Die Verschlüsselung ausschaltest.
-
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.
-
uppss Sorry !
hier jetzt die neue version
http://www.lichtwerk.at/temp-work/Array-Mail2.nsf
-
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 ?
-
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?
-
...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....?
-
Funktioniert bei mir, welcher Fehler tritt bei Dir auf?
-
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 !!! :)