Showing posts with label MOSS 2007. Show all posts
Showing posts with label MOSS 2007. Show all posts

Thursday, September 22, 2011

Hide / Disable Global Navigation Settings on SharePoint Site (MOSS 2007)

The following is a reference to an article which explains a simple solution to hide the Global Navigation settings from the Navigation Settings page on a SharePoint site.  If you need to allow site owners to manage the navigation links on their site, but want to control the global navigation to prevent them from changing or breaking the inheritance you can modify the Navigation Settings page (  AreaNavigationSettings.aspx ) so that the Global Navigation section is not displayed on the page.

Example customised Navigation Settings page without the Global Navigation section (from the article).


The OOB AreaNavigationSettings.aspx page is customised using inline styles, and by removing the elements used to display the global navigation settings.  Once modified, the global navigation can still be managed from the top level site in the site collection.

For details, including step by step instructions on how to implement the solution, please see:
Hide SharePoint Global / Top Navigation Settings from Sites

Monday, March 14, 2011

SharePoint: List Distinct (unique) values from a specific column in a list

The following describes two methods to list distinct/unique values from a specific column in a SharePoint list.  An example where this may be useful is a menu system providing filter options for items in a list, using only values that are being used at the time.  


Display Unique Values using Data View Grouping (No Code):
Obtaining a distinct/unique list of values from a specific column in a SharePoint list can be achieved easily using a Data View Web Part, and by applying sort and group criteria to group items.  When grouping (group by) criteria of a Data View web part has been provided, the result is a distinct (unique) list of values from the particular column in the list that will be displayed as group headings.  Once the Data View is listing items grouped by the specified column, you can manually modify (remove cells/rows) the XSL template used to display the table to remove the actual list items from under each group (use Design mode in SPD to easily manipulate the default table layout).

The resulting Data View will list the group names (no items listed), which will be each unique value found in the specified column across all list items in the list.  Using the grouping functionality will ensure that only unique values are returned, as long as you sort by the same field to ensure that items are grouped correctly.  Once you have the list of group headings you can then modify the values displayed to be formatted as hyperlink or another control.  I typically use hyperlinks or buttons with calls to JavaScript functions that add Query String parameters to the current url.
 

Display Unique Values using XSL:
Selecting a list of unique values in a column that contains multiple instances of the same value can also be achieved using an XSL template and the “following” operator.  The following was achieved with the help of this article: http://www.bernzilla.com/item.php?id=333 , and displays a unique list of values from the Title column of items in the list.  


   <xsl:template match="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:asp="http://schemas.microsoft.com/ASPNET/20">
       <xsl:variable name="unique-list" select="/dsQueryResponse/Rows/Row[not(@Title=following::Row/@Title)]" />
       <xsl:for-each select="$unique-list">
       <xsl:value-of select="@Title" />
       </xsl:for-each>        
   </xsl:template>
</xsl:stylesheet>


Implementation Examples:
There are numerous circumstances where you need a distinct list of values from a specific column in a list, across all items.  A common scenario may be a dynamic menu system, that provides filter options for content on a page based on existing values in a particular column.

Implementing a dynamic menu system using this technique would involve selecting one or more columns from the main list in SharePoint to be used when listing filter options dynamically.  The menu should list all unique values from a specific field in the list, and be formatted in a way that allows the page to respond to a selection by filtering content.  


The simplest form of this would be a dynamic filter menu displaying options from one field in a list.  When an option is selected, the content on the page (from the associated list) is filtered based on the selected option.  Creating a multi-dimension menu to filter using multiple columns  is also achievable using this technique, where a sub-menu would also exist on the page.  In this case, when an option is selected from the main menu, the sub-menu options are changed (filtered) to show options relevant to the main menu selection.  Once an option is then selected from the sub-menu, the list or library on the page is then filtered using both fields.


More SharePoint Designer Training & Tutorials at SPDTraining.com

Thursday, August 26, 2010

User Information List not Synchronised with User Profiles

This evening I ran into a profile synchronisation issue, where fields available in the User Information List were showing outdated personal information for each account, even when the equivalent field on the user profile had been updated.  A field in the User Profiles was previously mapped to a field in Active Directory, and successfully pulled the corresponding data from AD during profile imports.

I wanted to allow the field to be edited in SharePoint, so AD mapping for this field was then removed.  Data that was previously pulled from AD remained in the field, and at this point was in sync with data in User Information Lists accross the site collection.  After making changes to the information via the My Profile area on the MySite Host, the changes were not reflected in User Information Lists.

Both full and incremental profile imports had run after the changes were made, but this didn't seem to have any effect on User Information Lists.  I also used the sync operation in stsadm to force synchronisation of the User Information List (Both Profile Synchronization & Quick Profile Synchronization jobs), but this also had no effect.  I also thought that the issue may have been due to the fact that this environment is used only for development purposes, and has had a small number of local service accounts as well as accounts imported from AD over time, some of which no longer exist.  I tested this by modifying profile information for both a local and AD account, then forced a profile sync using stsadm.  I was able to update information in the “My Profile” for both accounts, but neither of the changes were applied to User Information Lists after the sync jobs were completed.

After running the "stsadm -o sync -listolddatabases <num days>" command, I found that there were two databases with out of date sync information.  I then ran the "stsadm -o sync -deleteolddatabases <num days>" command to remove the outdated sync information. The article Syncing WSS and MOSS User profile properties with Active Directory by Christian Dam provided me with information about User Profile Synchronisation, as well as the stsadm sync operation, which assisted with the process.  

Once the old sync information databases were removed, I then retried forcing the sync operation for both the Profile Sync. & Quick profile Sync. Jobs.  After checking that the Timer Job Status for the sync jobs had completed successfully via Central Administration, I then compared the information in User Information Lists on the site, which had also been successfully updated.

Other Related Resources:

Thursday, August 19, 2010

Set SharePoint List Form Web Part field values using JavaScript when Creating New Item

How to set values of form fields generated by the SharePoint List Form Web Part when adding a new item to the list using JavaScript.

Using a custom metadata field in a SharePoint list to set categorisation & filter criteria that is later used by List and Data View Web Parts to arrange & filter content for specific audiences.  Depending on the audience that a user is in, I wish to set alternate default values for specific fields rendered by the List Form Web Part.

In most cases, a custom multiple choice field in the list will be set to a value which corresponds to the current user’s audience, but will sometimes need to be manually adjusted.  To improve the experience for end users, the appropriate checkbox option from the multiple choice field that corresponds to the current user’s audience will be selected when the form loads, and the default value for the field un-checked if required.

The custom field is used in multiple content types across the primary site collection.  I found that when the field is included in a form rendered by the List View Web Part for a particular list, the HTML element name and id is not the equal to the same field rendered by a List Form Web Part on another list.  For this reason, I included the javascript on the NewForm.aspx page only on the list i wish to implement the feature using a Content Editor Web Part (CEWP).

A separate CEWP containing the JavaScript for each audience was added to the page under the List View Web Part, then targeted to the corresponding audience.

The JavaScript used to update the field values is quite simple.  As the field i wish to update is a multiple choice field (check boxes), I needed two lines of code in the script; the first unsellects the original default value for the field (set via the column settings), then selects the checkbox option that corresponds to the current user’s audience.  As all CEWPs are targeted to each audience, only one should display and execute the JavaScript for each user.  If a user is a member of more than one audience, the value set by the bottom most CEWP will be applied to the field rendered by the List Form Web Part.

Depending on the type of field being updated, you will need to update the JavaScript to set the field value with the appropriate data type and data.  The steps below apply to a multiple choice field displayed as check boxes.

<script type="text/javascript" language="javascript" >
 <!--
      document.getElementById('checkbox default value id').checked = "";
     document.getElementById('checkbox required value id').checked = "checked";
  //-->
 </script>

1. To find the Id of the fields that are being updated, view the source of the NewForm.aspx page and search for the internal name for the field.  The field will be directly after a html comment containing information about the field:

<!--      

FieldName="fieldname"
FieldType="SPFieldMultiChoice"
-->

2. Once you have found the position in the source containing the form input you with to update, first copy the id of the checkbox field that is selected by default.

3. In the first line of the above JavaScript, replace the text 'checkbox default value id' with the required Id of the form element.

4. Repeat step 2 to obtain the Id of the check box option you wish to select.

5. Replace (in the second line of the JS) the text 'checkbox required value id' with the required Id.

When the page loads, the CEWP corresponding to the current user’s audience will be displayed, resulting in the JavaScript updating the field values/selections in the above form generated by the List Form Web Part.  The checkbox field specified in the second line of JavaScript will be selected, and the original default option unchecked.



Related: 

Tuesday, August 10, 2010

Metadata not saving after editing properties - Document Metadata Error


Metadata Error: Metadata not saving on item in Document Library after editing Properties

Scenario:
I came accross an issue in a Document library where i was unable to update the document metadata properties using the SharePoint interface.  The Edit Item page worked fine, and I was able to set the metadata to the values i required, but after pressing ok to save the metadata the new values weren’t being saved into SharePoint (reverting back to the previous value).  

The issue was on multiple documents, but not specific to a folder within the library or dependent on certain metadata properties.  The majority of documents in the library work fine when applying changes to metadata.

After troubleshooting the issue a little, I found that I was able to update the metadata when editing the document using Office 2007.  After saving the document (stored in SharePoint), the metadata would be applied as expected.  I was also able to replicate the issue in a separate document library, where documents saved in Office 2007 format were not able to have the metadata applied using the SharePoint browser interface.

Searching the Internet for information about the issue didn’t help a lot in the end, but gave me a few things to try.  Issues others were having were possibly related to managed content types resulting in multiple columns being referenced in a document, and the patch level of the SharePoint environment.  Some users with SP1 or later applied weren’t able to replicate the issue.  See the following for more info:

Possible Cause(s)
Office 2007 Document in SharePoint Library with 2003 Compatible template
Service Pack - Patch Level
Managed Content Types:
- Corrupt Document Template associated with Content Type
- Duplicate Columns (1 associated with library, one with content type)

Resolution / Workaround:
I was able to save the metadata properties to a document by updating the metadata using Word 2007 (haven’t tested using 2003). To allow document metadata properties to be saved using the SharePoint interface, my workaround was to convert the document to an Office 2003 compatible document (from .docx back to .doc).

Thursday, July 22, 2010

Web Part Connections Not working - Web Parts Disappearing off page

Scenario:
Single Web Part being used to pass filter values to multiple web parts on a page.  After making changes to Web Part connections, only the most recent connection works.  All other connections previously configured on the source web part no longer worked.  The Web Parts being connected to were no longer displayed on the page.  In the end I was able to resolve the issue, but was not sure of the underlying cause.  My suspicions lean toward the custom web parts being used not being able to handle Web Part Connections properly.

Issue:
After completing the initial configuration of the various web parts on a page, I started configuring web part connections between the web parts.  I noticed that after configuring a connection, that it would be the only connection that works once applied.  Any previously configured connections to other web parts no longer worked and the web parts disappeared off the page.

I found that if configuring the connection from the source or destination web parts (“Send data to..” or similar) by editing the page using the browser, the web Part connections we able to be configured properly, and worked as expected once applied.  If continuing to use the browser to configure or make changes to Web Part Connections, the changes remained in place on all web parts once applied.

I then wanted to adjust the text displayed by a web part if there were no items that matched the filter criteria, which I did using SharePoint Designer as the Web Part was a Data View.  I loaded the page in SharePoint Designer and made the changes to the Data View Web Part, but upon saving the changes to the page, all except one Web Part Connection stopped working.

When viewing the page in a browser once saved, all Web Parts previously connected to the source web part were not visible on the page.  Adjusting or re-setting the Web Part connection settings using SharePoint Designer had no affect on the connections once saved again and viewed in a browser.

My next step was to revert back to using the browser to configure the Web Part Connections.  I then found that if trying to adjust the configuration of the connections, or even remove them using the browser was no longer working at all (because of making changes using SharePoint Designer).  Removing the connections using the browser did not work, and if the page was opened using SharePoint Designer, the connection details were still inside the <SPWebPartConnections> element even after attempting to remove using the browser.  Similarly, if adjusting the configuration of a connection using the browser, the changes seem to work for that particular connection after pressing ok, but after exiting edit mode, the web parts were not visible.

Solution:
To resolve the Web Part Connection issues, I needed to remove all connections using SharePoint Designer, then manually remove the connection details from the <SPWebPartConnections> element.  Once this was done, the web parts were visible on the page again, with no Web Part connections configured.

Note: If further changes need to be made to the page or web parts using SharePoint Designer, it needs to be done here, before configuring the connections using the browser or the same issue will arise.

Using the browser, I re-configured each Web Part Connection from scratch, ensuring that the settings were being applied successfully each time.  Once complete, I published the changes and did some testing until I was satisfied that the filter values passed by web part connections were working as intended.

I am not sure why the connections were playing up, as I have not come accross this issue before.  In the case where I may forget that using SharePoint Designer to make changes to this page will break it, I have documented the process above.  If anyone knows an explanation of the cause, I would be very interested to find out.

Sunday, July 18, 2010

Can't Deploy Solution Once Added to Solution Store - SharePoint (MOSS 2007)

Can't Deploy Solution Once Added to Solution Store Via Central Admin


I tried deploying a custom Web Part solution to a MOSS 2007 environment via the Solution Management page in Central Admin.  I was able to select the solution, time to deploy (now) and the Web Applications to deploy to, then press OK to initiate the process. From here I am taken back to the Solution Management page, where the solution I wish to deploy has the status “Deploying(scheduled at ... )”.  After a few seconds and a page refresh, the status returns to “Not Deployed” and the “Deployed To” value remains as “None”. 

Issues Deploy Solution using STSADM

I was able to add the solution to the solution store using the STSADM command line tool, but when trying to deploy the solution to Web Applications hosting SharePoint, the process didn't complete successfully although it states that it did.

If I open the Solution Properties, the Last Operation Result and Details both state “The solution was successfully deployed”, but the Deployment Status is “None”.

As there are multiple servers running in the farm, my first thought that deployment timer jobs were not being executed properly on each server.





STSADM - Deploy Solution on Frontend
My Solution, was to manually deploy the solution locally using STSADM on the frontend server.  The following command allowed me to deploy the solution to site collections accross the farm:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN>stsadm -o deploysolution -name "WebPartName.wsp" -allcontenturls -local -allowGacDeployment

After manually running this command, the result of the STSADM operation was: “Operation completed successfully”.  When viewing the list of solutions installed, the status for the new Web Part solution had updated to “Deployed”, with the “Deployed to” column stating the applications in which the solution was deployed.  I was then able to activate the solution for the site collection, via the Site Collecion Features.





References: 

Monday, January 25, 2010

How to configure a workflow to start at specific time, then loop / repeat periodically (Daily, Weekly)

The following method can be used to start a workflow at a specific time, then repeat periodically (each day).

Periodic Workflow Processing (send daily email notification or reminder)
A useful implementation of this technique allows you to configure workflows to run as background tasks at a specific time instead of being triggered by a user manually, or after creating or modifying a list item. This allows processing of data from SharePoint to take place during times when the SharePoint environment is not being used as well as performing tasks that take a long time to complete.
For example, this method can be used to configure a looping timer workflow to run at COB each day (5:00pm) to perform calculations and processing on a list item before emailing a reminder, or details to a user associated with the list item or document. When initiated for the first time, the workflow waits until the specified time (5:00PM) before executing workflow actions. After the workflow is complete, a secondary list item is modified, which in tern initiates a new instance of the workflow. As the initial time (and date) that workflow waited until to start would have passed by the time the workflow is started the second time, the workflow waits for a specified period of time instead (eg. 1 day) before completing the workflow actions. The result is a looping timer workflow that starts at the time specified, then repeats on a periodic basis (every 24 hours / daily) indefinitely, or until certain criteria is met.
As the repeating sequence only needs to be initiated once, this method can be used to build workflows to complete background processing to help minimise the impact on users, as well as improve usability and functionality of web applications created using components of SharePoint. See below for an example of a Looping Timer workflow used to complete processing as a background task at a specific time each day.

Looping Timer Workflow for Background Processing
When a workflow takes time to process but doesn't require user input or intervention, it is possible to configure the workflow to run as a background process to eliminate the need for users to initiate the workflow each time it is required, as well as allowing complex and timely processing to be completed "behind the scenes". As these workflows may take a long time to complete forcing a user to wait for the workflow to complete after manually initiating, or modifying / adding an list item to a list to initiate the workflow can result in frustration if there are long delays. Configuring workflows such as this to repeat periodically allows the workflow to start and finish in it's own time, eliminating the need for SharePoint users to initiate and control the workflow. Other workflows initiated by users can then refer to the data generated and stored by the looping workflow allowing them to complete in a short amount of time as no complex or in-depth processing is required to complete the operation.
The looping workflow sequence is initiated once, then repeats indefinitely or until a specified date if required. The workflow will complete the operations required for each iteration, then pause until the operation is to be executed next. This will mean that the workflow will continue to complete the processing without a user needing to manually initiate a new instance of the workflow. A common implementation of this technique may be to send a daily or weekly email report or reminder with details of a list item or data from many lists and items similar to the example above. Other scenarios where this can be utilised are times when workflows are used to process many list items, as well as perform calculations and other operations on the list items that require time to process. With scenarios such as this, configuring a looping timer workflow to automatically initiate and complete the processing at a specific time each day (or hour) eliminates the need for a user to have to initiate the workflow, as well as allowing the workflow to complete seamlessly to users in the background.



Example: Daily Sales Report Workflow using SharePoint
Calculate sales totals for the current day's invoices. Store the data in a separate "Reports" list item for the day.
A looping workflow may be configured to loop through each item in a SharePoint list (Invoices), then extract data from a specific field from each list item which is the added (concatenated) to a field in a secondary list item (Invoice Reports) for other workflows to refer to, or later use by SharePoint users. The workflow would process all Invoices which have not yet been processed, which will be any from the current day, as invoices from previous days will already have been processed.
A looping timer workflow can be configured to run at a specific time, then repeat every 24 hours to initiate the workflow(s) that loop through all items in a SharePoint list. The looping timer workflow will initiate the looping workflow to process invoices each day. A looping workflow can sometimes take a while to complete if there are a large number of items in the list. Configuring the workflow to be initiated by a user may not be appropriate as the delay may reduce the effectiveness of the workflow and increase user frustration. Configuring a timer workflow to initiate the workflow loop allows the processing (of all items in a list) to complete in isolation to workflows initiated by users that refer to the data generated when processing all list items.
Depending on how often the data changes and how important it is that the data is up to date, you may need to configure the looping timer workflow to initiate the workflow to process all items at shorter intervals (eg. hourly, every 10 minutes, etc.). As long as the list containing the items being processed is separate to the list item that stores the data from all items, it would also be possible to initiate the workflow loop to process all items when any of the items in the list are updated or added. If configured this way, an "On Change" and "On Create" workflow would initiate after a list item is added or modified, which would then make a change to the secondary list item to initiate the workflow loop sequence. The loop sequence would then process each item in the list until complete.
See below for a breakdown of a Background Processing Workflow that repeats daily using the above example.


Looping Processor / Looping Timer Workflow
Components (Daily Sales Report):
SharePoint List: Invoices
- Invoice 1
- Invoice 2
- Invoice 3
The "Invoices" list is the list which contains the items to be processed. Each item / "Invoice" ion the list is processed to calculate daily sales totals for each staff member.

Invoice Reports
- Report xxx (20-01-10)
- Report xxx (21-01-10)
- Report xxx (22-01-10)
This "Invoice Reports" list contains one list item for each day. The report data from each invoice item for the current day will be added to an Invoice Report item in this list once all have been processed to calculate sales totals.

Workflow Control List
- Temporary items used to initiate and control workflows and the looping functionality.

Workflows:
- Invoice Processing Workflow
- Initiate Invoice Processing Workflow
- Invoice Processing Timer Workflow


Looping Timer and Background Processing Workflow Diagram:
(Click to enlarge)


























Workflow Details:

1. Invoice Processing Timer Workflow
This workflow will commence at a specified time (eg. 6:00 PM), then repeat every 24 hours (daily) after the first instance has completed. This looping timer workflow will be used to initiate the "Initiate Invoice Processing" (Looping Timer Workflow) at the end of each day by creating an item in the Workflow Control list with the title "Start Report Loop". This "Invoice Processor Timer Workflow" workflow will only need to be initiated once, as it is configured to automatically trigger a new instance of the workflow each day. When configured using SharePoint Designer, one of the first steps in the workflow would be to test if the current time is before or after the start date/time for the workflow (specified in a "start_date" field in the list item).

2. Initiate Invoice Processing Workflow: (Looping Timer Workflow)
The purpose of this workflow is to initiate an instance of the "Invoice Processor Workflow" on each item in the list being processed. The workflow will initiate when an item is added to the Workflow Control list with a specific title (eg. "Process Next Invoice"). The workflow will find the first unprocessed item available list item from the Invoices list, and update a field which indicates that it is being processed ("Processed" = no/false). Updating the field will initiate the On Change workflow (Invoice Processor Workflow) to process the updated item.

3. Invoice Processing Workflow
Process an item from the Invoice List. A separate instance of this workflow will be initiated for each item in the list each time the looping workflow sequence is executed. Updates the item from the invoice Reports list with data from each Invoice (daily totals: sales, turnover, profit, sale type, compute staff rank based on total profit, etc.).


Workflow Control List & Workflow Triggers
The workflows associated with the Workflow Control List Invoice Processing Timer (1), Initiate Invoice Processing (2) ) are should be configured to start when a new item is added to the list. The first step of the Invoice Processing Timer (1) workflow will be to stop the workflow if the Title of the current item (item added to the list) is not equal to "Start Report Loop". This will mean that other items added to the workflow control list with a Title that isn't "Start Report Loop", won't initiate the Invoice Processing Timer (1) workflow unnecessarily. The Initiate Invoice Processing (2) workflow should have a similar configuration for the first step: Stop if the Title of the current item is not "Process Next Invoice". This will mean that only items with this title will continue into the remain workflow steps.

The Invoice list will need a column/filed to flag if the Invoice has been processed or not. This could be a hidden boolean (true/false) field "Processed" or similar, which would be set to No/false as default when an Invoice is added to the list. The "Processed" field would be used by the Initiate Invoice Processing (2) workflow to find the next Invoice item to be processed. The unprocessed Invoice item found should then be updated by setting "Processed" to yes/true, which will then initiate the Invoice Processor (3) workflow for that Invoice. The final step of the Invoice Processing (2) workflow after initiating the next Invoice Processor workflow in the sequence can be to remove the current item ("Process Next invoice"), as t is no longer required. The final steps of the Invoice Processor (3) workflow should be to create a new item in the Workflow Control list with the title "Process Next Invoice", which will re-initiate the Initiate Invoice Processing (2) workflow creating the looping functionality, then set "Processed" to yes/true.

As the workflow is scheduled to run every 24 hours, items in the Invoices list from previous days will already have been processed by previous instances of the workflows. Only invoices added to the Invoice list since the last time the Report workflows were run, which will be any from the current day.



Related:

SharePoint Looping Workflow - How to: Loop through and process all items in a list
To use SharePoint workflows to loop through all items in a list to perform calculations, process and update metadata values, or concatenate the value of a specific column in all list items into a single string.

How to get an SPD Workflow to Run at a Specific Time – Employee Vacation Reminder: Part 5

(Looping) Timer Workflows Using SharePoint
Looping timer workflow (eg. send a daily notification/reminder until a specific condition is met.


How to wait for a change in any list, wait for multiple field changes in the current item (SharePoint Workflow)
This article describes techniques which can be used when developing workflows in SharePoint using SharePoint Designer. They allow a workflow to wait for a field change in an item in another list, or to wait for multiple field changes in the current item before continuing.

SPD Workflow - Test if value exists in any item in SharePoint list - create new item if not found
SharePoint Designer Workflow: How to test if a specific value exists in any item in a list without the workflow stopping due to a "List item not found" error if no items exist with the required value.


SharePoint Workflow Errors: Descriptions, resolutions and WorkaroundsThe following table lists some of the common errors that can occur in a Workflow developed using SharePoint Designer. A short description of some of the likely causes for each error are also provided.

Thursday, January 7, 2010

SharePoint Forums, Blogs and Online Communities

SharePoint Forums

The following page provides a comprehensive list of websites hosting popular forums relating to SharePoint. Learn how to customise, develop and administer SharePoint environments from industry experts by browsing through existing threads, or by posting a new thread if you have a question which hasn't been answered in one of the forums. All of the forums listed are free to join and contribute.

Forums relate to WSS, MOSS 2007 and SharePoint 2010, and include the official Microsoft product and Technologies and other forums such as the SharePoint Development & Programming, SharePoint Setup and Administration, SharePoint Design and customisation.


SharePoint Blogs

The SharePoint Blogs listed on the page are predominantly SharePoint MVPs, with years of experience, and many useful articles, tips and tutorials to help when customising, developing and administering SharePoint.


SharePoint Groups

There are many groups (newsgroups) available that contain information, and references to other useful information and resources that can help when customising, developing or administering SharePoint. The groups provided on the following page are moderated to ensure that inappropriate or illegal content, including spam is not added to the groups.