| Programmer's Guide:Using Polls and Poll Pages
In the eRoom user interface, a poll is an eRoom page for taking a vote. 
 Polls help teams reach closure by moving them away from open-ended discussion 
 and closer to making decisions. In the user interface, as well as with 
 SAAPI, you can create a poll, edit a poll, and vote in poll. Polls can 
 be embedded in another Item, like a discussion topic.  Poll Pages and Polls are similar SAAPI objects. A Poll object is an 
 item that appears in the context of a topic, while a Poll Page is a principal 
 item that appears as its own page in the eRoom user interface. Because 
 these two objects share so much functionality, the features they have 
 in common are consolidated into a single interface, IERUPoll, which is 
 implemented by both objects. A Poll Page object also implements the IERUPollPage 
 interface, which allows you to manipulate some of the page display options 
 associated with a Poll Page, such as whether or not to show a topic or 
 an attachment box.  The Poll object functions as a container of Poll Entry objects. Each 
 Poll Entry corresponds to a single question, its set of predefined answers 
 on which users can vote, and the set of ballots that have been cast.  Poll Questions and Choices 
 Once you have an IERUItem interface for a Poll Entry or a Poll Page, 
 you can then access the polling information for that item by getting the 
 IERUPoll interface. For example, you can use the Poll interface accessor 
 property defined in IERUItem. If the item is not actually a Poll or Poll 
 Page object, then the Poll interface accessor property returns the error 
 E_NOTIMPL. Through the IERUPollEntry interface, you can create and modify 
 the polling information in any way you choose. However, after the first 
 person has voted in the poll, you can no longer modify the question and 
 the choices.  The Question property returns an IERURichText 
 interface. This interface is used to retrieve or modify the poll entry 
 question. The IERURichText interface allows you to get or set values in 
 either plain text or HTML. The following example shows how to create a 
 Poll Page and set up the polling information for that page.  Dim SMgr as IERUSvrManagerDim Room as IERURoom
 Dim PollPage as IERUPollPage
 Dim PollEntry as IERUPollEntry
 Dim Choices as Array(1)
 Dim Var as Variant
 Choices(0) = "Yes"
 Choices(1) = "No"
 ' assume that 
 the SMgr and Room variables have been initialized.
 'Create a Poll 
 Page in the Home Page of the Room.' Here I create a Poll Page named "Weather." The first and only 
 question for the poll
 ' is "Will it rain?", which is in plain text format. The fourth 
 parameter
 ' lists all of the poll choices separated by a new line character. There
 ' must be at least two choices. The last parameter contains the create
 ' options. I have specified that the vote totals should be displayed.
 Set PollPage = Room.HomePage.Container.CreatePollPage("Weather", 
 _
 "Will it rain?", erFormatPlainText, Choices, erCreateOptShowVotes)
 'Here I modify 
 the vote choices, so that I can add the option, "I don't know."Set PollEntry = PollPage.poll.PollEntries(1)
 Var = PollEntry.Choices
 ReDim Preserve Var(UBound(Var) + 1)
 Var(UBound(Var) - 1) = "I don't know"
 PollEntry.Choices = Var
 Setting Options for Polls 
 There are three options that describe how the poll operates and how 
 it is displayed. Each option has an ERUCreateOption flag defined for it 
 that can be passed to CreatePollPage, CreatePollEntry, or CreatePoll as 
 the last parameter. If you want to specify more than one option, then 
 list all of the desired options in the last parameter, separated by the 
 OR symbol (|). Alternatively, you can modify any of these options by setting 
 the appropriate property on the IERUPoll interface. Like the poll questions 
 and choices, these options can't be changed after the first person has 
 voted in the poll or poll entry.  The previous example used the option erCreateOptShowVotes. This option 
 specifies that as each person votes, that user's name will be listed beneath 
 the poll along with his vote. Prior to version 5.0, this option could 
 be turned on or off by setting the ShowVotes property on IERUPoll to TRUE 
 or FALSE. Starting with version 5.0, ShowVotes is superseded by two new 
 properties: ShowVoteTotalsTo 
 and ShowVotesCastTo. These new 
 properties provide more control than the all-or-nothing scenario you got 
 with ShowVotes. You can use these properties to display votes cast and 
 vote totals to everybody, only those who have voted, or only the poll's 
 creator and the room's coordinators.  The second option is specified by the erCreateOptAllowMultipleVotes 
 flag. If you set this option, users can vote for more than one choice. 
 This option is turned on or off by setting the AllowMultipleVotes 
 property on IERUPollEntry.  The last option is specified by the erCreateOptAllowWriteIn flag. If 
 you set this option, users can ignore the predefined choices and write 
 in their own votes. This option is turned on or off by setting the AllowWriteIn property on IERUPollEntry. 
  The following example shows how to modify these options through the 
 IERUPoll and IERUPollEntry interfaces. If someone had already voted, then 
 setting the property raises an error. This example builds on the previous 
 example.  'I change the 
 Poll options regarding the display of voting results.PollPage.poll.ShowVotesCastTo = erShowVotesCastToVoters PollPage.poll.ShowVoteTotalsTo 
 = erShowVoteTotalsToVoters
 'I change the 
 Poll Entry options to allow write-in votes.Set PollEntry = PollPage.poll.PollEntries(1)
 PollEntry.AllowWriteIn = TRUE
 Adding and Deleting Votes 
 Votes are created by calling CreateVote 
 through the IERUPollEntry interface, and are deleted by calling Delete 
 through the IERUVote interface. You can change users' votes through the 
 API, just as users can change their votes through the eRoom user interface. 
 The example running through this section does not allow multiple votes, 
 so in order to change a user's vote, you must delete the old vote and 
 then add a new one. When you create a vote, just as when you create any 
 item, the vote is assigned to your current user context for the logged-in 
 user.  The following example shows how to create and then change a vote.  Dim Vote as IERUVote' I have created a vote by choosing the first choice in the "Will 
 it rain?" poll.
 Set PollEntry = PollPage.Poll.PollEntries(1)
 Set Vote = PollEntry.CreateVote(1, "")
 ' I decide that I want to change my vote to a write-in, but first I must 
 delete
 ' my first vote, since I cannot have multiple votes in this poll.
 Vote.Delete
 ' Now I may add my write-in vote. I pass in 0 as the index of my choice, 
 which
 ' means that I am not picking any of the choices.
 Set Vote = PollEntry.CreateVote(0, "It may snow.")
 Working with Ballots and Votes
 Ballot objects represent all of the votes a single user has cast in 
 a Poll Entry. Ballot objects are useful when you want to tally the votes 
 in the poll or when you want to change a particular user's votes. A Poll 
 Entry object returns a collection of all of its Ballots through the Ballots property in IERUPollEntry. The IERUBallot 
 interface has a single property, called Votes, 
 which returns a collection of all of the Vote objects for a particular 
 voter. The Ballot object implements the IERUItem interface, so you can 
 determine which voter belongs to the Ballot object by calling the Creator 
 property of the IERUItem interface for the Ballot. In fact, the Ballots 
 property on the Poll object returns a collection of IERUItem interfaces 
 rather than IERUBallot interfaces, so you will have access to the IERUItem 
 properties and methods for the Ballot objects.  The following example shows how to build a report that lists who voted 
 in a Poll Page and how each user voted.  Dim BallotItem 
 as IERUItemDim BallotList as IERUCollection
 Dim VoteList as IERUCollection
 Dim Vote as IERUVote
 Dim Name as String
 Dim WriteInVote as String
 Dim IndexVote as Integer
 
 Set BallotList = PollEntry.Ballots
 For each BallotItem in BallotList
 Name = BallotItem.Creator
 ' Write code here that logs the voter's name somewhere.
 Set VoteList = BallotItem.Ballot.Votes
 For each Vote in VoteList
 If (Vote.IsWriteIn) Then
 Set WriteInVote = Vote.WriteIn
 ' Write code here that logs the write-in that the voter made.
 Else
 Set IndexVote = Vote.Choice
 ' Write code here that logs the choice the voter made.
 End If
 Next
 Next
 |