Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: skywook am 11.02.05 - 14:25:44

Titel: Array füllen über eine Function-Prozedur
Beitrag von: skywook am 11.02.05 - 14:25:44
Hallo,
möchte gerne einen Array über eine Function füllen lassen. Mein Problem wie übergebe ich den Array an eine Function damit ich als Rückgabewert den gefüllten zurückbekomme.

z. B.
.......
Dim etti(16) 
......

Hier der Aufruf der Function
arrayfuellen(?????)


 



Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomas Schulte am 11.02.05 - 14:35:08
Als Variant
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomator am 11.02.05 - 14:40:25
Hi,
als Ergänzung zu Thomas S. :

function arraybefuellen(myArray as Variant) as Variant
    ....Verarbeitung....
    arraybefuellen = befuellterArray;
end Function

wenn Du diesen Array nachher verarbeiten willst, dann prüfst Du mit

If isArray(returnArray) Then
     *die Operatinen über die Inhalte
End IF

den Typ und verarbeitest das Teil in der If-Bedingung

Thomas
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: skywook am 11.02.05 - 15:32:12
Danke, Thomas.
Aber komme damit nicht ganz klar. Habe bis jetzt noch nicht mit Array gearbeitet. Kannst Du mir einen etwas ausführlicheres Beispiel posten.
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomator am 11.02.05 - 15:52:29
Dann beschreib doch bitte mal, was Du genau machen willst (was soll übergeben werden und wie soll's in den Array), so genau kann ich mir das grad nicht vorstellen.
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: TMC am 11.02.05 - 21:56:22
Habe bis jetzt noch nicht mit Array gearbeitet.

Wenn Du das Trial & Error abkürzen willst, empfehle ich, ein Buch über Notes-Entwicklung zu lesen, Arrays werden wohl in jedem Buch behandelt.
Ansonsten kann hier noch hilfreich sein:
 - Redim Preserve <-- mit Bedacht in Schleifen zu verwenden aufgrund Performance
 - ArrayAppend
 - Fulltrim
 - Forall Schleife
(ist alles in der Designerhilfe erklärt).
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: skywook am 14.02.05 - 09:09:38
Hallo,
hier die kurze Form des Scripts:
Wird über einen Agenten gestartet.

Sub Initialize
Dim etti1(16) As String
Dim x As Integer   
Dim auswahl As Integer   
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace   
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim newdoc As NotesDocument
   
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument
   
If collection.Count = 0 Then
   Messagebox "Sie haben kein Dokument markiert!",0 + 16,"Fehler"
   Exit Sub
End If
   
diabox = ws.DialogBox ( "DDruck", True, True, False, True,True, False, "Etikettendruck" )   
If diabox = "False" Then
   Exit Sub
End If
   
While Not(doc Is Nothing)   
.........


Hier sollte die Function aufgerufen werden (mit dem
nachfolgenden Script) um den Array zu füllen.
      
etti1(1) = doc.eapnr(0)
etti1(2) = doc.sachgebiet1(0)
etti1(3) = doc.sachgebiet2(0)
etti1(4) = doc.stichwort1(0)
etti1(5) = doc.stichwort(0)
etti1(6) = doc.stichwort3(0)
etti1(7) = doc.stichwort4(0)
etti1(8) = doc.Bemerkungen1(0)
etti1(9) = doc.Bemerkungen(0)
etti1(10) = doc.Bemerkungen3(0)
etti1(11) = doc.Bemerkungen4(0)
etti1(12) = doc.Ordner1(0)
etti1(13) = doc.Ordner2(0)
etti1(14) = doc.Fachabteilung(0)
etti1(15) = doc.Vernichtungsjahr(0)
etti1(16) = Cstr(doc.Ablagejahr(0))
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomator am 14.02.05 - 09:55:43
Hi,

der Funktionsrumpf muss so ausseshen:

function fillArray() as variant

   ... die Operationen mit etti
   
   fillArray = etti
end funktion

allerdings ist die Funktion dann auch in anderem Context eigentlich nicht verwendbar und kann höchstens ein bisschen zur Übersicht beitragen. Wenn Du die auch in anderen Situationen verwenden willst, must Du sie noch generalisieren (Übergabeparameter usw.).

Thomas
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: skywook am 14.02.05 - 10:19:50
Danke Thomas,
wie sieht das denn mit den Übergabeparameter aus.

Wie übergebe ich dann den Array als string oder als variant (ist im Script als String definiert)?

Muss ich das doc.Collection auch übergeben?
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomas Schulte am 14.02.05 - 10:24:36
Nein musst du nicht, du musst das Doc übergeben und bekommt eine Variant mit allen Einträgen zurück. Aber du solltest dir WIRKLICH mal ein Buch kaufen. Nicht notwendigerweise zu Lotus Script aber zur Programmierung allgemein. Wie man Paramter übergibt und warum ist Basiswissen, das man grundsätzlich kennen sollte.
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Thomator am 14.02.05 - 10:47:59
Aber du solltest dir WIRKLICH mal ein Buch kaufen. Nicht notwendigerweise zu Lotus Script aber zur Programmierung allgemein. Wie man Paramter übergibt und warum ist Basiswissen, das man grundsätzlich kennen sollte.
Jau skywook, da kann ich meinem Namensvetter nur zustimmen...
Titel: Re: Array füllen über eine Function-Prozedur
Beitrag von: Marinero Atlántico am 14.02.05 - 11:11:20
Als Standardwerk für strukturierte Programmier gilt dieses extrem empfehlenswerte Buch von Microsoft Press:
http://www.amazon.de/exec/obidos/ASIN/386063593X/qid=1108375688/ref=sr_8_xs_ap_i1_xgl/028-9496007-5489363
Es gibt auch eine englische Version und eine 1. Auflage, die deutlich billiger sein sollte und völlig ausreichend ist. 

Im übrigen ist die "Kurznotation" in sowas wie
Code
etti1(1) = doc.eapnr(0)
etti1(2) = doc.sachgebiet1(0)
etti1(3) = doc.sachgebiet2(0)
[...]
ein Antipattern.
Es ist viel besser mit doc.replaceItemValue(arNameField(), val);
zu arbeiten.
Dann kannst du die Feldnamen in einem Array initialisieren und diese Namen bei Bedarf auch in ein Konfigurationsdokument auslagern.