For so long I have been trying to convince my customers that the right combination of InfoPath, MOSS and workflow can solve 70% of their day to day business needs.
Well, guess what – I finally succeeded.
Only to learn that by default – forms server does not allow anonymous users to create new forms.
Well, my customer wanted to implement a “contact us” and “register to…” forms on his WCM MOSS internet site that will (of course) be published on the internet and allow any potential customer to fill in these forms with no need for logging in or registering for their site.
So, the solution for this consisted of 2 major steps.
Step 1 – defining out SharePoint site to use forms authentication provider.
I
extended my AD web application (i.e. http://moss.kwizcom.com ) to a
new web application (i.e. http://forms.kwizcom.com ) that uses forms authentication – this way I could create a simple user that has no privileges at all except to create items in the forms library (no edit / delete as well).
Step 2 – setting up a default logon user for anonymous users.
After step 1, all I had to do is to create a forms authentication user named:
Internet User and give him write access to the forms library. Now, I added some code to auto login with that user when anyone browses to this web application http://forms.kwizcom.com.
For more information about completing step 1 you can see may blogs articles – simply google it.
I like Andrew connell’s one here:
http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspxAfter you have forms authentication enabled on your second web application, the solution is rather easy.
- Create an InfoPath form, save it and publish it to a document library on your SharePoint server
- Create a new permission level on your site collection for “Add Only Read Only Permission”
- Go to Site Settings – top level site settings
- Click on advanced permissions
- On the “Settings” menu click on “Permission Levels”
- Add a new permission level named “Add Only Read Only Permission”
- Select only the “Add Items” check box (others will be auto selected – leave them)
- Click “Create”
- Create a new forms user named: Internet User
- Use the ASP.Net application to create a new user as explained in the Andrew Connell blog post above
- Give Internet User “Add Only Read Only” permission on the published form library
- Browse to the document library
- On the “Settings“ menu click “X Library Settings”
- Click on “permissions for this document library”
- If you don’t see the “new” menu item – you will have to break permissions for this library by clicking “Actions” and then “Edit Permissions”
- Click “New”, select Internet User give user permission directly to “Add Only Read Only Permission” permission level.
- Set up auto login for Internet User
- Go to the http://forms.kwizcom.com web root folder (by default: under c:\inetpub\wwwroot\wss\virtualdirectories\*
- Locate the global.asax file, back it up and open it in notepad
- Add this lines to the file to enable auto login as Internet User,
replace [password] with the password you given the user.
<script runat="server">
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
if (Membership.ValidateUser("Inernet User", "[password]"))
{
FormsAuthentication.SetAuthCookie("Inernet User", true);
}
}
</script><.div>
- Save the file and close it.
Now we have to prepare the link for filling out this form using the browser.
To do so you will need a client PC that does not have InfoPath installed, browse to http://moss.kwizcom.com to the forms library, and click “New” on the forms library.
The forms server will open a browser based form for you to fill in.
Copy the URL of the create form page and replace http://moss.kwizcom.com with http://forms.kwizcom.com , replace moss with forms anywhere you see it in the query string as well, except for the “Source=” query string parameter.
That’s it! Simply put that URL at your site where you want users to create forms from and you are done!
Note: you might want to prevent user from browsing to http://forms.kwizcom.com and redirect them to the http://moss.kwizcom.com. This can be done in several ways. For demo purposes you could add this javascript to your master pages to make them do the redirect for you:
<script>
if(window.location.href.toLowerCase().slice(0,12) == “http://forms”)
window.location.href = window.location.href.toLowerCase().replace(“http://forms”, “http://moss”)
</script>