2012-04-13 33 views
2

MonthYear(キー)とカウンタを格納する方法を見つける必要があります。この目的は、月&年で処理される文書の数を追跡することです。私はリストを考えていましたが、後でテーブルに表示することができるようにデータを保存する方法がわかりません。私は、多次元配列 - someArray(1,0対1)を使用し、新しいMonthYearを開始するたびにそれをReDimすることを考えましたが、それを文書上のフィールドに保存しましたが、どうなるかはわかりません再生する。どのように私はこれを達成することができますのアイデアを誰も持っていますか?ロータススクリプトで多値配列を使って作業しようとしたとき

最初のディメンションはMonthYear(キー)になり、2番目のディメンションは新しいドキュメントが処理されるたびに更新されるカウンタになります。

  1. キーは、処理されるドキュメントのフィールドに基づいています。正しいキーとカウンタの組み合わせを更新するにはどうすればよいですか?

  2. 文書のフィールドから既存のカウンタを取得し、カウンタを更新して値を置き換えるにはどうすればよいですか?

は、私はちょうど新しい要素(のReDim)文書が処理されるたびに追加する方法について考えて何とか各キーのすべてのカウンタを加算し、配列にそれを保存するが、それは本物の厄介なようだより。これを行うには良い方法が必要です。

すべてのアイデアは非常に高く評価されます

+0

私たちがこのような質問をしなければならないという事実は、私がロータススクリプトを熱狂させてしまうのを嫌うものです。これは半実装言語です。 – iconoclast

+0

@iconoclast。それ本気 ?この種の問題は言語に関連するものではなく、単にprobに適切なツールを使用した場合です。だから、あなたはあなたの考えによってもJavaを嫌うはずです。 Javaは何度もコレクション/リスト/マップ/ツリーを持っています。あなたがそれを同様に研究しなければならない場合には、問題を解決するために正しいツールが何であるかを判断することがずっと難しくなります。 LSはJavaほど堅牢ではありませんが、この問題を解決するためにJavaよりも使用する方がはるかに簡単です.Dude、hatersは嫌いです。それを乗り越えて、LSはちょうど別の言語です。一度テクニカルを見れば、あなたは平和になります。 – giulio

+0

@giulio:私はあなたのJavaの批判に同意しますが、あなたがJavaを批判しているので、なぜ言語の欠陥を指摘することに反対しているのか分かりません。これらの2つの言語以外にも他の言語があることを覚えておいてください。彼らが提供しなければならないものを理解することを学ぶかもしれないので、私はいくつかを学ぶことをお勧めします。 LotusScriptは単なる別の言語ですが、すべての言語が同等に作成されるとは限りません。 – iconoclast

答えて

5

私が考えることができる最も単純な構造は "リスト"です。ここでは、リストを使って文書に戻ってリストに戻すという「ラウンドトリップ」という簡単な例があります。

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 

便利な側面は、あなたが(何も薄暗い必要はないとして、あなたがそれぞれの新しいアイテムを宣言することである(「なし」にエージェント・プロパティーの「ランタイム」目標を設定することを忘れないでください)をテストするために、エージェントにカット&ペースト')。また、意味のあるキー(月や年など)で任意の値にアクセスできます。キーに一致するフィールド名を使用して、値をロードするか、値を複数値フィールドに保持し、例のように特定の区切り記号を使用することができます。また、インクリメントするときに、配列を検索して正しい値をインクリメントする必要はなく、タグに基づいて参照し、インクリメントするだけです。私はそれが得ることができるほど簡単だと思います。

Dominoデザイナーのヘルプには、リストに関する広範な情報があります。リスト要素の存在を確認する必要がある場合は、 "isElement"関数を参照してください。

+0

ありがとうございます。私はそれを試し、私が得るところを見ます。 Notesと今のXPagesで20年間働いた後、私は以前にリストを使ったことがないと言うのは恥ずかしいです。現在のような時間はないと思います。 – RoyRumaner

+1

ドミトリーはアイスバーグのようで、80%は表面のすぐ下に潜んでいます。あなたがそれにぶつかるまであなたはそれについて知りません。 – giulio

+1

リストは素晴らしいものです。それらは連想配列であり、ReDimmingを必要とせず、オブジェクト内に何かを埋め込むことができます(オブジェクトも含む)。 NotesDocumentとの間でListをロードまたは保存する簡単な方法や、値を使用する前にIsElementを使用する必要があるという事実は、あまり便利ではありません。 –

関連する問題