2012-04-13 4 views
2

Ich muss eine Möglichkeit finden, eine Reihe von Variablen - MonthYear (der Schlüssel) und einen Zähler zu speichern. Ziel ist es, die Anzahl der von Monat & Jahr verarbeiteten Dokumente zu verfolgen. Ich dachte an eine Liste, aber ich bin mir nicht sicher, wie ich die Daten speichern soll, damit sie lesbar sind und zu einem späteren Zeitpunkt in einer Tabelle angezeigt werden können. Ich dachte über ein mehrdimensionales Array - someArray (1,0 bis 1) und ReDim'ing es jedes Mal, wenn ich ein neues MonthYear starte und dann wieder in ein Feld auf dem Dokument speichern, aber bin mir nicht sicher, wie das geht ausspielen. Hat jemand eine Vorstellung davon, wie ich das erreichen kann?Versuchen, mit einem mehrwertigen Array in LotusScript und Art von stecken stecken

Die erste Dimension ist der MonthYear (Schlüssel) und die zweite Dimension ist ein Zähler, der jedes Mal aktualisiert wird, wenn ein neues Dokument verarbeitet wird.

  1. Der Schlüssel basiert auf einem Feld des zu bearbeitenden Dokuments. Wie kann ich sicherstellen, dass ich die richtige Kombination aus Schlüssel und Zähler aktualisiere?

  2. Wie kann ich den vorhandenen Zähler aus dem Feld auf dem Dokument abrufen, den Zähler aktualisieren und dann den Wert ersetzen?

Ich dachte nur jedes Mal ein Dokument verarbeitet, um ein neues Element (ReDim) Zugabe und als irgendwie Addition aller Zähler für jeden Schlüssel und dass in einem Array zu speichern, aber das scheint nur echte chaotisch. Es muss einen guten Weg geben, dies zu tun.

Irgendwelche und alle Ideen werden stark

+0

Die Tatsache, dass wir Fragen wie diese stellen müssen, ist es, was LotusScript mit einer Leidenschaft hasst. Es ist eine halb-implementierte Sprache. – iconoclast

+0

@iconoclast. Bist du dir sicher ? Diese Art von Problem ist nicht sprachbezogen, es ist einfach ein Fall der Verwendung der richtigen Werkzeuge für das Problem. Also solltest du Java auch durch dein Denken hassen. Java hat um ein Vielfaches mehr Sammlungen/Listen/Maps/Bäume als Sie einen Stick anstecken können. Viel schwieriger zu bestimmen, was die richtigen Werkzeuge sind, um das Problem zu lösen, wenn Sie es auch erforschen müssen. Obwohl LS nicht so robust wie Java ist, ist es viel einfacher zu verwenden als Java, um dieses Problem zu lösen.Dude, Hasser werden hassen. Übersteh dich, LS ist nur eine andere Sprache, wenn du dir Tech einmal angeschaut hast, wirst du in Frieden sein. – giulio

+0

@giulio: Ich stimme Ihren Java-Kritiken zu, aber ich bin mir nicht sicher, warum Sie dagegen sind, auf die Fehler in einer Sprache hinzuweisen, da Sie Java kritisieren. Bitte beachten Sie, dass es neben diesen beiden auch noch andere Sprachen gibt. Ich würde empfehlen, etwas zu lernen, da Sie vielleicht lernen würden zu schätzen, was sie zu bieten haben. LotusScript ist nur eine andere Sprache, aber nicht alle Sprachen sind gleich. – iconoclast

Antwort

5

Die einfachste Struktur ich denken kann, ist eine „Liste“ geschätzt. Hier ein kurzes Beispiel, dass "Round Trips" mit Listen auf ein Dokument und zurück in eine Liste schreibt. Ausschneiden und Einfügen in einen Agenten zu testen (vergessen Sie nicht die Mittel Eigenschaft „Runtime“ Ziel „None“ gesetzt) ​​

Sub Initialize 
    Dim session As New notesSession 
    Dim counter List As String 
    Dim sValue As String 
    Dim doc As notesDocument 
    Dim itCounters As NotesItem 
    Dim db As notesDatabase 
    Dim i As Integer 
    Dim vResult As Variant 
    Dim vValues As Variant 

    Set db = session.CurrentDatabase 
    Set doc = db.CreateDocument 
    Set itCounters = doc.ReplaceItemValue("counters","") 

    counter("201201") = 16 
    counter("201202") = 1 
    counter("201203") = 10 
    counter("201204") = 5 

    ' print the tags 
    Forall k In counter 
     Print Listtag(k) 
    End Forall 

    ' adding the values (and tags) 
    Forall k In counter 
     Print "[" + Listtag(k) + "]:" + counter(Listtag(k)) 
     sValue = Listtag(k) + "!" + counter(Listtag(k)) 
     itCounters.AppendToTextList(sValue) 
    End Forall 

    'retrieving 
    Erase counter 

    Set itCounters = doc.GetFirstItem("Counters") 
    vValues = itCounters.Values 
    For i = 0 To Ubound(vValues) 
     vResult = Split(vValues(i), "!") 
     counter(vResult(0)) = vResult(1) 
    Next 

    Forall k In counter 
     Print "[" + Listtag(k) + "]:" + counter(Listtag(k)) 
    End Forall 

End Sub 

Der praktische Aspekt ist, dass Sie jeden neuen Artikel erklären, wie Sie benötigen (kein Dim (ing). Und Sie können auf jeden Wert mit einem aussagekräftigen Schlüssel zugreifen (Monat und Jahr oder was auch immer). Sie können einen Feldnamen verwenden, der mit dem zu ladenden Schlüssel übereinstimmt, oder Sie können nur die Werte in einem mehrwertigen Feld beibehalten und ein bestimmtes Trennzeichen wie im Beispiel verwenden. Wenn Sie inkrementieren, müssen Sie auch nicht nach einem Array suchen, um den richtigen Wert zu inkrementieren. Sie referenzieren es basierend auf dem Tag und erhöhen es einfach. Ich denke, das ist so einfach wie es nur geht.

Die Domino-Designerhilfe enthält umfangreiche Informationen zu Listen. Wenn Sie die Existenz von Listenelementen überprüfen müssen, schauen Sie sich die Funktion "isElement" an.

+0

Danke. Ich werde das ausprobieren und sehen, wo ich hinkomme. Nach 20 Jahren Arbeit mit Notes und jetzt XPages schäme ich mich zu sagen, dass ich noch nie eine Liste benutzt habe. Schätze, es gibt keine Zeit wie heute. – RoyRumaner

+1

Domino ist wie ein Eisberg, 80% lauert knapp unter der Oberfläche. Sie wissen nichts darüber, bis Sie darauf stoßen. – giulio

+1

Listen sind brillante Sachen. Sie sind assoziative Arrays, ohne ReDimming, und Sie können alles in ihnen stopfen (sogar Objekte). Weniger praktisch ist das Fehlen einer einfachen Methode zum Laden oder Speichern einer Liste von/zu einem NotesDocument und die Tatsache, dass Sie IsElement vor der Verwendung eines Werts verwenden müssen. –