Mark Jones' Blog

Go Back
  • What exactly is SAF and why would I need it ? (FAQ) ?

    -

     For those out there that are a little curious as to whether SAF is any use to your organisation, please read this FAQ.

     What is SAF ?

    • SAF is free to use.
    • SAF is the "SharePoint Action Framework", it was built by myself and Hugo (plus a few others along the way).
    • SAF is written entirely in C# code, available from : http://saf.codeplex.com.  
    • SAF is a way to automate SharePoint configuration changes.
    • An Action is a command/class/task/script written in C# that performs a unit of execution against SharePoint such as "CreateWeb"  or "AddLookupColumn".
    • A SAF Macro is collection of one or more Actions.
    • A SAF Macro can be run from Msbuild, a Feature, StsAdm or plain old .Net code.
    • Parameters can be passed to a Macro at run-time from a variety of sources such as "Environment Variable", "*.config", "Msbuild Properties", Feature Properties, command line args, .net code.
    • SAF emits lots of trace statements at run-time, these can be viewed using "DebugView".
    • One Action can pass parameters to another Action.
    • Parameters can be set using Spring expression syntax such as "DateTime.Now - 10".

     You should consider SAF if you suffer from one of the following symptoms...

    • "Our developers write lots of ...

    Full story

    Comments (0)

  • Automating SharePoint configuration with MSBuild and SAF

    -

    One of the major areas developed for v2 of the SharePoint Action Framework (SAF) is its ability to integrate tightly with Msbuild. In order to get SAF working, you simply need to reference the Msbuild Saf task - which can be referenced like this :

    <UsingTask AssemblyName="Collaboris.Saf, Version=2.0.0.0, Culture=neutral, PublicKeyToken=182db3eac6a9e195" TaskName="Collaboris.Saf.Adapters.MSBuild.SAF" />

    You may also choose to create a couple of targets (one for the Undo and one for the Do) - like this - but this is optional.

    <Target Name="Do">
      <SAF MacroPaths="@(Macros)" ProcessMode="Do" ContinueOnError="false" />
    </Target>
    <Target Name="Undo">
      <SAF MacroPaths="@(Macros)" ProcessMode="Undo" ContinueOnError="false" />

    <Target>

    Now this is setup, you then need to create a few item groups where all the properties can be passed to.

    <ItemGroup>
        <Macros Include="Collaboris.Saf.Actions.Wss.Web.CreateWeb.macroTemplate">
          <disabledo>false</disabledo>
          <disableundo>false</disableundo>
          <description>New Web created by SAF</description>
          <lcid>1033</lcid>
          <overwrite>true</overwrite>
          <template>STS#0</template>
          <title>New Web title</title>
          <url>NewWeb</url>
          <useuniqueperms>false</useuniqueperms>
          <webname>New Web name</webname>
          <id>{47B640DD-64A9-493b-8445-789FC0D05FF1}</id>
          <stopondoexception>true</stopondoexception>
          <stoponundoexception>true</stoponundoexception>
          <Url>http://localhost:4422</Url>
          <InstanceId>{156E17A5-A7BA-4e1f-8A48-1BC341A7C658}</InstanceId>
        </Macros>
      </ItemGroup>

    For a more detailed walkthrough, please take a look at 'How to run a Macro from MSBuild '. You will find an example of how to call every SAF action in the documentation which can ...

    Full story

    Comments (0)

  • SAF v2 is released

    -

    SAF v2 is now freely available to download from CodePlex @ http://saf.codeplex.com
     
    Major points worth noting in this release :
     
    - Loads more actions to help you automatically configure SharePoint.
     
    - Downloadable examples and documentation explaining how to run every Action.
     
    - Run actions from an MSBuild project and pass properties.
     
    - Run actions from a SharePoint Feature and pass properties.
     
    - Run actions from StsAdm and pass properties.
     
    - Support for Dynamic Properties - allowing you to pass values from one action to another.
     
    - Support for Placeholders (tokens) allowing runtime replacement from these sources :
    • Web|app.config files,
    • Environment Variables,
    • Registry values,
    • MSBuild Properties
    • Feature Properties.
     
    - Support for Expressions when setting properties on the actions.
     
    - Improvements to logging using .Net tracing statements - easily viewable in DebugViewer
     
    As always we love to hear your feedback, so drop us an email to support@collaboris.co.uk or leave a comment on our Wiki or on Codeplex.
     
    Happy automating!
    The SAF Team

    Full story

    Comments (0)

  • Roadmap for SAF 1.4

    -

    It’s 6am and I am bored, so I thought I would give you a quick heads up on what’s coming in the next version of SAF (due by the end August). Here’s the Feature list :

    DSL with Diagram capabilities inside Visual Studio 20008.

    This is probably been the most exciting one for the release. We have been spending a few months working on a way to create SAF Macros visually via a VS 2008 designer window. This will give you the following advantages :

    • You don’t need to know the Schema for a SAF Macro (which happens to be a Spring IOC Container)
    • It’s much easier to see what a Macro will do. (a “picture paints a thousand words (or Xml Elements in our case)
    • It’s nice to demo – much nicer than showing you how to create a Macro in Xml anyway.

    Usage will be very simple and will happen like this :

    1. Load a new VS2008 Project –(more than likely a WSP Builder project).
    2. From the menu, choose “Add new SAF Macro”
    3. …Designer loads…
    4. Select one or more actions and drag onto the design surface
    5. Configure the parameters for each of the Actions
    6. Connect the  actions to ...

    Full story

    Comments (0)

  • Deploy new and existing Content Types with SAF (using standard CAML)

    -

    The Problem

    If you have ever deployed a SharePoint Content Type via a Feature (using standard CAML) you will more than likely run into one or more of the various “quirks”, namely :

    • The Content Type deploys correctly if its not already in the Farm, but if your Content Type is in use, or customised via the GUI then updating Feature has no effect. In this situation you are forced to create your Feature with CAML, but upgrade and maintain it with Feature Receiver Code.
    • If you want to “push” your changes down to any lists, this has to be done in code.

    I have detailed most of the issues in “Upgrading Content Types”. Becky Bertram also wrote an awesome post on the issues in “Updating Content Types and Site Columns That Were Deployed as a Feature”.

    How “EnsureContentType” (in SAF) solves these problems

    The reason for this post is to tell you about a SAF Action that removes some of these barriers and offers the following benefits :

    • The Action uses a standard SharePoint CAML file containing one or many <ContentType> elements (as defined in the ”http://schemas.microsoft.com/sharepoint/” schema).
    • Content Types that don’t already ...

    Full story

    Comments (0)

  • Early morning news!

    -

    Well, the hayfever has got me again! Here I am at 6am with a bunged up nose and itchy eyes wide awake. So I thought I would do the sensible thing and give you a heads up on what’s due in the next release of SAF.

    Here’s the Feature list : 

    New Actions

    STSAdm Action. This allows us to call STSAdm commands and pass arguments from a SAF Macro.

    Powershell Action. Allows us to to call Powershell “Function” and pass arguments from a SAF Macro.

    Adapters

    In SAF, we think of “Adapters” as being components that allow a SAF Macro to be run from a particular technology. In the current release we have :

    STSAdm Adapter. Allows you to run SAF from an STSAdm extension.

    Feature Adapter. Allows you to SAF run from a SharePoint Feature. This is simple as creating a Feature.Xml and a Macro.xml file. Check out the Quick Start for more info.

    In the next release here’s what’s coming :

    MSBuild Adapter. This will let you hook SAF directly into your MSBuild process. This is going to pretty useful for companies that already have a MSBuild process, but want to hook SharePoint ...

    Full story

    Comments (0)

  • Run STSADM commands from SAF

    -

    I am pleased to announce that it’s now possible (with release 1.2.3463.00) , to run STSADM commands from the SharePoint Action Framework (SAF). Hence, if you add the standard STSAdm commands (that ship with SharePoint) to the truly awesome collection that Gary Lapointe has developed, (available on his STSADM Blog), you are looking at over 250 useful SharePoint Actions.

    This functionality has been made available by a new Action called “StsAdm”. The Action should be called via an Alias like this “Action.StsAdmin”. (Aliasing is for convenience so that you don’t have to put the full 4 part assembly reference into the Macro).

    An example :

    This example illustrates how to create a Macro that calls the new Action and executes 2 STSAdm commands to delete a group and also create the group.

    <?xml version="1.0" encoding="utf-8"  ?>  
    <objects  xmlns="http://www.springframework.net">  
      
      <!-- Defines the main macro to process -->  
      <object  id="MacroToProcess"  type="Macro"  >  
      <constructor-arg  name="id"  value="{8BB25F02-5E41-4e86-BCA2-E253747354A3}"  />  
      <constructor-arg  name="actions">  
      <list  element-type="IAction">  
      
      <!-- Runs the STSAdm Command-->  
      <object  name="RunStsAdminCommands"  type...

    Full story

    Comments (0)

  • Content Migration using SAF

    -

    SAF contains 6 ready-to-use Actions that allow the Exporting and Importing of :

    - List Items

    - Lists

    - Webs

    The 3 pairs of Actions that allow you to do this, are namely :

    - ExportListItem & ImportListItem

    - ExportList & ImportList

    - ExportWeb & ImportWeb

    The actions are listed as pairs, for convenience, although there is nothing that mandates that they have to be run one after the other. In fact, you can export a List and import it into a completely different Farm months later if you so wish. In addition to this, although each pairing exports and imports different types of content, they all follow the same process, which is  :

    1. Export to a Content Migration Package (CMP) according to settings specificied in the “Export” Action.

    2. Import from a CMP file according to settings specificed in the “Import” Action.

    In principal that’s it! If you download the source code from here : http://SAF.Codeplex.com, you will find some useful examples at the locations listed below :

    1. {YourDrive}\src\CollaborisSaf.SampleFeatures\12\TEMPLATE\FEATURES\WSS.ContentMigration.CopyListItem
    2. {YourDrive}\src\CollaborisSaf.SampleFeatures\12\TEMPLATE\FEATURES\WSS.ContentMigration.CopyList
    3. {YourDrive}\src\CollaborisSaf.SampleFeatures\12\TEMPLATE\FEATURES\WSS.ContentMigration.CopyWeb

    The examples all demonstrate how to export and import in one go from a Feature. However, in reality, you will more than likely Export from a ...

    Full story

    Comments (5)

  • How to install SAF

    -

    A couple of you emailed and asked how to install SAF (version 2), so here's some instructions.

    Installing...

    If you have never insalled SAF on your SharePoint Farm then you need to install. To do this, you need to use STSAdm commands which I have popped into a batch file. Hence follow the steps below :

    1. Logon to a SharePoint Server in your Farm as a Farm Administrator.
    2. Download "Install.bat" to that server in your SharePoint Farm (right click "Save Target as...")
    3. Remove the '.txt' extension.
    4. Download the latest version of SAF from "http://saf.codeplex.com/".
    5. Extract "SAFv2.wsp" to the same folder as the batchfile in step 2.
    6. Ensure the path in STSAdm in "install.bat" is correct.
    7. Run "install.bat"

    Upgrading...

    If you already have a version of SAF on your Farm and want to upgrade to a newer version, please complete the steps below :

    1. Logon to a SharePoint Server in your Farm as a Farm Administrator.
    2. Download "Upgrade.bat" to that server in your SharePoint Farm (right click "Save Target as...").
    3. Remove the '.txt' extension.
    4. Download the latest version of SAF from "http://saf.codeplex.com/".
    5. Extract "SAFv2.wsp" to the same folder as the batchf ile in step 2.
    6. Ensure the path in STSAdm in ...

    Full story

    Comments (0)

  • SAF is released!

    -

    At Last! Finally, we have released the SharePoint Action Framework (SAF) on CodePlex!! Please take a look at : http://saf.codeplex.com .

    Now that I can take a minute, I just wanted to spend a bit of time detailing why we have spent the best part of 18 months (with lots of late nights building it!) Here's a FAQ to give you some answers:

    If you are developing with SharePoint, do you suffer from any of these ?

    • Lots of Defects caused by differences in SharePoint Farms. – eg. “It works on Integration, but not on QA!” .
    • Your Development team find it time consuming telling your Release team what to do for each release. “How hard can it be to put 5 columns in a Content Type?”
    • You have release documents (notepad, word, etc) that don’t contain enough information on how to deploy, or they always miss things and are extremely time consuming to create. “By heck surely there must be a better way of telling the Operations team what I need doing ?”
    • Deployments to key farms are always late and very stressful. “I hope we don’t get a release like that again, I didn’t finish till ...

    Full story

    Comments (0)

  • Upgrading SharePoint Site Columns

    -

    Introduction

    In a previous post, I explained my findings with "Upgrading Content Types", but now I want to test out a few scenarios with upgrading Site Columns. On the whole, the test results for Site Columns were pretty similar to that of Content Types. Although, I wanted to test what we can do when it comes to updating site columns that contain data. If you don't want to read each test case, please check out the "Summary" at the end of this post.

    Test Cases – Removing a Site Column

    Can we remove a site column by deactivating the Feature that deployed it? Yes

    Test Steps:

    1.       Deploy a Site Column (via Feature and CAML)

    2.       Deactivate the Feature

    Outcome:

    1.       Site Column will be removed

    2.       Feature is deactivated

    Can we remove a site column (thats referenced by a List Column) by deactivating the Feature that deployed it? Yes

    Test Steps:

    1.       Deploy a Site Column (via Feature and CAML)

    2.       Add the Site Column to a List (as a List Column)

    3.       Deactivate the Feature

    4.       Recycle Application Pools

    Outcome:

    1.       Site Column will be removed

    2.       ...

    Full story

    Comments (3)

  • Upgrading SharePoint Content Types

    -

    Introduction

    Well it's now Saturday afternoon and the family have been out shopping all day, so I have taken the opportunity to conduct some tests that I had been meaning to do for a long time now (geek I hear you say). I wanted to find specifically what happens if you want to make changes to Content Types, Columns and Lists that have previously been deployed using Features and CAML. I am going to split my findings up into several posts.

    I will detail each set of tests then summarise at the end what I think should be best practice if you want to update these.

    Test Cases – Removing Content Types

    Can we remove a content type by deactivating the Feature that deployed it? Yes

    Test Steps:

    1.       Deploy a Content Type (via Feature and CAML)

    2.       Deactivate the Feature

    Outcome:

    1.       Content type will be removed

    2.       Feature is deactivated

    Can a Content Type can be removed that’s in use by a List? Yes (and No)

    Test Steps:

    1.       Deploy a Content Type  (via Feature and CAML)

    2.       Reference it in a list

    3.       Deactivate the Feature

    Outcome:

    1.       Content Type is removed

    2.       Feature is deactivated

    3.       ...

    Full story

    Comments (4)