Following on from my initial post on how to connect to the WebsitePanel API from ASP.net, I will demonstrate how to write data to the API by creating a new WebsitePanel user account.

As before, my example is a simple ASP.Net Webform. For details of prerequisites and the development environment I am using, please read the first post.

HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<fieldset>
        <legend>Create User</legend>
        <p>Fields in <b>bold</b> are required.</p>
        <table>
            <tr>
                <td>Owner:</td>
                <td><asp:DropDownList ID="ddlOwner" runat="server" /></td>
            </tr>
            <tr>
                <td>Load Error:</td>
                <td><asp:Literal ID="ltlLoadError" runat="server" /></td>
            </tr>
            <tr>
                <td><b>Send Email Alert</b></td>
                <td><asp:CheckBox ID="chkSendEmail" runat="server" /></td>
            </tr>
            <tr>
                <td colspan="2"><hr /></td>
            </tr>
            <tr>
                <td><b>Role</b></td>
                <td>
                    <asp:DropDownList ID="ddlRole" runat="server">
                        <asp:ListItem Text="Administrator" Value="1" />
                        <asp:ListItem Text="Reseller" Value="2" />
                        <asp:ListItem Text="User" Value="3" />
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td><b>Status</b></td>
                <td>
                    <asp:DropDownList ID="ddlStatus" runat="server">
                        <asp:ListItem Text="Active" Value="1" />
                        <asp:ListItem Text="Suspended" Value="2" />
                        <asp:ListItem Text="Cancelled" Value="3" />
                        <asp:ListItem Text="Pending" Value="4" />
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td><b>Is Demo</b></td>
                <td><asp:CheckBox ID="chkIsDemo" runat="server" /></td>
            </tr>
            <tr>
                <td><b>Username</b></td>
                <td><asp:TextBox ID="txtUsername" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td><b>Password</b></td>
                <td><asp:TextBox ID="txtPassword" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td><b>First name</b></td>
                <td><asp:TextBox ID="txtFirstname" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td><b>Last Name</b></td>
                <td><asp:TextBox ID="txtLastname" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td><b>Email</b></td>
                <td><asp:TextBox ID="txtEmail" Width="400" runat="server" /></td>
            </tr>
            <!-- Optional Parameters -->
            <tr>
                <td>Company Name</td>
                <td><asp:TextBox ID="txtCompanyName" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Address</td>
                <td><asp:TextBox ID="txtAddress" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>City</td>
                <td><asp:TextBox ID="txtCity" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>State</td>
                <td><asp:TextBox ID="txtState" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Zip/Postal Code</td>
                <td><asp:TextBox ID="txtPostcode" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Primary Phone</td>
                <td><asp:TextBox ID="txtPrimaryPhone" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Secondary Phone</td>
                <td><asp:TextBox ID="txtSecondaryPhone" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Fax</td>
                <td><asp:TextBox ID="txtFax" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>Instant Messenger</td>
                <td><asp:TextBox ID="txtInstantMessenger" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td>SecondaryEmail</td>
                <td><asp:TextBox ID="txtSecondaryEmail" Width="400" runat="server" /></td>
            </tr>
            <tr>
                <td><b>HTML Email</b></td>
                <td><asp:CheckBox ID="chkHtmlEmail" runat="server" /></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><asp:Button ID="btnCreateUser" Text="Create User" runat="server" /></td>                
            </tr>
            <tr>
                <td colspan="2"><hr/></td>
            </tr>
            <tr>
                <td>Result:</td>
                <td><asp:Literal ID="ltlResult" runat="server" /></td>
            </tr>
            <tr>
                <td>Error:</td>
                <td><asp:Literal ID="ltlError" runat="server" /></td>
            </tr>
        </table>        
    </fieldset>

Code Behind:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Imports System.Web.Services
Imports Microsoft.Web.Services3
Imports WebsitePanel.EnterpriseServer

Partial Class CreateUser
    Inherits System.Web.UI.Page

#Region "Events & Initial Loading"

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then PopulateUsersDdl()
    End Sub

    Private Sub PopulateUsersDdl()
        ' Note: Uses userId of 1 and returns all users

        ' Create proxy configurator object
        Dim config As New EnterpriseServerProxyConfigurator()
        config.EnterpriseServerUrl = INSERT_WEBSITEPANEL_ENTERPRISESERVER_URL
        config.Username = INSERT_WEBSITEPANEL_ENTERPRISESERVER_USERNAME
        config.Password = INSERT_WEBSITEPANEL_ENTERPRISESERVER_PASSWORD

        ' Create & configure proxy object
        Dim users As New WebsitePanel.EnterpriseServer.esUsers()
        config.Configure(users)

        ' Perform lookup
        Try
            Dim lst As WebsitePanel.EnterpriseServer.UserInfo() = users.GetUsers(1, True)
            ddlOwner.DataValueField = "UserId"
            ddlOwner.DataTextField = "Username"
            ddlOwner.DataSource = lst
            ddlOwner.DataBind()
            lst = Nothing
        Catch ex As Exception
            ' If error, output and hide create button
            ltlLoadError.Text = ex.Message
            btnCreateUser.Visible = False
        End Try

        ' Clean up
        ' - little bit of paranoia
        users.Dispose()
        users = Nothing
        config = Nothing
    End Sub

#End Region


#Region "User Creation"

    Protected Sub btnCreateUser_Click(sender As Object, e As EventArgs) Handles btnCreateUser.Click
        ' Reset Output
        ltlError.Text = ""
        ltlResult.Text = ""

        ' Get details
        Dim user As New WebsitePanel.EnterpriseServer.UserInfo
        user.OwnerId = ddlOwner.SelectedValue

        ' Mandatory Parameters
        user.RoleId = ddlRole.SelectedValue
        user.StatusId = ddlStatus.SelectedValue
        user.IsDemo = chkIsDemo.Checked
        user.Username = txtUsername.Text
        user.Password = txtPassword.Text
        user.FirstName = txtFirstname.Text
        user.LastName = txtLastname.Text
        user.Email = txtEmail.Text

        ' Optional Parameters
        user.CompanyName = txtCompanyName.Text
        user.Address = txtAddress.Text
        user.City = txtCity.Text
        user.State = txtState.Text
        user.Zip = txtPostcode.Text
        user.PrimaryPhone = txtPrimaryPhone.Text
        user.SecondaryPhone = txtSecondaryPhone.Text
        user.Fax = txtFax.Text
        user.InstantMessenger = txtInstantMessenger.Text
        user.HtmlMail = chkHtmlEmail.Checked
        user.SecondaryEmail = txtSecondaryEmail.Text

        ' Create proxy configurator object
        Dim config As New EnterpriseServerProxyConfigurator()
        config.EnterpriseServerUrl = ConfigurationManager.AppSettings("WebsitePanelServerUrl")
        config.Username = ConfigurationManager.AppSettings("WebsitePanelUsername")
        config.Password = ConfigurationManager.AppSettings("WebsitePanelPassword")

        ' Create & configure proxy object
        Dim users As New WebsitePanel.EnterpriseServer.esUsers()
        config.Configure(users)

        ' Attempt to save
        Try
            Dim result As Int32 = users.AddUser(user, chkSendEmail.Checked)

            If (result > 0) Then
                ltlResult.Text = String.Format("New UserId: {0}", result)
            Else
                Select Case result
                    Case -2
                        ltlResult.Text = "User creation failed:  Invalid OwnerId specified"
                    Case -100
                        ltlResult.Text = "User creation failed:  Username already exists"
                    Case -111
                        ltlResult.Text = "User creation failed:  Username not specified"
                    Case Else
                        ltlResult.Text = String.Format("User creation failed:  Result code of {0} returned", result)
                End Select
            End If
        Catch ex As Exception
            ltlError.Text = ex.Message
        End Try

        users = Nothing
        user = Nothing
    End Sub

#End Region

End Class

If successful, the value of result will be a positive integer which is the ID of the new user account. If a negative value is returned and error has occurred and the value is the error code. The error codes I have discovered so far are:

  • -2 = Invalid OwnerId specified
  • -100 = Username already exists
  • -111 = Username not specified

Testing Notes

  • Although the API documentation states that there are 10 required parameters, I have successfully created a new user by just specifying valid values for OwnerId, RoleId, StatusId and Username
  • An XML exception will occur if non-recognised values are specified for RoleId and StatusId