Active Directory Synchronization with WSS and MOSS

By default: In a Microsoft Office SharePoint Server 2007 deployment, a person defined in Windows SharePoint Services 3.0 and a person defined in Office SharePoint Server 2007 are the same. To deliver consistent objects across the deployment in both Windows SharePoint Services 3.0 and Office SharePoint Server 2007, both implement person synchronization.

Person synchronization is bidirectional. In the up direction, the Windows SharePoint Services site collection membership list is pulled into the Office SharePoint Server 2007 user profile database to inform Office SharePoint Server 2007 about which users are a member of which sites and allow incremental synchronization. In the down direction, the Office SharePoint Server 2007 user profile database sends down replicable user profile information for all members in the site collection.

Synchronization actions are either full or incremental. On first synchronization or restore, Office SharePoint Server 2007 may not have previous synchronization or site collection membership information, so a full synchronization takes place. If previous synchronization information is found, an incremental synchronization is performed instead.

If a user is removed from the Windows SharePoint Services site collection membership list, that user is no longer recognized as a member of the site collection, and Office SharePoint Server 2007 no longer synchronizes profile information for that user.

If a user leaves the environment (is no longer in the Office SharePoint Server 2007 user profile store or in Active Directory), that user remains in the Windows SharePoint Services membership list for that site collection until he or she is removed from the list. Office SharePoint Server 2007 flags the user and ceases to synchronize any information for that user. However, Office SharePoint Server 2007 does not alter the Windows SharePoint Services site collection membership list in response to a user who is no longer in the Office SharePoint Server 2007 user profile store.

stsadm -o sync sets the timing, deletes old sync info from the db and allows you to control the sync process.

There are third party tools UserProfile Sync on Codeplex and there are a couple of tools from bamboo Solutions: User Profile to Active Directory Export for SharePoint sites syncs from SharePoint to AD, there are five sync types offered with User Profile Sync.

They are: 
  • MOSS 2007 User Profile database to Active Directory.
  • Active Directory to a WSS 3.0 User Information List.
  • WSS 3.0 User Information List to a WSS 3.0 User Information List(s).
  • Active Directory to a Contacts List in WSS 3.0 or MOSS 2007.
  • A Contacts List in WSS 3.0 to a WSS 3.0 User Information List(s).

In short, WSS doesn't synchronize. it's a once-only copy when the user is added to a site. If you want synch, install MOSS, and activate the user profiles feature on the site, and in the user profile properties you can map to AD properties, and you can set if the property is replicable - "if you want the property to display in the user info list for all sites"
For article to understand User Profiles and User Information List synchronization, click here
I hope this helps your understanding of UserProfile Syncronization with WSS, MOSS, and AD

SPD Workflow to send reminder notification

Consider a list or library having fields such as End Date and Contract Owner. The requirement is to send the notification to Owner if the contract is going to expire within 30 days from today.
This functionality can be achieved using the SPD workflow with action “Pause Until Date”
To do this, create a calculated column, name it "Alert Date" with formula as [End Date] + 30
  • Now, go into SharePoint Designer.
  • Create a custom workflow with Action “Pause Until this time”
  • Insert the “Alert Date”
  • Pause Until [Alert Date]
  • then Email
If the requirement is too complex to achieve using SPD workflow, then it is preferred to create custom Timer Jobs. Article for this is available at:

Clear SPD Workflow Cache

Whenever the SPD workflow is opened, it fetch the workflow details from server. When the workflow is modified and closed, all the steps are recompiled on the local machine and the same changes finally gets updated on the server.
But some times, it may happen that the workflow show the modified steps, but doesn't work accordingly. This may be due to the changes updated in the cache of local machine, but not reflected on the server workflow. This is a bug from Microsoft.
To fix this problem follow the below mentioned steps to clear the SPD activity cache:
  • Close SPD.
  • Open “My Computer”.
  • Go to %System Drive%\Documents and Settings\%user%\Local Settings\Application Data\Microsoft\WebSiteCache (If you are running Vista, that path is different - look for %System Drive%\Users\%user%\AppData\Local\Microsoft\WebSiteCache).
  • Go to a directory that looks similar to the name of the website you were connecting to. (Alternatively, you can just delete all these directories and everything should work when you boot SPD).
  • Delete the assembly with the name similar to the one you are changing.
  • Boot SPD.
You can now work with your updated activity.

Filter items in a View by User or Group

SharePoint offers different types of views, depending on the type of list. We can filter the items in the views by taking any field as a filter. But if we want to filter the items so that a particular user(other than the user who Created the item) or a group can see them, then views are not directly helpful. We have to use some tricks in order to make them useful.

Let me present a scenario: Suppose I have a list and I want to filter the default view in such a way that every dept can see their own dept items. Lets see how this can be done without code.

Take the names of all the people who are working in respective departments. Like take the names of people working in finance department, then take the names of the people in HR department and like this, take the names department wise. Create a column in the list and give it the name "Users". Choose the type of the field as "People or Group" and select "username" in the last drop down list box. Dont forget to click Yes in "Allow Multiple selections". Once you are done, open SharePoint Designer. In SharePoint designer create a new workflow and write the if condition like:

If department is Finance
     then set the value of the field "Users" equal to usernames

Now here you need to write the usernames of the people who are in finance department in the following manner: jason; david; vic;

Always remember that you have to write the usernames as you selected "usernames" while creating the column "Users". You can get a person's username from his or her account. name like if SHAREPOINT\jason is the account name then the username is jason and SHAREPOINT is the Domain name. Username is case sensitive so write it exactly in the same way as it appears in the account name. You can write any number of usernames seperated by ";".

Create "If" conditions for other departments in the same way, writing their people's usernames in the "Users" field. Once you are done just finish the workflow.

Now come back to the list and click on "Modify this view" for the default view. In filter option, filter the items by selecting "Users" in the field, select "is equal to" and write its value as "[Me]".
Now the filter will work depending on the login user. If the login user name comes in the users column then he will be able to see the item else not.

Whenever an item is created in the list, workflow will run and depending on the departement column value mentioned in the item. Once the item is created, "Users" column value will be set and each department will be able to see their respective department's items.