Tracking InfoPath forms using SharePoint Lists


Yeah, I’m back to SharePoint and InfoPath after a period of disconnection.  What caused it is that I’m currently working with the internal administration team to help them build and internal portal for self-services.  You bet I’m telling them to use SharePoint for that, and one of the services is to automate the increasing number of administrative forms they have.  Of course, those forms are best fit for InfoPath, but we have a number of challenges:

  1. Our IT policy delivers SharePoint out of the box, and don’t allow us to build code-based solutions –> we need to use whatever we have in SharePoint, and use design-only methods for custom solutions.
  2. Most of the administrative forms contain private information that we can’t just post to SharePoint.  We either need to secure forms one-by-one, or we need to just avoid publishing forms to SharePoint at all.  We have chosen the latter in our case.

With the above constraints, we needed to design forms (only design, no code pieces), and we need to find a way to publish tracking information only to a SharePoint list.  Since we’re going to use this tracking mechanism in different forms – tens of them – I have chosen to go with an InfoPath template part for reusability.  This blog post is all about that.  I’m using SharePoint 2010 and InfoPath 2010, but the same can apply on InfoPath and SharePoint 2007.

Step 1: Create a SharePoint Custom List for Tracking Requests

I have installed SharePoint Foundation 2010 on my Windows 7.  Thanks to the new support built in SharePoint 2010 for Windows client machines to make it easy for developers and designers to test out their work without the need for Windows Server installations or virtual machines.  I have followed the MSDN article titled: Setting Up the Development Environment for SharePoint Server.  In case you face issues, you can consult the following great blog: Common Microsoft SharePoint Server 2010 Installation Issues and Resolutions.

The custom list I have created contains simple columns to track different requests and allow comments as well:

image

Step 2: Design an InfoPath Template Part for Tracking Information

Starting InfoPath Designer 2010, you’ll be presented with different options.  Click on Blank (InfoPath Filler) under Template Parts.  I have chosen InfoPath Filler since I’m going to use this in client-only scenarios.

image

You’ll be presented with a blank design surface.  Save this form template part and give it a name (preferably without spaces such as RequestTrackingTemplatePart.).  It’s time that we build some data connections.  I’m using the technique posted in this blog post: Submitting to a SharePoint List from the InfoPath team blog.

1. Define the fields that will be used as an interface for this template part:

In Fields task pane, rename the root to spListTracking instead of myFields, and add the following fields in the given order:

image

2. Define a data source to be used as a schema for submitting to a web service later on:

We’re going to use a Web Service to submit our tracking data to SharePoint.  The Web Service is coming from /_vti_bin/Lists.asmx">/_vti_bin/Lists.asmx">http://<your server here>/_vti_bin/Lists.asmx, and the method we’re going to use is called UpdateListItems.  The requirement for this method (as described in Lists.UpdateListItems Method (Lists)) is an XML document with a Batch node which instructs SharePoint to add a new item with the given properties.  We’ll create this XML file.  Open Notepad, or your favorite text editor, and type the following:

   1: <?xml version="1.0" encoding="UTF-8"?>

   2: <Batch OnError="Continue">

   3:     <Method ID="1" Cmd="New">

   4:         <Field Name="Title" DisplayName="Title"></Field>

   5:         <Field Name="RequestType" DisplayName="Request Type"></Field>

   6:         <Field Name="RequestStatus" DisplayName="Request Status"></Field>

   7:         <Field Name="RequestComments" DisplayName="Request Comments"></Field>

   8:     </Method>

   9: </Batch>


The DisplayName is not required in our case, so you can freely remove it.  Save the file and give it a name such as: Tracking – Add List Item Template.xml.

Go to InfoPath, and under choose Data –> From Other Sources –> From XML File.

image

Browse for your XML file, and continue with the wizard to include that as a resource in your template part.  Allow automatically retrieving data from this data source.  You’ll notice how that gets added as a secondary data source in your form as the following shows:

image

and by choosing it, you’ll see the XML schema reflected as fields inside the data source in InfoPath.

image  
Now is the time to sync up our data source (XML) and the local fields (represented as the main data source of the form).  You may wondering why would I need that, and the reason is that the above doesn’t allow you to talk to the specific fields (Title, Request Type, Request Status, and Request Comments) at design time.   The schema shows only that there is a field and its content, and nothing else.  We need to present a way for the user of out Template Part to see all fields at design time, in order for him to be able to assign some values.

3. Sync the Main fields with the XML fields of the Batch node:

Go to the Main data source, and choose the first field spItemRequestTitle.  Right-click and choose “Rules …” to see the following task pane:

image

Click on New –> Action.  Give your rule a meaningful name “Sync with title in XML”.  There will be no condition in our case, and we need to choose from the action list “Set a field’s value”.

image 
You’ll be presented with a dialog to set a field to a value:

image

Click to choose the field, and select Field from the ‘Tracking – Add List Item Template (Secondary)” and click OK.

imageChoose the spItemRequestTitle for the value.  You’ll end up with a dot in this field, since you’re already in the title field context.

Do the same steps for the other fields: spItemRequestType, spItemRequestStatus, and spItemRequestComments.  All will set the Field value from the XML template to their own!

We’re not finished yet, cause the above will sync the field “Field” to the values from the form fields.  The dominant will be the last one… simply because we’re not choosing the right field index from the array of fields we’re expecting to have in in the XML template.  Unfortunately, this cannot be done in design, and we need to tap into some of the source files of our InfoPath template part (as explained by the post above from the InfoPath team blog).

4. Modify the InfoPath rules to have indexed field assignment for the sync operation above

Let’s save the template part as source files in order to tap into the XML behind the scenes.  Don’t worry it’s very simple to do.  Go to File –> Publish –> Export Source Files:

image

Save that to a location you can refer to later.  Open the manifest.xsf from the export location but in Notepad.  Scroll down in the file in order to point out your rules that set the field values as follows:

   1: <xsf:ruleSets>

   2:     <xsf:ruleSet name="ruleSet_2">

   3:         <xsf:rule caption="Sync Batch Field - Request Title" isEnabled="yes">

   4:             <xsf:assignmentAction targetField="xdXDocument:GetDOM(&quot;Tracking - Add List Item Template&quot;)/Batch/Method/Field" expression="."></xsf:assignmentAction>

   5:         </xsf:rule>

   6:     </xsf:ruleSet>

   7:     <xsf:ruleSet name="ruleSet_3">

   8:         <xsf:rule caption="Sync Batch Field - Request Type" isEnabled="yes">

   9:             <xsf:assignmentAction targetField="xdXDocument:GetDOM(&quot;Tracking - Add List Item Template&quot;)/Batch/Method/Field" expression="."></xsf:assignmentAction>

  10:         </xsf:rule>

  11:     </xsf:ruleSet>

  12:     <xsf:ruleSet name="ruleSet_4">

  13:         <xsf:rule caption="Sync Batch Field - Request Status" isEnabled="yes">

  14:             <xsf:assignmentAction targetField="xdXDocument:GetDOM(&quot;Tracking - Add List Item Template&quot;)/Batch/Method/Field" expression="."></xsf:assignmentAction>

  15:         </xsf:rule>

  16:     </xsf:ruleSet>

  17:     <xsf:ruleSet name="ruleSet_5">

  18:         <xsf:rule caption="Sync Batch Field - Request Comments" isEnabled="yes">

  19:             <xsf:assignmentAction targetField="xdXDocument:GetDOM(&quot;Tracking - Add List Item Template&quot;)/Batch/Method/Field" expression="."></xsf:assignmentAction>

  20:         </xsf:rule>

  21:     </xsf:ruleSet>

  22: </xsf:ruleSets>

 

We’ll change the target fields in lines 4, 9, 14, and 19 to be indexed in the order of fields in our XML files:

Field[1] –> Title

Field[2] –> RequestType

Field[3] –> RequestStatus

Field[4] –> RequestComments

So line 4 will look like the following:

<xsf:assignmentAction targetField="xdXDocument:GetDOM(&quot;Tracking – Add List Item Template&quot;)/Batch/Method/Field[1]" expression="."></xsf:assignmentAction>

You can then apply the same to other fields, incrementing the index each time.

After the modifications, save the file and then open it in InfoPath by right-clicking and choosing design:

image

The form template part will open normally in design mode in InfoPath, and it’s time to save it back to one file (with the extension .xtp2).  Open the saved file in design mode in InfoPath, and you’ll see your rules reflected by going to the Rules Inspector (under Data tab):

image

We’re now good to go for using this template part in our original form.  I have just added some visual to the form template part to be able to see what’s happening.  The final design of my template part is the following:

image

Step 3: Build an InfoPath Form and use the Template Part

It’s now time to use our template part inside our form, which happens this time to be a Business Card Request.  I have launched InfoPath and designed a new form as it shows below:

image

We need to import our template part as a control, and this is very simple:

1. Click to expand the Controls on the Home tab

image

2. Select “Add or Remove Custom Controls”.  Click Add on the dialog, and choose “Template Part”, and browse for your template part named “RequestTrackingTemplatePart.xtp2).  And finish the wizard.  The list of controls will have your template part at the bottom:

image 3. Click on the template part to add to your form design.  You’ll notice how the visuals have been embedded, with the respective fields (spListTracking node and its children) and all rules.

image

I have chosen to add that to a different view, to separate the data entry from the submission and tracking data.  The shot below shows exactly that:

image

Let’s switch back to the default view, and do a couple of things to be able to use the above template part for submitting to SharePoint list (named Tracking in my case, and is under http://aqahtani1/Lists/Tracking).

Step 4: Create submit data connections

We’re going to use two data connections for submission:

  • Email Submit: which will submit the form to an email address
  • Web Service Submit: which will submit the tracking information to a SharePoint list

The email submit is very simple, and the below show the dialog with proper To and Subject lines:

image

To create the web service submit, follow these steps:

1. Choose Data –> Submit Form –> To Other Locations –> To Web Service

image 2. Type the web service URL as follows: http://<your sharepoint server>/_vti_bin/Lists.asmx

3. Choose UpdateListItems from the list of methods

4. On the next page, assign the parameter “listName” to spListName

5. Assign the parameter “updates” to “Batch” node coming from “Tracking – Add List Item Template_RequestTrackingTemplatePart (Secondary)” data source.  Make sure you choose to include “XML subtree, including selected element”

The dialog should like like the following:

image

You can now click Next, and give you new connection a name.  I have chosen “Tracking Submit”.

We now have two submit connections in place, which we’ll use in the next step.

Step 5: Create Submit Rules

Double-click on the “submit” button in your form to bring the Controls Tools properties tab/panel:

image

In the Action selection, choose Rules and Custom Code, and click on “Manage Rules” on the far right to set the submit rules for this button.

The rules are going to be a number of “Set a field’s value” and “Submit” actions, fired only when the spItemRequestTitle is blank to avoid resubmitting by mistake.  The following Rules Inspector screen shows a summary of that:

image

Notice how I’m building the request title from the form field values and concatenating that with the username and current date and time.  I’m also assigning the request type and status to predefined strings that represent the choices in the SharePoint list columns.  The comments field is more of a narrative.

These field submissions are followed by two submits: Email and Tracking, and then switching to the view for getting a summary on what has happened.

Notice the sync rules that are coming from our template part.

We’re done.  We just need to test that in action and see the results.

Step 6: Preview the form and test your work

Click on Preview (or press F5) to run the form.  Fill in the fields, and click submit to see your tracking view coming up with the assigned values. 

image

image

image

And SharePoint will have a new entry as assigned in the form.  See below:

image

The beauty is that I’m only holding tracking information in SharePoint, and the confidential information (if any) will only be submitted to the authoritive person in the administration team via email.

You can access the source files from this post here: http://algahtani.net/source/BusinessCardRequest.zip

Enjoy SharePoint and InfoPath!

Summary

In this post, we have learned how to track forms submitted by email using SharePoint Lists.  We have implemented the tracking in a reusable template part, which we have used in our original form.  We have learned how to deal with XML templates as resource files in InfoPath, and how to submit to Lists web service in SharePoint.  Hopefully in the future, we’ll see how to get updated information from SharePoint and how to enable the admin team and the user to comment on their requests and the status of execution.

Building a Pivot View Web Part based on Multi-value Column


    Problem:

    Building a dynamic tree of a list based on a choice column (with multi-value select enabled, i.e. checkboxes) can’t be done using views and Group By.  Simply because Group By does not list columns with multi-value select in its options.

     

    So, if you have a list with the following information:

     

    clip_image001

     

    You can build a view to group by Status (Choice as Dropdown or Radios), but not group by Competency (Choice as Checkboxes).

     

    Solution (or workaround if you like)

    In brief, the solution to this is to use a Data View Web Part (connected to the list), and use a custom XSL transformation which pivots according to the multi-value column, to get something like this:

     

    clip_image002

     

    The outline is as follows:

    1. Create a list with a column of type Choice (as checkboxes)
    2. Create a Data View Web Part in SharePoint Designer from this list
    3. Build the XSLT to enable pivoting on the choices available from 1.
    4. Use an dynamic script to enable a Tree View with expand/collapse capabilities.
    5. Save the new XSLT to the DVWP

     

     

    Details:

     

    Step 1:  Create a list with a column of type Choice (as checkboxes)

    Do I need to explain this?! Well I will share the list I have created so you can follow the columns design:

     

    Column

    Type

    Remarks

    Title

    Single line of text  

    Built-in

    Status

    Choice 

    Radio: In Progress, Proposed, Stalled

    Competency

    Choice 

    Checkbox: Software, Hardware, Services, Logistics

    Created By

    Person or Group  

    Built-in

    Modified By

    Person or Group  

    Built-in

     

    Step 2: Create a Data View Web Part (DVWP) in SharePoint Designer (SPD) from this list

    You have two ways to create a DVWP from a list in SharePoint.  You can drop a web part of the Stuff list above using the browser, and use SPD to convert that web part to a DVWP.  This is simply accomplished by right-clicking and choosing "Convert to XSLT Data View".

    Another way is to use SPD directly and drag the list (from the Data Sources) to a web part zone.  Both should give you the same result.

     

    Step 3: Build the XSLT to enable pivoting on the choices available from Step 1

    The idea here is to change the default XSLT and use another transformation that:

    • Keeps a list of choices as XML (that’s a gotcha)
    • Loops through the list of choices doing the following:
      • Generating a header for each choice
      • Looping through all the rows in the list, and filtering according to the value of Choice.
      • Dumping those who match the header/choice as a list of items (or table rows, or spans, or …)

     

    Remember that the idea behind XSLT is take the XML representing the SharePoint list data, and transforming it into HTML.  Whatever HTML tags you use is up to you.  I used <ul> and <li> because I wanted to make use of a ready made dynamic script that can transform that into a Tree View.

     

    See below the XSLT I used with the Stuff list.

     

    Step 4: Use an dynamic script to enable a Tree View with expand/collapse capabilities

    I actually have embedded that in the above XSLT.  I have used the Simple Tree Menu from DynamicDrive.

    You need to follow the instructions in the above site to include necessary files for like the CSS, Images, and Script files.  Here is what I did:

     

    1. Include the below in the "PlaceHolderAdditionalPageHead" content control.

    <script type="text/javascript" src="scripts/simpletreemenu.js">

    /***********************************************

    * Simple Tree Menu- © Dynamic Drive DHTML code library (www.dynamicdrive.com)

    * This notice MUST stay intact for legal use

    * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code

    ***********************************************/

    </script>

    <link rel="stylesheet" type="text/css" href="styles/simpletree.css" />

    1. Import the files to images, scripts, and styles folders under the root of my site, using SPD
    2. Change the references to images and scripts to match where I put them.  e.g. change the URL to "images/open.gif" in CSS, for instance.

     

    Step 5: Save the new XSLT to the DVWP

    Using SPD, right click on the web part in design mode and click Web Part Properties.  Change the XSLT using the XSLT Editor. 

     

    And you’re done.  You should see the final result as shown above.

     

    Resources:

  XSLT:

The following is document and should be self-explanatory.

 

<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal">

<xsl:output method="html" indent="no"/>

<xsl:decimal-format NaN=""/>

<xsl:param name="dvt_apos"></xsl:param>

<xsl:variable name="dvt_1_automode">0</xsl:variable>

<!–

The following variable lists all options available to pivot around.

the gotcha is that you need to update this, whenever yo change the schema of the list in SharePoint.

In other words, if you change the Choice column by adding/modifying/deleting value in SharePoint List Settings, then

you need to come back to this and synchronize it manually.

Let me know if you have a better approach.

–>

<xsl:variable name="Competencies">

<Competency Text="Software" />

<Competency Text="Hardware" />

<Competency Text="Services" />

<Competency Text="Logistics" />

</xsl:variable>

<xsl:template match="/" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:SharePoint="Microsoft.SharePoint.WebControls">

<xsl:call-template name="dvt_1"/>

</xsl:template>

<xsl:template name="dvt_1">

<xsl:variable name="dvt_StyleName">Table</xsl:variable>

<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>

 

<xsl:call-template name="dvt_1.body">

<xsl:with-param name="Rows" select="$Rows"/>

</xsl:call-template>

 

</xsl:template>

<!– the following is the main template which generates the skeleton of the pivot tree –>

<xsl:template name="dvt_1.body">

<xsl:param name="Rows"/>

<!–

An optinal HTML to have links to expan and collapse coming from Simple Tree Menu

More here: http://www.dynamicdrive.com/dynamicindex1/navigate1.htm

–>

<a href="javascript:ddtreemenu.flatten(‘treemenu1′, ‘expand’)">Expand All</a> | <a href="javascript:ddtreemenu.flatten(‘treemenu1′, ‘contact’)">Contact All</a>

<!– the container of the tree, and need to be marked with treeview style for trigeting the tree view script –>

<ul id="treemenu1" class="treeview">

 

<!–

looping through the options from the above XML varaible

You need to use the msxsl:node-set funation to build a node set from the variable

See MSDN for more info

–>

<xsl:for-each select="msxsl:node-set($Competencies)/Competency">

<!– keep track of the competeny text value (Software, Hardware, …) before going to another scope –>

<xsl:variable name="Competency" select="@Text" />

<li>

<!– dump the value of competency in an list item <li> –>

<xsl:value-of select="$Competency"/>

 

<ul>

<!–

loop through all rows and call the group template which will handling the filtering

passing competency as a variable

–>

<xsl:for-each select="$Rows">

<xsl:call-template name="Competency.Group">

<xsl:with-param name="CompetencyValue" >

<xsl:value-of select="$Competency"/>

</xsl:with-param>

</xsl:call-template>

</xsl:for-each>

</ul>

</li>

</xsl:for-each>

</ul>

<!– a script coming from Simple Tree Menu above –>

<script type="text/javascript">

//ddtreemenu.createTree(treeid, enablepersist, opt_persist_in_days (default is 1))

ddtreemenu.createTree("treemenu1", true)

ddtreemenu.createTree("treemenu2", false)

</script>

</xsl:template>

<!– this is a template that will do the real decision to include or not include a list item based on competency value –>

<xsl:template name="Competency.Group">

<xsl:param name="CompetencyValue"/>

<!– only display competency when Comptency column contains the value –>

<xsl:if test="contains(@Competency, $CompetencyValue)">

<li>

<!– dump the item data –>

<b><xsl:value-of select="@Title" /></b> : <xsl:value-of select="@Competency"/>

</li>

</xsl:if>

</xsl:template>

</xsl:stylesheet>

Visual Studio Spoiled Me, and Web Parts Framework Made Me Learn


It took me sometime until I figured out some facts about Web Parts lifecycle.  The following are some findings I believe will make you rethink what methods and events to override to develop a Web Part:

 

  • CreateChildControls() is – from what it is – used to create controls for layout and content.  It’s not meant to create the content itself or have manipulation logic.
  • Make sure you do all the stitching of Event Handlers to their respective controls in this method.
  • CreateChildControls()  is called all the time! whether on initializing or post back, it gets called.  So make sure you don’t override anything while coding this method:
    • ViewState[] and Session[] can be used to track view state or persistent session information in the Web Part life cycle.
    • ViewState[] and Session[] should not be initialized in this method.  Use the constructor or OnInit() event for this purpose.
  • Your logic should go into events for those controls you’re creating in CreateChildControls()
  • Ensure fetching data for your controls doesn’t happen each time CreateChildControls() gets called.
  • It’s better to utilize OnPreRender() event for this purpose, and protect the data fetch block with a condition to avoid executing on post backs. 
  • IsPostBack is not a trusted condition for the behavior in Web Parts, and this is because a post back can be triggered while in design mode, where the user has just added the web part!

 

Few posts that could be helpful:

http://www.codeproject.com/KB/sharepoint/WebPartLifeCycle.aspx

http://www.sharepoint-tips.com/2007/03/server-side-controls-and-data-binding.html

http://www.sharepointblogs.com/chadclarkesmossblog/archive/2007/10/10/custom-web-part-building-state-management-tips-and-tricks.aspx

 

Using VSeWSS relieves you from custom intall.bat!


If you like to be more productive in WSS development, you can always use Visual Studio Extensions for Windows SharePoint Services 3.0.

Visual Studio 2005 -> VseWSS 1.1

Visual Studio 2008 -> VseWSS 1.2

Then, set the “Start Browser with URL” to your Web App URL.  With that, you can enjoy the Deply (solution packaging, deployment, and activation) funtionalities provided by the extensions. 

Always remember your SharePoint Development source: http://www.MSSharePointDeveloper.com!

SharePoint Development with Windows Server 2008 and IIS 7.0 – install.bat sample


Here is a sample batch file to help with your SharePoint development on Windows Server 2008 and IIS 7.0.  

@SET TEMPLATEDIR=”c:\program files\common files\microsoft shared\web server extensions\12\Template”
@SET STSADM=”c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm”
@SET GACUTIL=”C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe”
@SET APPCMD=”c:\windows\system32\inetsrv\appcmd.exe”

Echo Installing YOURASSEMBLY.dll in GAC
%GACUTIL% -if bin\debug\YOURASSEMBLY.dll

REM You can also deploy to local bin folder of the Web Application, if you don’t want or not allowed to use GAC
REM Echo Copying YOURASSEMBLY.dll to Web App Bin
REM xcopy /y bin\debug\YOURASSEMBLY.dll C:\inetpub\wwwroot\wss\VirtualDirectories\80\bin

Echo Copying files
xcopy /e /y TEMPLATE\* %TEMPLATEDIR%

Echo Installing feature
%STSADM% -o installfeature -filename  YOURFEATURES\feature.xml -force

Echo Recycling Application Pool
%APPCMD% recycle APPPOOL “SharePoint – 80″

Notes:

  • I have used Application Pool recycling instead of  restarting IIS, which gives faster development/test cycles. 
  • In IIS 7.0, appcmd.exe replaces the script file named iisapp.vbs, so if you’re still in IIS 6 (Windows Server 2003), then use the following instead:
    cscript c:\windows\system32\iisapp.vbs /a “SharePointDefaultAppPool” /r
  • I have used the Windows SDK gacutil.exe, cause I’m running Windows Server 2008 and Visual Studio 2008.  If you’re still using Visual Studio 2005, then you can find it here:
    c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe

-AQ

SharePoint Resources


Here’s a tool to search for SharePoint resources available out there: http://sharepoint.microsoft.com/readiness

This is useful when you’re looking for a specific type of content. Otherwise, you can use the following places:

Reference Sites: check when you need something about SharePoint

Kits to download and start using for developers:

Community Sites:

SharePoint Blog that you need to regularly check:

SharePoint Conference 2008 in Dubai and Istanbul


clip_image002

We are pleased to announce that we are bringing the SharePoint Conference to the Middle East and Africa Region this year. The exclusive Microsoft SharePoint Conferences 2008 Dubai and Istanbul are part of the global SharePoint Conferences, following closely the US (Seattle) edition. These world-class, two-day conferences, will showcase the latest innovations, features and functionality for the 2007 SharePoint products and technologies.

The Microsoft SharePoint Conference 2008 Dubai and Istanbul will provide an unprecedented opportunity for customers and partners in the Middle East region to meet and network with the Microsoft Office System product development teams, fellow IT professionals and architects, and partners.

Choose your City and Register now !!

Dubai: http://www.sharepointconferencedubai.com

Istanbul: http://www.sharepointconferenceistanbul.com

SharePoint Conference at a glance

Who: The sessions content is targeted at IT DMs, IT Professionals and Architects. Seasoned SharePoint professionals as well as people that are new to SharePoint Products and Technologies will all learn something new! The content theme this year is “Real world guidance and experience”, we have top notch speakers lined up from Microsoft, our customers, our Partners and the MVP technical community all geared up to share their knowledge.
What: Since the release of Microsoft Office SharePoint Server 2007 one year ago, everyone from Microsoft product specialists to our customers and partners to industry analysts have all accumulated a wealth of real life product and deployment experience that we want to share with you! That’s why the SharePoint Conference 2008 is all about real world experience and guidance.
We have planned 30 sessions divided into 3 tracks:

· Deployment, Migration and Administration

· Enterprise Content Management, Collaboration and Social Computing

· Business Applications, Interoperability and Business Process Management

When: Dubai – 7th – 8th of April Istanbul 10th - 11th  April

Where:  Al Bustan Rotana Hotel Dubai      Swiss Hotel Istanbul
Why: Come spend 2 days with us and gain a deep understanding of many important aspects of SharePoint Products and Technologies from the people that work with the products day in day out. You’ll learn best practices from industry leaders and other Microsoft SharePoint customers for designing, deploying, supporting, governing and managing a robust SharePoint infrastructure along with real world guidance on building business critical applications on the SharePoint platform.

From The SharePoint Conference Team…

Architecture Talk – SharePoint Farms


Microsoft Office SharePoint Server 2007 is highly scalable in both directions: vertical and horizontal.  The support for 64-bit architecture, multi-CPU/multi-core hardware, and large amounts of memory makes it possible to scale up boxes running SharePoint Server 2007.  The mere fact that SharePoint Server 2007 has a multi-tier architecture makes it possible to split its different components (called server roles) to different boxes.  Also, each role can be installed on redundant boxes to support failover. 

Referring to SharePoint Server TechCenter, you can find drill-down information for SharePoint Planning and Architecture and Deployment.  Both discuss various application scenarios of MOSS, with different sizing requirements.

A proper capacity planning and availability requirement analysis should take place to reach the best fit for your organization.  If that’s not possible then you can go for a small to medium-sized deployment and grow accordingly.  However, meeting the bar of redundancy, you may need to deploy SharePoint on more boxes than needed.

Farms in SharePoint can have any size with X x Y x Z number of servers, and these are recommended for production environments.  X is the number of Web Front Ends (Web Servers), Y is the number of Applications Servers (resource intensive servers like search, excel services, project, …), and Z is the number of Database Servers.   This is compared to single server deployment, where you have one server running all SharePoint components including the database, which I recommend only for development and testing environments. 

  1. Web-Front Ends receive the hits of users in order to serve web sites.  They also deliver forms and run the workflows.  If more than one server is used for this role, then load-balancing (via hardware or software load balancing) is needed.  However, SharePoint handles the introduction of new servers and how different content can be served on different servers via configuring and extending web applications.  Administrators need not worry about anything else, other than properly configuring NLB or the load balancers.
  2. Application Servers are used to for those intensive shared services like: index, query (search), and Excel calculation, and other shared services.  It’s also preferable to push the front-ends of admin sites to these servers, like Central and SSP Administration.  You can have any number of servers to play the role of application servers (query, excel, project, …) with the exception of Index server.  You can have one Index server in a SharePoint environment, however, this only affects indexing, since querying is a different role that can be redundant.  Simply, what you lose when an Index server is down is the index refresh which can be recovered quickly.  Searching will continue to function even if the Index Server is down.  Load balancing is not required as SharePoint will understand how to direct requests in the farm to different servers in this role.
  3. Database Servers run SQL Server to host and deliver the configuration database, and content databases.  This is however, a pure SQL Server installation (2000 with SP4, or 2005).  load balancing this role requires the use of clustering.

InfoPath Usage Scenarios


Microsoft Office InfoPath 2007 can be used in different scenarios that can scale from simple, ad hoc forms, to highly managed centralized forms solutions.  The following gives a glimpse of the different scenarios with emphasis on value vs. shortcomings.

Forms in Email – quick ad hoc forms using InfoPath 2007 and Outlook 2007

  • Designers build InfoPath forms, and publish forms to email recipients
  • Recipients (users) fill in forms in InfoPath and submit to email of the form owner
  • Outlook organizes forms in folders, and generates Excel reports for further analysis

     

Value

Shortcomings

Simple and Quick

Form templates and submissions are scattered in mailboxes.  Defeating the centralized repositories concept.

No server components required

No web-based forms, only rich client available

Integrated with Outlook 2007 and easy reporting to Excel

No centralized management of form templates and submissions

 

No workflows

Forms Solutions using Windows SharePoint Services v3 – Team forms using InfoPath and WSS

  • Designers build InfoPath forms, and publish to Form Libraries in SharePoint (WSS)
  • Users create new forms and submit to SharePoint Form Libraries
  • Form Library stores form submissions, and enables reporting to Excel.
  • Workflows can be designed (using SharePoint Designer 2007) or developed (using Visual Studio 2005 with Extensions for Windows SharePoint Services)

Value

Shortcomings

One location to access and submit new forms

No web-based forms, only rich client available

Centralized form submissions on the server

No centralized management of form templates

The ability to assign workflows

No customized advance search capabilities

 

No ready-made workflows.  Designing/Developing workflows is required.

 

Forms Solutions using Microsoft Office SharePoint Server 2007 – Business Forms and Process Automation

  • Designers build InfoPath forms, and publish to Form Libraries in SharePoint (MOSS)
  • Users create new forms and submit to SharePoint Form Libraries using both InfoPath rich client, and Web-based forms generated by MOSS (InfoPath Forms Services)
  • Form Library stores form submissions, and enables reporting to Excel.
  • Out-of-the-box workflows are available (Approval, Collect feedback plus other .  Need custom workflows for medium to complex workflows.
  • Form templates can be managed centrally using MOSS (InfoPath Forms Services).  Management include central repository for templates, upgrade, and attachment to different sites.
  • Usually planned and deployed on an organization-wide scale.

     

Value

One location to access and submit new forms

Centralized form submissions on the server

The ability to assign workflows; ready-made workflows available

Web-based forms available.

Centralized management of form templates.

Customized advanced search capabilities

Capabilities of InfoPath are still available in all scenarios, such as:

  1. InfoPath can be connected to Web Services or Databases (Access and SQL Server) to provide automation of form field filling.
  2. Design Template Parts for reusing the design elements among a number of templates
  3. Declarative rules to automate filling and validation
  4. Form Views
  5. User Roles (only in Rich client)

WSS vs. MOSS for External Sites


MOSS is the right choice to build sites that require Web Content Management. Understanding the breakdown of WCM (previously part of MCMS 2002) features will help appreciate what MOSS provides when building Internet sites or Intranet sites, which usually requires branding and publishing features:

WCM features that MOSS provides:

  • Publishing workflows – approval basically
  • Publishing templates – Corporate Internet Presence template, Search Center templates, Content Roll-up templates, …
  • Scheduled publishing – putting schedules on pages to show/hide on specific dates.
  • Web Content editor – to allow knowledge workers to author content.
  • Page Editing toolbar – gives you a set of menus/commands to manage/edit a page’s workflow, versions, etc.
  • Document Conversion – example would be converting a word document to a web page.
  • Page libraries – to host web pages of a site. Web Pages inherit Page Layouts (page templates) and use page fields (columns in page libraries) as placeholders for content.
  • Reusable Fragments – having a list of text and html fragments to be reused throughout the site. Examples are: copy right text, company slogan, a date of an event …
  • Site Variations – to build connected multilingual web sites.
  • Content Deployment – moving content from staging to production farms in bulk, manually or based on schedules.

 

Other features of MOSS that are not directly related to content publishing, but greatly affects deployments:

  • Enterprise Search: Search in WSS is limited to the local site collection, so you cannot search across multiple sites.  Also, you won’t be able to search business data, people profiles, file shares, other SharePoint sites, and external sites. These are features of MOSS.
  • Site Directory – which aggregates a number of sites and lets you be able to manage the hierarchy.
  • The concept of shared services: User Profiles, Excel Services, BDC, Search, …

 

So does WSS have a bright side?

From a web application development perspective – YES. 

From a web content management perspective – NO.

You can use WSS from three different angles (or all together): building sites for collaboration (workflows, shared lists, workspaces are the tools), building sites for storage (lists and document libraries are the tools), building web applications with the former two in mind.  To see examples of Web Applications built on top WSS, check the Fabulous 40 Application Templates.

To build WCM-enabled sites with WSS only, you need to go the hard way:

Build workflows (you have the Windows WF framework), Build authoring components (Web Editor, Document Conversion, Reusable Fragments, …), templates and a placeholder framework, Multilingual sites framework.  You also need to build tools for content deployment.

By adopting MOSS 2007 with its WCM capabilities, partners/customers are relieved from building the above.

Blog at WordPress.com.
Theme: Esquire by Matthew Buchanan.

Follow

Get every new post delivered to your Inbox.