 |
ソフトウェア > Lotus > Lotus Developer Domain >
Iris Today Archives
Lotusphere 2001 データベース・コンテスト
 |
 |
 |
by Jason Lounsbery
レベル:ビギナー
対象:Domino 5.0
原文の掲載:2000年5月1日
もしあなたが今年の Lotusphere に運良く参加できたとしたら、アンケートに答えるだけで私たちの
Notes.net コンテストに参加するチャンスがあったことでしょう。もしあなたがオフィスで仕事をしていなければならなかったとしてもアンケートに答えることはできますが、コンテストに参加することはできません。
このコンテストとアンケートの目的は Notes.net のプロモーションでした。Notes.net
ユーザーには MP3 プレーヤーなどの商品を手にするチャンスが提供され、ユーザーによるフィードバックをしていただき、そして楽しんでいただく、といったものです。Lotusphere
での活動を始めた当初から、エントリーの有効化、アンケートの実行、そして商品が当たる
16 名のランダムな選択など、関係するあらゆることをできる限り自動化するデータベースをセットアップする必要性を感じていました。
この記事では、Lotusphere でのコンテストとアンケートを処理するコンテスト・データベースを見ていきます。より深く見てみたい方は、Lotusphere
2001 コンテスト・データベースのテンプレートを Iris Sandbox からダウンロードしてください。このテンプレートはロータスのビジネス・パートナーである
Knowledge Resource Group によって設計されました。
コンテスト・データベースは Lotusphere の参加者たちがコンテストにエントリーしたり、みなさんがブラウザーからアンケートに答えることができるように設計されました。トップ・ページとなったのが
Lotusphere コンテスト・ウェルカム・ページでした。

ユーザーが [Enter the contest] リンクをクリックするとエントリー文書が表示されます。エントリーとアンケートは同じ文書の異なったセクションなのです。どちらのセクションが表示されるかは、ユーザーが進んでいるステップによって異なります。ステップ1では、ユーザーは名前と電子メール・アドレスを入力します。ステップ2はコンファレンスに参加している人たちのためのコンテストへのエントリーです。コンテストにエントリーするためには、各
Lotusphere 参加者に与えられた個別の ID ナンバーが必要なため、コンファレンスに参加していない人はコンテストにエントリーすることができません。ステップ3では、アンケートの入力を行います。
有効化は文書内の3つのフィールドで行われます。名前、電子メール・アドレス、そして
Lotusphere に参加している人であれば、コンテスト番号です。すべての有効化は、QuerySave
エージェントを介してバックエンドにて行われます。各ステップが終わる度に文書は保存、有効化され、最終ステップまでアンケートは送信されません。アンケートが送信されなければ、コンテストへのエントリーは受け付けられません。
一度送信されると、すべてのエントリーが1つのビューに集められ、このビューに対してエージェントが実行され、その日の受賞者を決定します。
ではステップ1から詳しく見ていきましょう。ここでユーザーは名前と電子メール・アドレスを聞かれます。これら2つのフィールドは必須フィールドです。1つのフィールドが空白のままであれば、ユーザーは現在のページに戻され再度名前と電子メール・アドレスの入力を求められます。

フィールドの下には2つのリンクがあります。「I am not at lotusphere」と「I
am at Lotusphere」です。いずれかのリンクをクリックすることでフィールドが有効化されます。すべての有効化は同じ
QuerySave エージェントを使用しバックエンドで行われます。「I am at Lotusphere」をクリックすることでユーザーはステップ2である、コンテストにエントリーする段階に進むことができます。
これは「I am not at Lotusphere」ホットスポットの式です。
@SetField("AtLotusSphere";"no");
@SetField("pass";"5");
@Command([FileSave]);
@Command([FileCloseWindow]) |
|
pass というフィールドは QuerySave エージェント内で使用されます。その値は文書などのセクションを有効化するかをシステムに指示します。忘れてはならないのがアンケートは1つの文書であり、有効化したい部分をステップごとに指示しなければならないことです。これは
QuerySave エージェントのセクションの1つです。
Select Case pass...
Case "5":
If (lotusname = "" Or Trim(doc.Emailaddress(0)) ="")Then
doc.pass ="0"
doc.passRegistration ="false"
Else
doc.passRegistration ="true"
doc.pass ="2"
End If
Print |[| + vPath(0) +|/0/| + Cstr(doc.universalid)+|!EditDocument]| |
|
Lotusname は文書上の Name フィールドにセットされます。Print ステートメントはユーザーが現在入力中の文書へのリンクです。有効化が失敗すると
pass フィールドが 0 に、passRegistration が false にセットされます。このケースでは、何が間違っているかの説明に注目した上で、ユーザーはステップ1をやり直さなければなりません。

有効化が成功するとアンケート・セクションが表示されます(これは I am not
at Lotusphere ホットスポットだということを忘れずに)。アンケートは参加者とそうでない人も同じものを利用するので、コンファレンスに参加している場合の進み方を見てみましょう。ステップ1のもう1つのホットスポットである
I am at Lotusphere ホットスポットのコードです。
@SetField("AtLotusSphere";"yes");
@SetField("pass";"4");
@Command([FileSave]);
@Command([FileCloseWindow]) |
|
同じ有効化エージェントが呼ばれるのですが、今回は、コードの別のセクションに注目します。
Case "4":
If (lotusname = "" Or Trim(doc.Emailaddress(0)) ="")
Then
doc.pass ="0"
doc.passRegistration ="false"
Else
doc.passRegistration ="true"
doc.pass ="1"
End If
Print |[| + vPath(0) +|/0/| + Cstr(doc.universalid)+|!EditDocument]| |
|
再び名前と電子メール・アドレスが有効化されました。有効化に成功すると pass
フィールドは1にセットされます。pass フィールドを1にセットすることで、ステップ2で利用する、コンファレンス参加者だけが見ることのできる画面を表示します。
ステップ2はコンテストにエントリーするための段階です。

ここでも文書が再び保存され、pass フィールドが何を有効化するかをエージェントに指示します。
- フィールドが空白でないこと
- 有効な Notes.net コンテスト番号が含まれていること
- コンテスト番号がすでに登録されていないこと
ステップ2のページの Continue ホットスポットの式です。
@SetField("pass";"2");
@Command([FileSave]);
@Command([FileCloseWindow]) |
|
ここでも文書が保存され、pass フィールドが何を有効化するかをエージェントに指示します。
Case "2":
If(doc.AtlotusSphere(0) = "yes") Then
If CanRegister(lotusname,lotusnumber) = "True"Then
doc.PassRegistration = "True"
Else
doc.PassRegistration ="false"
doc.pass = "1"
End If
If notused(lotusname,lotusnumber,s) ="True" Then
doc.notused ="no"
Else
doc.notused ="yes"
doc.pass ="1"
End If
End If
Print |[| + vPath(0) +|/0/| + Cstr(doc.universalid)+|!EditDocument]| |
|
2つ目のパスの初めに CanRegister 関数が呼び出されます。
Function CanRegister(lotusname As String,lotusnumber As String) As String
Dim firststring As String
Dim rest As String
Dim smallnumber As String
Dim largenumber As String
firststring = Left(lotusnumber,1)
rest = Right(lotusnumber,6)
Passes = "Continue"
smallnumber ="2"
largenumber ="1"
Select Case firststring
Case "Q","q"
smallnumber ="111000"
largenumber = "112000"
Case "R","r"
smallnumber ="121000"
largenumber = "122000"
Case "S","s"
smallnumber ="131000"
largenumber = "132000"
Case "T","t"
smallnumber ="141000"
largenumber = "142000"
Case "U","u"
smallnumber ="151000"
largenumber = "152000"
Case "V","v"
smallnumber ="161000"
largenumber = "162000"
Case "W","w"
smallnumber ="171000"
largenumber = "172000"
Case "X","x"
smallnumber ="181000"
largenumber = "182000"
Case "Y","y"
smallnumber ="191000"
largenumber = "192000"
Case "Z","z"
smallnumber ="201000"
largenumber = "202000"
Case "B","b"
Dim temp As String
temp = Ucase(rest)
rest = temp
smallnumber = "NN1000"
largenumber ="NN1021"
Case Else
smallnumber ="2"
rest ="1"
End Select
If (smallnumber <= rest And rest <= largenuber And
Len(lotusnumber)=7) Then
CanRegister ="True"
Else
CanRegister = "False"
End If
End Function |
|
コンテスト番号は特定の参加者と関連付けされていなかったため、番号と参加者を結びつける方法がありませんでした。有効化するために、番号はリスト中の番号と組み合わされます。コンテスト番号は1つの文字とこれに続く6桁の番号から構成されています。初めの文字によって6桁の番号の範囲が決まります。番号は無効な場合、無効な番号エラーとともにユーザーはステップ2に残ります。今一度、print
ステートメントがユーザーを正しいセクションに導きます。

番号が正しい場合は notused 関数が呼び出されます。この関数はその番号がすでに使用されていないかを特定するもので、参加者が2回以上コンテストにエントリーできないようにしてくれるのです。
Function notused (lotusname As String, lotusnumber As String, s As notessession)
As String
Dim db As notesdatabase
Dim view As notesview
Set db = s.currentdatabase
Set view = db.getview("byregid")
Dim doc As notesdocument
Set doc = view.getdocumentbykey(Ucase(lotusnumber))
If doc Is Nothing Then
notused = "True"
Else
notused = "False"
End If
End Function |
|
登録番号がすでに使用されている場合、ユーザーは Lotusphere の Iris Developers
Lab にいる Notes.net チームのメンバーを見つけて有効な登録番号をもらわなければなりません。非常に小さい確立ではありますが、誰かが他人の番号を入力してしまう可能性も少なからずあるので、私たちが柔軟に対応することで参加者がコンテストにエントリーできるようにしたかったのです。
すべての有効化の終了後、ユーザーがアンケートに記入する用意ができました。前と同じようにcase
ステートメントの後ろにある print ステートメントが正しいセクションを表示します。このケースではアンケートになるわけです。

ユーザーはいろいろな質問に答えながらアンケートの記入を進めます。アンケートの一番下には
Submit ホットスポットがあります。このホットスポットの式は次の通りです。
@SetField("pass";"3"):
@SetField("Submitted";"Yes");
@SetField("showall";"yes");
@SetField("validatenow";"no");
@Command([FileSave]);
@Command([FileCloseWindow]) |
|
これは pass 3 で私たちに関係する、コードの有効化の部分です。
Case "3":
doc.pass ="2"
doc.Can_Read ="[Readers]"
Set item = doc.getfirstitem("Can_Read")
item.IsReaders = True
Print |[| + vPath(0) + |/ThanksSurvey?Openform]| |
|
一度文書が送信されると、特定のユーザーのみ送信されたアンケートを見ることができるように
Readers フィールドがセットされます。このケースの「特定のユーザーは」 Notes.net
チームです。ユーザーは最後の挨拶のページに導かれます。
これまでに私たちは Lotusphere の参加者や他の人たちがどのようにしてアンケートに記入し、どのようにして
Notes.net コンテストにエントリーするかを見てきました。次に、私たちが受賞者をどう選んでいたかを見ていきましょう。
Notes.net チームの誰かが1日1回エージェントを実行し、ランダム数字を使って各日の受賞者を選んでいました。1日
16 人の受賞者がいるわけですから、16 のランダム数字が選ばれます。なんらかの理由でコンテストの受賞者に権利がなくなった場合は、この受賞者は削除され、新しい受賞者をリストの1番下に追加することができます。
これがどのように実現されているか、Contest Entries と Daily Winners ビューを見ながら考察してみましょう。
Contest Entries ビュー
Contest Entries ビューは次のセクション式を持っています。
| SELECT HasWon ="0" & AtlotusSphere ="yes" &
Submitted ="Yes" & Form != "welcomepage" &
Form != "winnerslist" |
|
ビューには Lotusphere に参加した人のうち、賞をもらっていない人のアンケートが表示されます。これは
16 人の受賞者を選ぶために使われます。[Pick Winner] ボタンが Pick Winner
エージェントを呼びだし、1からビュー内にある文書の数の間の数字をランダムに選び出します。もし
1,543 文書あるとすれば、エージェントは1から 1,543 の間の数字をランダムに選ぶわけです。そして文書にフラグを付けて受賞者の1人とし、Contest
Entries ビューからその文書を削除し、ビューを更新、そして全プロセスをあと
15 回繰り返します。受賞者が何を受賞するかを特定するため、受賞の順番も重要になります。
ここにエージェントのコードがあります。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doccoll As notesdocumentcollection
Dim doccount As Integer
Dim x As Integer
Dim doc As NotesDocument
Dim dateTime As New NotesDateTime( "" )
Call dateTime.SetNow
Set db = session.CurrentDatabase
Set view = db.GetView( "Admin" ) ' put the name of your
view here
For x = 1 To 16
Set doccoll = view.getalldocumentsbykey("0")
doccount = doccoll.count
Randomize
i=Int( (doccount-1)* Rnd+1)
Set doc = view.GetNthDocument( i )
doc.haswon ="1"
doc.datewon = dateTime.dateonly
doc.numberchosen = x
doc.randomnumber = i
Call doc.save(False,False)
Next
Call view.refresh
End Sub |
|
Daily Winners ビュー
Daily Winners ビューは受賞日時にしたがって受賞者を表示します。このセクション式は次の通りです。
| SELECT form = "Survey" &HasWon ="1" & Form
!= "welcomepage" & Form != "winnerslist" |
|

何らかの理由により受賞者をリストから外されなければならない場合は、Notes.net
のメンバーが、その文書を選択し [Remove from Contest] ボタンをクリックすることで、その受賞者を外すことができます。このボタンのコードは次の通りです。
Sub Initialize
Dim s As New notessession
Dim db As notesdatabase
Dim doccoll As notesdocumentcollection
Dim doc As notesdocument
Dim entry As NotesViewEntry
Dim datewon As String
Dim view As notesview
Dim vc As NotesViewEntryCollection
Dim x As Integer
Dim doccount As Integer
Set db = s.currentdatabase
Set doccoll = db.unprocesseddocuments
doccount = doccoll.count
Set doc = doccoll. getfirstdocument
datewon = doc.datewon(0)
While Not(doc Is Nothing)
doc.Haswon ="never"
doc.AtlotusSphere ="no"
Call doc.save(False,False)
Set doc = doccoll.getnextdocument(doc)
Wend
'Call doccoll.removeall(True)
Set view = db.getView("winners")
Call view.refresh()
Set vc = view.GetAllEntriesByKey(datewon)
Set entry = vc.GetFirstEntry()
Set doc = entry.Document
x = 1
While Not(entry Is Nothing)
doc.numberchosen = x
Call doc.save(False,False)
Set entry = vc.getnextentry(entry)
If Not(entry Is Nothing) Then
Set doc = entry.Document
x = x+1
End If
Wend
Call view.refresh()
End Sub |
|
このスクリプトは、選択した文書を not at Lotusphere としてフラグを立て、コンテストから外すものです。これにより文書は受賞者リストから外され、Survey
ビューにのみ表示されるようになります。他の受賞者は、削除された文書の数に応じてリストの上位へと上がります。例えば、10
番目の受賞者が外された場合、11 番目の受賞者が 10 番目に、12 番目の受賞者が
11 番目に、と続くわけです。
最終的に私たちは [Pick replacement winners] ボタンを使って受賞者が 16 人になるまで選び続けます。このエージェントは、何人の受賞者を追加するかを決定し、追加の受賞者を選び、彼らを受賞者リストに追加します。
その他のビュー
Contest Entries と Daily Winners ビューの他には、Survey ビューは記入済みのすべてのアンケートを表示し、Not
Submitted ビューは記入され始めたが送信されなかった文書をリストアップし、Welcome
ビューは Notes.net Lotusphere Contest ウェルカム・ページを表示し、Winners
List ビューには Notes.net 上で各日の受賞者を表示するために利用された文書が含まれます。
Lotusphere の期間中、1,500 以上の参加者がコンテストにエントリーしました。私たちは各日
16 人の受賞者を選び、名前を Notes.net や Iris Developer's Lab に掲載しました。Lotusphere
と Iris の Notes.net チーム・メンバーはコンテストをモニターし、毎日円滑に審査が進むよう努力したのです。
著者について
ジェイソン・ラウンズベリーはロータスのビジネス・パートナーである Knowledge
Resource Group で働いています。
|
 |
|
|