<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
    <title>Mark Jones</title>
    <link rel="self" type="application/xml" href="http://geekswithblogs.net/SAF/Atom.aspx" />
    <subtitle type="html"> </subtitle>
    <id>http://geekswithblogs.net/SAF/Default.aspx</id>
    <author>
        <name>SAF</name>
        <uri>http://geekswithblogs.net/SAF/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 0.0.0.0">Subtext</generator>
    <updated>2010-03-11T20:08:04Z</updated>
    <entry>
        <title>What is the SharePoint Action Framework and why would I need it ?</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2010/03/11/what-is-the-sharepoint-action-framework-and-why-do-i.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2010/03/11/what-is-the-sharepoint-action-framework-and-why-do-i.aspx</id>
        <published>2010-03-11T18:09:2000:00:00</published>
        <updated>2010-03-11T20:08:04Z</updated>
        <content type="html">&lt;p&gt; For those out there that are a little curious as to whether SAF is any use to your organisation, please read this FAQ.&lt;/p&gt;
&lt;h4&gt; What is SAF ?&lt;/h4&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div&gt;SAF is free to use.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;SAF is the "SharePoint Action Framework", it was built by myself and Hugo (plus a few others along the way).&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;SAF is written entirely in C# code, available from : &lt;a href="http://saf.codeplex.com/"&gt;http://saf.codeplex.com&lt;/a&gt;.  &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;SAF is a way to automate SharePoint configuration changes.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;An Action is a command/class/task/script written in C# that performs a unit of execution against SharePoint such as "CreateWeb"  or "AddLookupColumn".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;A SAF Macro is collection of one or more Actions.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;A SAF Macro can be run from Msbuild, a Feature, StsAdm or plain old .Net code.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;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.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;SAF emits lots of trace statements at run-time, these can be viewed using "DebugView".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;One Action can pass parameters to another Action.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;Parameters can be set using Spring expression syntax such as "DateTime.Now - 10".&lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; You should consider SAF if you suffer from one of the following symptoms...&lt;/h4&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div&gt;"Our developers write lots of code to deploy changes at release time - it's always rushed"&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"I don't want my developers shelling out to Powershell or Stsadm from a Feature".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"We have loads of Console applications now, I have lost track of where they are, or what they do"&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"We seem to be writing similar scripts against SharePoint in lots of ways, testing is hard".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"My scripts often have lots of errors - they are done at the last minute".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"When something goes wrong - I have no idea what went wrong or how to solve it".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"Our Features get stuck and bomb out half way through - there no way to roll them back".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"We have tons of Features now - I can't keep track".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"We deploy Features to run one-off tasks"&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"We have a library of reusable scripts, but, we can only run them in one way, sometimes we want to run them from MSbuild and a Feature".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"I want to automate the deployment of changes to our development environment".&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;"I would like to run a housekeeping task on a scheduled basis"&lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt; &lt;/h4&gt;
&lt;h4&gt;
&lt;p&gt;So I like the sound of SAF - what's the problems ?&lt;/p&gt;
&lt;/h4&gt;
&lt;p&gt; Realistically (and honestly), there are few things that need to be considered:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;strong&gt;Someone on your team will need to spend a day or 2 learning + understanding SAF &lt;/strong&gt;and deciding exactly how you want to use it. I would suggest a Tech Lead, System Admin or SP Architect will need to download it, try out the examples, look through the unit tests. Ask us questions. Although SAF can be downloaded and set to go in a few minutes, you will still need to address issues such as - "Do you want to execute your Macros in MsBuild or from a Feature ?" and "How can I integrate SAF into my current build and deployment process?"&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;strong&gt;You will need to decide who is going to do your deployments &lt;/strong&gt;- is it each developer to themself, or do you require a dedicated Build Manager ?&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;As most environments (Dev, QA, Live etc) require different settings (e.g. Urls, Database names, accounts etc), you will more than likely want to define these and &lt;strong&gt;set a properties file &lt;/strong&gt;up for each environment. (These can then be injected into Saf at run-time).&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;strong&gt;There may be no Actions to solve your particular problem&lt;/strong&gt;. If this is the case, suggest it to us - we can try and write it, or write it yourself. It's very easy to write a new Action - we have an approach to easily unit test it, document it and author it. For example, I wrote one to deploy  a WSP in 2 hours the other day. Alternatively, Saf can also call Stsadm commands and Powershell scripts. Once the Action is written you can register it with SAF then all your devs can run it using the most appropriate client.&lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, I do hope this helps! If you still need help, or a quick start, we can also offer consultancy around SAF. If you want to know more give us a call or drop an email to &lt;a href="mailto:support@collaboris.co.uk"&gt;support@collaboris.co.uk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/138459.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/138459.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/138459.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/138459.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Automating SharePoint configuration with MSBuild and SAF</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2010/02/18/automating-sharepoint-configuration-with-msbuild-and-saf.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2010/02/18/automating-sharepoint-configuration-with-msbuild-and-saf.aspx</id>
        <published>2010-02-18T21:23:4200:00:00</published>
        <updated>2010-02-18T21:23:42Z</updated>
        <content type="html">&lt;p&gt;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 :&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;&amp;lt;UsingTask AssemblyName="Collaboris.Saf, Version=2.0.0.0, Culture=neutral, PublicKeyToken=182db3eac6a9e195" TaskName="Collaboris.Saf.Adapters.MSBuild.SAF" /&amp;gt;&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;&amp;lt;Target Name="Do"&amp;gt;&lt;br /&gt;  &amp;lt;SAF MacroPaths="@(Macros)" ProcessMode="Do" ContinueOnError="false" /&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="Undo"&amp;gt;&lt;br /&gt;  &amp;lt;SAF MacroPaths="@(Macros)" ProcessMode="Undo" ContinueOnError="false" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Target&amp;gt;&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;Now this is setup, you then need to create a few item groups where all the properties can be passed to.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;ItemGroup&amp;gt;&lt;br /&gt;    &amp;lt;Macros Include="Collaboris.Saf.Actions.Wss.Web.CreateWeb.macroTemplate"&amp;gt;&lt;br /&gt;      &amp;lt;disabledo&amp;gt;false&amp;lt;/disabledo&amp;gt;&lt;br /&gt;      &amp;lt;disableundo&amp;gt;false&amp;lt;/disableundo&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;New Web created by SAF&amp;lt;/description&amp;gt;&lt;br /&gt;      &amp;lt;lcid&amp;gt;1033&amp;lt;/lcid&amp;gt;&lt;br /&gt;      &amp;lt;overwrite&amp;gt;true&amp;lt;/overwrite&amp;gt;&lt;br /&gt;      &amp;lt;template&amp;gt;STS#0&amp;lt;/template&amp;gt;&lt;br /&gt;      &amp;lt;title&amp;gt;New Web title&amp;lt;/title&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;NewWeb&amp;lt;/url&amp;gt;&lt;br /&gt;      &amp;lt;useuniqueperms&amp;gt;false&amp;lt;/useuniqueperms&amp;gt;&lt;br /&gt;      &amp;lt;webname&amp;gt;New Web name&amp;lt;/webname&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;{47B640DD-64A9-493b-8445-789FC0D05FF1}&amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;stopondoexception&amp;gt;true&amp;lt;/stopondoexception&amp;gt;&lt;br /&gt;      &amp;lt;stoponundoexception&amp;gt;true&amp;lt;/stoponundoexception&amp;gt;&lt;br /&gt;      &amp;lt;Url&amp;gt;http://localhost:4422&amp;lt;/Url&amp;gt;&lt;br /&gt;      &amp;lt;InstanceId&amp;gt;{156E17A5-A7BA-4e1f-8A48-1BC341A7C658}&amp;lt;/InstanceId&amp;gt;&lt;br /&gt;    &amp;lt;/Macros&amp;gt;&lt;br /&gt;  &amp;lt;/ItemGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;For a more detailed walkthrough, please take a look at '&lt;a title="How to run a Macro from MSBuild " href="http://www.collaboris.co.uk/Projects/SafWiki/SAF_WIKI/How_to_run_a_Macro_from_MSBuild.aspx"&gt;How to run a Macro from MSBuild &lt;/a&gt;'. You will find an example of how to call every SAF action in the documentation which can be accessed at &lt;a href="http://www.collaboris.co.uk/saf/doc/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/138039.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/138039.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/138039.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/138039.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Examples of SAF Macros released for ALL actions...</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2010/02/18/examples-of-saf-macros-released-for-all-actions.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2010/02/18/examples-of-saf-macros-released-for-all-actions.aspx</id>
        <published>2010-02-18T20:50:0500:00:00</published>
        <updated>2010-02-18T20:50:05Z</updated>
        <content type="html">
&lt;table&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th&gt;Action&lt;/th&gt;
            &lt;th&gt;Description&lt;/th&gt;
            &lt;th&gt;Example&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddLookupColumnToList.html"&gt;AddLookupColumnToList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new &amp;lt;b&amp;gt;list&amp;lt;/b&amp;gt;-scoped lookup column pointing to an existing list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddLookupColumnToList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddSiteColumnToContentType.html"&gt;AddSiteColumnToContentType&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds a site column to an existing content type.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddSiteColumnToContentType.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddSiteColumnToList.html"&gt;AddSiteColumnToList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds a site column to an existing SharePoint list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.AddSiteColumnToList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.CreateLookupColumn.html"&gt;CreateLookupColumn&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new &amp;lt;b&amp;gt;site&amp;lt;/b&amp;gt;-scoped lookup column pointing to a field in an existing list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.CreateLookupColumn.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.EnsureSiteColumn.html"&gt;EnsureSiteColumn&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds or updates a SharePoint site column (allows the GUID to be specified for new columns).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.EnsureSiteColumn.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportList.html"&gt;ExportList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Exports a SharePoint list to a Content Migration Package (CMP) based on the web and list name.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportListItem.html"&gt;ExportListItem&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Exports a SharePoint list item to a Content Migration Package (CMP) based on the web, list name and list item ID.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportListItem.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportWeb.html"&gt;ExportWeb&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Exports a SharePoint web (SPWeb) to a Content Migration Package (CMP).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ExportWeb.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportList.html"&gt;ImportList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Imports a lists items from a Content Migration Package (CMP).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportListItem.html"&gt;ImportListItem&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Imports a web (SPListItem) from a Content Migration Package (CMP).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportListItem.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportWeb.html"&gt;ImportWeb&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Imports a web (SPWeb) from a Content Migration Package (CMP).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentMigration.ImportWeb.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.AddContentTypeToList.html"&gt;AddContentTypeToList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds a specified content type to a SharePoint list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.AddContentTypeToList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.EnsureContentType.html"&gt;EnsureContentType&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows a content type to be added or updated in a SharePoint site.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.EnsureContentType.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.SynchroniseContentTypes.html"&gt;SynchroniseContentTypes&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Ensures that a child content type has the same columns (fields) as the parent content type.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.SynchroniseContentTypes.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.AddFile.html"&gt;AddFile&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds a file to a list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.AddFile.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.ApproveFiles.html"&gt;ApproveFiles&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Approves a list of files contained within the list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.ApproveFiles.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CheckInFiles.html"&gt;CheckInFiles&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Checks in a list of files to one or more document libraries.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CheckInFiles.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CheckOutFile.html"&gt;CheckOutFile&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Used to check out a list of files in a one or more document libraries.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CheckOutFile.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CopyFile.html"&gt;CopyFile&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Copies a single file from a source list to a destination list (in SharePoint).&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.CopyFile.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.GetFiles.html"&gt;GetFiles&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Reads the list of files (and urls) specified in the ListFileInfo, based on a List Name and Filter Pattern.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.GetFiles.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.PublishFiles.html"&gt;PublishFiles&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Publishes a list of supplied files.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.PublishFiles.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.UpdateFileContent.html"&gt;UpdateFileContent&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Updates the file content in a list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.File.UpdateFileContent.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.AddListItemEventReceiver.html"&gt;AddListItemEventReceiver&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds a list event receiver to a SharePoint list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.AddListItemEventReceiver.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.DeleteList.html"&gt;DeleteList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Destroys (or recycles) a SharePoint list. Can also optionally delete data only.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.DeleteList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.ImportDataSetToList.html"&gt;ImportDataSetToList&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Imports the given Dataset data into the list.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.List.ImportDataSetToList.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.PropertyBag.EnsurePropertyBagItems.html"&gt;EnsurePropertyBagItems&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds (or updates) a value in the relevant property bag. The web, site, web application and farm property bags can all be updated.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.PropertyBag.EnsurePropertyBagItems.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Security.CreateUser.html"&gt;CreateUser&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new user in the site (see documentation on SPWeb.SiteUsers) and can optionally make the user site collection admin.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Security.CreateUser.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Site.CreateSite.html"&gt;CreateSite&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates (or overwrites) a site collection (SPSite) in a web application.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Site.CreateSite.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Web.CreateWeb.html"&gt;CreateWeb&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new web in a site collection.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Web.CreateWeb.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Web.SetMasterPage.html"&gt;SetMasterPage&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Sets the current web master page. Can also (optionally) set child webs.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Web.SetMasterPage.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebApplication.CreateWebApplication.html"&gt;CreateWebApplication&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new SharePoint web application.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebApplication.CreateWebApplication.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebApplication.ExtendWebApplication.html"&gt;ExtendWebApplication&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Extends an existing web application in IIS.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebApplication.ExtendWebApplication.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.AddWebParts.html"&gt;AddWebParts&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows multiple web parts to be added to a web part zone on a web part page.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.AddWebParts.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.ConnectWebParts.html"&gt;ConnectWebParts&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;This action allows 2 web parts (provider and consumer) to be connected on a particular web part page.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.ConnectWebParts.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.RemoveWebParts.html"&gt;RemoveWebParts&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows multiple web parts to be removed from a web part page.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.RemoveWebParts.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.SetWebPartProperties.html"&gt;SetWebPartProperties&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Sets the WebPart properties in a page.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.WebPart.SetWebPartProperties.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Wrappers.StsAdmin.html"&gt;StsAdmin&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows a SQL Statement to be run against a database as specified by a supplied connection string.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Wrappers.StsAdmin.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MOSS Actions available in SAF :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;/p&gt;
&lt;table&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th&gt;Action&lt;/th&gt;
            &lt;th&gt;Description&lt;/th&gt;
            &lt;th&gt;Example&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Navigation.ShowInNavigation.html"&gt;ShowInNavigation&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows the current site to be included or excluded from the global and/or current navigation.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Navigation.ShowInNavigation.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.CreateRedirectPage.html"&gt;CreateRedirectPage&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Creates a new redirect page using the standard SharePoint redirect page layout.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.CreateRedirectPage.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.PublishPage.html"&gt;PublishPage&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Attempts to publish a page in a SharePoint publishing 'Pages' library.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.PublishPage.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetAvailablePageLayout.html"&gt;SetAvailablePageLayout&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds or removes page layouts from the 'Available Page Layouts' collection in the current web.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetAvailablePageLayout.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetAvailableSiteTemplates.html"&gt;SetAvailableSiteTemplates&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds or removes site templates from the 'Available Site Templates' collection in the current web.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetAvailableSiteTemplates.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetPageLayout.html"&gt;SetPageLayout&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Updates a publishing page layout for a publishing page.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetPageLayout.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetWelcomePage.html"&gt;SetWelcomePage&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Sets the 'Welcome Page' (default) page to a specific page in the 'Pages' library for the current publishing web.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.SetWelcomePage.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.UpdatePublishingPageFields.html"&gt;UpdatePublishingPageFields&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Adds or Updates a field to a specific page in the 'Pages' library for the current web.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Moss.Publishing.UpdatePublishingPageFields.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Standard Actions available in SAF&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;/p&gt;
&lt;table&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th&gt;Action&lt;/th&gt;
            &lt;th&gt;Description&lt;/th&gt;
            &lt;th&gt;Example&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.DataSet.GetDataSetFromCSV.html"&gt;GetDataSetFromCSV&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;This action is responsible for getting a DataSet from a Comma Seperated File.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.DataSet.GetDataSetFromCSV.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Files.GetFiles.html"&gt;GetFiles&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Gets a list of file names (with path) for the given criteria.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Files.GetFiles.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Ftp.FtpUpload.html"&gt;FtpUpload&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;This action will FTP one or many files to a destination FTP server.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Ftp.FtpUpload.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Powershell.ExecutePowershell.html"&gt;ExecutePowershell&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows 1 (or more) Powershell scripts to be run.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Powershell.ExecutePowershell.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.SQL.ExecuteSQL.html"&gt;ExecuteSQL&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;Allows a SQL statement to be run against a database as specified by a supplied connection string.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.SQL.ExecuteSQL.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;b&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Templating.NVelocity.html"&gt;NVelocity&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td&gt;This action requires a user defined collection and the name of an NVelocity Template, to create an instance of an outputted document.&lt;/td&gt;
            &lt;td&gt;&lt;a class="externalLink" href="http://collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Templating.NVelocity.zip"&gt;Download Quickstart&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/138036.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/138036.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/138036.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/138036.aspx</trackback:ping>
    </entry>
    <entry>
        <title>SAF v2 is released.</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2010/02/08/saf-v2-is-released.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2010/02/08/saf-v2-is-released.aspx</id>
        <published>2010-02-08T19:14:3400:00:00</published>
        <updated>2010-02-08T20:24:09Z</updated>
        <content type="html">&lt;div&gt;SAF v2 is now freely available to download from CodePlex @ &lt;a href="http://saf.codeplex.com"&gt;http://saf.codeplex.com&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Major points worth noting in this release :&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Loads more actions to help you automatically configure SharePoint.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Downloadable examples and documentation explaining how to run every Action.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Run actions from an MSBuild project and pass properties.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Run actions from a SharePoint Feature and pass properties.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Run actions from StsAdm and pass properties.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Support &lt;b&gt;for Dynamic Properties&lt;/b&gt; - allowing you to pass values from one action to another.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Support for &lt;b&gt;Placeholders&lt;/b&gt; (tokens) allowing runtime replacement from these sources :&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;Web|app.config files,&lt;/li&gt;
    &lt;li&gt;Environment Variables,&lt;/li&gt;
    &lt;li&gt;Registry values,&lt;/li&gt;
    &lt;li&gt;MSBuild Properties&lt;/li&gt;
    &lt;li&gt;Feature Properties.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Support for &lt;b&gt;Expressions&lt;/b&gt; when setting properties on the actions.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;- Improvements to logging using .Net tracing statements - easily viewable in DebugViewer&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 36pt"&gt; &lt;/div&gt;
&lt;div&gt;As always we love to hear your feedback, so drop us an email to &lt;a href="mailto:support@collaboris.co.uk"&gt;support@collaboris.co.uk&lt;/a&gt; or leave a comment on our Wiki or on Codeplex.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Happy automating!&lt;/div&gt;
&lt;div&gt;The SAF Team&lt;/div&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/137860.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/137860.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/137860.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/137860.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Roadmap for SAF 1.4</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/30/roadmap-for-saf-1.4.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/30/roadmap-for-saf-1.4.aspx</id>
        <published>2009-07-30T06:47:4001:00:00</published>
        <updated>2009-07-30T06:48:43Z</updated>
        <content type="html">&lt;p&gt;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 :&lt;/p&gt;  &lt;h4&gt;DSL with Diagram capabilities inside Visual Studio 20008.&lt;/h4&gt;  &lt;p&gt;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 : &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You don’t need to know the Schema for a SAF Macro (which happens to be a Spring IOC Container)&lt;/li&gt;    &lt;li&gt;It’s much easier to see what a Macro will do. (a “picture paints a thousand words (or Xml Elements in our case) &lt;/li&gt;    &lt;li&gt;It’s nice to demo – much nicer than showing you how to create a Macro in Xml anyway.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Usage will be very simple and will happen like this : &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Load a new VS2008 Project –(more than likely a WSP Builder project).&lt;/li&gt;    &lt;li&gt;From the menu, choose “Add new SAF Macro”&lt;/li&gt;    &lt;li&gt;…Designer loads…&lt;/li&gt;    &lt;li&gt;Select one or more actions and drag onto the design surface&lt;/li&gt;    &lt;li&gt;Configure the parameters for each of the Actions &lt;/li&gt;    &lt;li&gt;Connect the  actions to set up a processing order.&lt;/li&gt;    &lt;li&gt;Save and deploy.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Underneath, the SAF Diagram will be converted to a Macro Xml message, which can then be chucked into SAF for processing.&lt;/p&gt;  &lt;h4&gt;MSBuild Adapter&lt;/h4&gt;  &lt;p&gt;The Adapter has been knocking around in our codebase for a few releases now, but, hasn’t really been road tested in a working scenario yet. Luckily, I have a wonderful opportunity to do this on a large SharePoint Project I am working with. The main idea is to integrate SAF into MSBuild (and hence, Visual Studio too). If you team this up with the DSL above (and WSP Builder), then the possibilities for tight integration are awesome.&lt;/p&gt;  &lt;h4&gt;Unit / Integration (“Uni-gration”) Testing for all Actions&lt;/h4&gt;  &lt;p&gt;We already have excellent test coverage for the SAF Engine and its Adapters. The last tests we need to author are for about 5 (or so) Actions. All of the existing Action tests have been done as SharePoint “integration” tests, which means that we start with a virgin WSS / MOSS site on the same machine as VS and then run Action for real in SharePoint. We tried various mocking approaches, but, in our experience SharePoint has so many quirks that “Uni-gration” is the only way to gain real confidence that it will work! &lt;/p&gt;  &lt;h4&gt;Documentation and Screencasts&lt;/h4&gt;  &lt;p&gt;Yeah I know – we have sucked on this so far! There are only so many hours (blah, blah), but, I do understand that the easiest way to gain mass adoption is to document and demo. All I can say is – it’s coming!!! I need to get used to Camtasia first though!&lt;/p&gt;  &lt;h4&gt;Useful Links :&lt;/h4&gt;  &lt;p&gt;SAF on Codeplex : &lt;a href="http://saf.codeplex.com"&gt;http://saf.codeplex.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SAF related Blogs : &lt;a title="http://www.collaboris.co.uk/blogs.aspx?CntCatID=dc5a1df9-790f-43ee-b3e8-c0124927b7af" href="http://www.collaboris.co.uk/blogs.aspx?CntCatID=dc5a1df9-790f-43ee-b3e8-c0124927b7af"&gt;http://www.collaboris.co.uk/blogs.aspx?CntCatID=dc5a1df9-790f-43ee-b3e8-c0124927b7af&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;My Twitter : MarkQJones&lt;/p&gt;  &lt;p&gt;Join the SharePoint 2007 – 2010 Linked in group (nearly 5000 members) : &lt;a title="http://www.linkedin.com/groupRegistration?gid=43166" href="http://www.linkedin.com/groupRegistration?gid=43166"&gt;http://www.linkedin.com/groupRegistration?gid=43166&lt;/a&gt;&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133800.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133800.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133800.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133800.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Upgrading SharePoint Site Content Types</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/28/upgrading-sharepoint-site-content-types.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/28/upgrading-sharepoint-site-content-types.aspx</id>
        <published>2009-07-28T07:37:1201:00:00</published>
        <updated>2010-02-22T17:38:31Z</updated>
        <content type="html">&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h4&gt;Test Cases – Removing Content Types&lt;/h4&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we remove a content type by deactivating the Feature that deployed it? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;2.       Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Content type will be removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;2.       Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can a Content Type can be removed that’s in use by a List? Yes (and No)&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;3.       Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Content Type is removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       List Content Type is still associated with the list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;4.       The Lists Content Type “Parent” is now amended to be the “Grand Father” Content Type (e.g. the List Content Type gets granddad as its new dad!)&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can an “orphaned” List Content Type be re-parented by reactivating the feature containing the CAML for the real dad? Yes it can. &lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       Deactivate the Feature  (list CType gets grandad as the new parent)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;4.       Reactivate Feature  (list CType gets it the real dad back)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Content Type is re-installed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Features is Activated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       List Content Type is associated with the list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;4.       List Content Types “Parent” is the Content Type (not the GrandFather).&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;strong&gt;Can we remove a Content Type that’s been customised in the GUI by deactivating a Feature ? No&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       Change the “name” of the Content Type  using the GUI&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;4.       Deactivate the Feature &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Content Type is &lt;strong&gt;not &lt;/strong&gt;removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       List Content Type is still associated with the list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;4.       List Content Types parent is still the real parent&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;What if we customise a Content Type and then deactivate its Feature? Can we remove the Content Type via the GUI? No, as it's in referenced in a List.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       Change the “name” of the Content Type  in the GUI&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;4.       Deactivate the Feature &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;5.       Attempt to Delete the Content Type via the GUI&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       List Content Type is still associated with the list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       List Content Types parent is still the real parent&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;4.       Exception thrown on Delete :  “The content type "TestCType123" is part of an application feature”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;5.       Content Type is NOT removed&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Ok, so we have customised the content type in the GUI, deactivated and reactivated the feature and it still won’t go? Remove all References then it will go!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;2.       Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;3.       Change the “name” of the Content Type  in the GUI&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;4.       Delete the Reference From the List&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;5.       Deactivate and Uninstall the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;Outcome:&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;1.       Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;2.       Content Type is removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt; &lt;/p&gt;
&lt;h4 style="margin: 10pt 0cm 0pt"&gt;Test Cases – Updating Content Types&lt;/h4&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;A series of tests were conducted to see if updating the underlying CAML (in the 12 Hive) causes changes to the (already) installed content type...&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;What can we change by simply editing the CAML XML (within the 12 Hive)? A Lot more than you would expect! &lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Amend the “&lt;strong&gt;Group&lt;/strong&gt;”, “&lt;strong&gt;Description&lt;/strong&gt;”, “&lt;strong&gt;Sealed&lt;/strong&gt;”, “&lt;strong&gt;ReadOnly&lt;/strong&gt;”, “&lt;strong&gt;Name&lt;/strong&gt;” in the CAML (residing in the 12 Hive)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle App Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Type reflects all the changes appropriately&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Is there anything we cannot change in the CAML XML (within the 12 Hive)? Yes, as you would expect its "ID"&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change  the “&lt;strong&gt;ID&lt;/strong&gt;” to something Unique&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle App Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Type is no longer available.&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;(Note changing this back to its original ID restores all functionality)&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;If we corrupt the content type as above (by changing the ID), then what happens if we have list content type depending upon it? The List Content Type gets grandad as his new dad.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Reference it in a list&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change  the “ID” to something Unique&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle App Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Type is no longer available&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The List Content Type is still installed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The List Content Type gets parented to the grand parent&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;(Note changing this back to its original ID restores all functionality)&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;If we customise the content type (in the GUI) then what happens if we change the underlying CAML? Nothing at all, which will be a pain for most people!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Amend the “Group” in the GUI to “GUI Group”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change  the “Group” in the CAML to “CAML Group”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle App Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Type is installed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Types Group reads “GUI Group”&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;If we customise the content type (in the GUI) then what happens if we change the underlying CAML and the FORCE Activate the Feature? Nothing at all!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Content Type  (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Amend the “Group” in the GUI to “GUI Group”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change  the “Group” in the CAML to “CAML Group”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Use “%STSADM% -o activatefeature” (using FORCE)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;5.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle App Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Type is installed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Content Types Group reads “GUI Group”&lt;/p&gt;
&lt;h3 style="margin: 10pt 0cm 0pt"&gt;Summary&lt;/h3&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;Here's a summary of my findings:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;
    &lt;p style="margin: 10pt 0cm 0pt"&gt;If a Content Type is &lt;strong&gt;not &lt;/strong&gt;referenced then it can easily be removed by deactivating the Feature that deployed it.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p style="margin: 10pt 0cm 0pt"&gt;If a Content Type is referenced by a child List Content Type, then you can still remove the Content Type but this will &lt;strong&gt;not &lt;/strong&gt;delete the List Content Type. In this scenario, you effectively change the parent of the List Content Type to the Parent of the Content Type you just deleted.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p style="margin: 10pt 0cm 0pt"&gt;If a Content Type is updated by the GUI, or Object Model then the CAML (defining the content type) will be moved into the Database and the relationship with the CAML on the File System is over (with regards to updates). (I am going to do some research into how you can reverse this situation).&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p style="margin: 10pt 0cm 0pt"&gt;If you do want to perform updates to Content Types and you can prevent customisations, then CAML and Upgrade Solutions is a pretty nice way to keep your schema changes owned by your development team.&lt;/p&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;So, having found all that, if you are running a SharePoint application that requires multiple updates (via Features and WSP's), it is recommended that you &lt;strong&gt;don't &lt;/strong&gt;update the Content Type in anyway via the GUI. To prevent GUI updates then perhaps you could make the Content Type read-only and hidden!&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;As you can understand, this situation isn't ideal as once you have gone live and updated a content type you are on your own (if you customise via the GUI). Hence, Hugo has been working on an Action to add to SAF (to be released next week), that will allow you to create a Content Type, update it and also push the changes to any children. This will act as a direct replacement for the standard CAML we all currently use. This does mean that from birth your Content Type will always be in the database, but maintainable by XML that lives inside your feature. As soon as they are ready, I will update this post with links to the documentation.&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Note&lt;/strong&gt;. To find out where a Content Type is referenced, we have written an Action in the SharePoint Action Framework (SAF) to do this. The Action is called : "&lt;a href="http://www.collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.SynchroniseContentTypes.html"&gt;SynchroniseContentTypes&lt;/a&gt;". This action was designed push down Content Type changes to child Content Types, but, it can also run in Report only mode. When run in this mode it wont do any updating, but will give you an XML report showing the differences.&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;To solve these problems (and to give you the best of both worlds), why not try the "Ensure Content Type" Action in SAF. This action takes the same CAML (as you would use in a feature), but SAF processes it, instead of the standard Feature provisioning in SharePoint.&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Try it out here&lt;/strong&gt; : &lt;a href="http://www.collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.EnsureContentType.html"&gt;&lt;strong&gt;http://www.collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.ContentType.EnsureContentType.html&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;To download SAF - please read here : &lt;/strong&gt;&lt;a href="http://saf.codeplex.com/"&gt;&lt;strong&gt;&lt;font color="#376946"&gt;http://saf.codeplex.com/&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;To see a list of all Actions in SAF, go here : &lt;a href="http://www.collaboris.co.uk/saf/doc/"&gt;http://www.collaboris.co.uk/saf/doc/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133755.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133755.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133755.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133755.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Upgrading SharePoint Site Columns (Fields)</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/28/upgrading-sharepoint-site-columns-fields.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/28/upgrading-sharepoint-site-columns-fields.aspx</id>
        <published>2009-07-28T07:35:3201:00:00</published>
        <updated>2010-02-22T17:37:34Z</updated>
        <content type="html">&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;In a previous post, I explained my findings with "&lt;a title="Upgrading Content Types" href="http://www.collaboris.co.uk/blogs/mark/09-05-16/Upgrading_Content_Types.aspx"&gt;Upgrading Content Types&lt;/a&gt;", 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.&lt;/p&gt;
&lt;h4 style="margin: 10pt 0cm 0pt"&gt;Test Cases – Removing a Site Column&lt;/h4&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we remove a site column by deactivating the Feature that deployed it? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column will be removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we remove a site column (thats referenced by a List Column) by deactivating the Feature that deployed it? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Add the Site Column to a List (as a List Column)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column will be removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;List Column still exists&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt; &lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we remove a site column (that has been customised) by deactivating the Feature that deployed it? No&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the “&lt;strong&gt;Column Name&lt;/strong&gt;” via the GUI&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column will &lt;strong&gt;not &lt;/strong&gt;be removed&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Feature is deactivated&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;(Note. Although Deactivating via a Feature doesn’t remove the site column, it can still be deleted via the GUI).&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we re-parent a Site Column that’s been deleted? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Add the Site Column to a List (as a List Column)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deactivate the Feature&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;5.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Activate the Feature (put the site column back)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;6.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the “Column Name” (via the GUI)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;7.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Select “Update all list columns based on this site column”&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;8.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Click Ok&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;List Column is updated with the new name (hence re-parenting a Site Column that’s previously gone AWOL actually works).&lt;/p&gt;
&lt;h4 style="margin: 10pt 0cm 0pt"&gt;Test Cases – Updating Site Columns&lt;/h4&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we update a site column by editing the CAML XML (within the 12 Hive)? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the “&lt;strong&gt;Column Name&lt;/strong&gt;”, “&lt;strong&gt;Group&lt;/strong&gt;” in the CAML&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column is amended as expected&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we update a site column by editing the CAML XML, when it has child List Columns? Yes, but changes are NOT pushed down to children.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the “Column Name”, “Group”,  in the CAML&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column is amended as expected&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;List Column (Child) doesn’t change&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we change a columns type from Text to Choice (when it’s not in use)? Yes&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a “&lt;strong&gt;Text&lt;/strong&gt;” Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the Type, from “&lt;strong&gt;Text&lt;/strong&gt;” to “&lt;strong&gt;Choice&lt;/strong&gt;”  in the CAML (add some sample the Choices into the CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Site Column changes type to "&lt;strong&gt;Choice&lt;/strong&gt;"&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;Can we change a columns type from “Text” to “Choice”, when it’s in use? Yes, although this worries me!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Test Steps: &lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Deploy a “Text” Site Column (via Feature and CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Add the Site Column to a List (as a List Column)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;3.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Add some test data into the column (from the list)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;4.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Change the Type, from “Text” to “Choice”  in the CAML (add some sample the Choices into the CAML)&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;5.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;Recycle Application Pools&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;6.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;From the GUI “Push” the changes to the list column&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;u&gt;Outcome:&lt;/u&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt 36pt"&gt;&lt;font size="+0"&gt;1.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The Site Column changes type to Choice&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt 36pt"&gt;&lt;font size="+0"&gt;2.&lt;font face="'times new roman'" style="line-height: normal; font-variant: normal; font-style: normal; font-size: 7pt; font-weight: normal"&gt;       &lt;/font&gt;&lt;/font&gt;The List Column changes to Choice, although the edit form hides it, but no data is lost!&lt;/p&gt;
&lt;h4 style="margin: 10pt 0cm 0pt"&gt;Summary&lt;/h4&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;When changing the type of a column always recycle application pools immediately after. If the CAML for the Site Column is updated, then this &lt;strong&gt;will not &lt;/strong&gt;cascade the changes to any child List Columns. This must be done via the GUI (using “Update all list columns based on this site column?”).&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;I suspect, though haven't had time to prove it that SharePoint will always allow the type of the column to change. If this change is then propagated to Lists that use it then this “may” result in loss of data, or some weird casting error. E.g. Text &amp;gt; Number.&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;Once again, this has short comings as once the Site Column is customised, it can no longer be changed by updating the CAML on the file system. (This is because its definition will reside in the database).&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;To solve these problems (and to give you the best of both worlds), why not try the "Ensure Site Column" Action in SAF. This action takes the same CAML (as you would use in a feature), but SAF processes it, instead of the standard Feature provisioning in SharePoint.&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;strong&gt;Try it out here&lt;/strong&gt; : &lt;a href="http://www.collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.EnsureSiteColumn.html"&gt;http://www.collaboris.co.uk/saf/doc/Collaboris.Saf.Actions.Wss.Column.EnsureSiteColumn.html&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt"&gt;&lt;strong&gt;To download SAF - please read here : &lt;/strong&gt;&lt;a href="http://saf.codeplex.com/"&gt;&lt;strong&gt;&lt;font color="#376946"&gt;http://saf.codeplex.com/&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 10pt 0cm 0pt"&gt;&lt;strong&gt;To see a list of all Actions in SAF, go here : &lt;a href="http://www.collaboris.co.uk/saf/doc/"&gt;http://www.collaboris.co.uk/saf/doc/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133754.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133754.aspx</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133754.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133754.aspx</trackback:ping>
    </entry>
    <entry>
        <title>How to Install SAF</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/28/how-to-install-saf.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/28/how-to-install-saf.aspx</id>
        <published>2009-07-28T07:34:1901:00:00</published>
        <updated>2009-07-28T07:34:19Z</updated>
        <content type="html">&lt;p&gt;A couple of you emailed and asked how to install SAF, so here's some instructions. &lt;/p&gt;
&lt;h4&gt;Installing...&lt;/h4&gt;
&lt;p&gt;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 :&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Logon to a SharePoint Server in your Farm as a Farm Administrator. &lt;/li&gt;
    &lt;li&gt;Download "&lt;a href="http://www.collaboris.co.uk/Libraries/Documents/Install_bat.sflb.ashx"&gt;Install.bat&lt;/a&gt;" to that server in your SharePoint Farm (right click "Save Target as...") &lt;/li&gt;
    &lt;li&gt;Remove the '.txt' extension. &lt;/li&gt;
    &lt;li&gt;Download the latest version of SAF from "&lt;a href="http://saf.codeplex.com/"&gt;http://saf.codeplex.com/&lt;/a&gt;". &lt;/li&gt;
    &lt;li&gt;Extract "SAF.wsp" to the same folder as the batchfile in step 2. &lt;/li&gt;
    &lt;li&gt;Ensure the path in STSAdm in "install.bat" is correct. &lt;/li&gt;
    &lt;li&gt;Run "install.bat" &lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Upgrading...&lt;/h4&gt;
&lt;p&gt;If you already have a version of SAF on your Farm and want to upgrade to a newer version, please complete the steps below :&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Logon to a SharePoint Server in your Farm as a Farm Administrator. &lt;/li&gt;
    &lt;li&gt;Download "&lt;a href="http://www.collaboris.co.uk/Libraries/Documents/Upgrade_bat.sflb.ashx"&gt;Upgrade.bat&lt;/a&gt;" to that server in your SharePoint Farm (right click "Save Target as..."). &lt;/li&gt;
    &lt;li&gt;Remove the '.txt' extension. &lt;/li&gt;
    &lt;li&gt;Download the latest version of SAF from "&lt;a href="http://saf.codeplex.com/"&gt;http://saf.codeplex.com/&lt;/a&gt;". &lt;/li&gt;
    &lt;li&gt;Extract "SAF.wsp" to the same folder as the batchf ile in step 2. &lt;/li&gt;
    &lt;li&gt;Ensure the path in STSAdm in "install.bat" is correct. &lt;/li&gt;
    &lt;li&gt;Run "upgrade.bat" &lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133753.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133753.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133753.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133753.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Early morning news!</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/28/early-morning-news.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/28/early-morning-news.aspx</id>
        <published>2009-07-28T06:25:5101:00:00</published>
        <updated>2009-07-28T06:25:51Z</updated>
        <content type="html">&lt;p&gt;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. &lt;/p&gt;  &lt;p&gt;Here’s the Feature list :  &lt;/p&gt;  &lt;h4&gt;New Actions&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;STSAdm Action&lt;/strong&gt;. This allows us to call STSAdm commands and pass arguments from a SAF Macro. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Powershell Action&lt;/strong&gt;. Allows us to to call Powershell “Function” and pass arguments from a SAF Macro. &lt;/p&gt;  &lt;h4&gt;Adapters&lt;/h4&gt;  &lt;p&gt;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 :&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;STSAdm Adapter&lt;/strong&gt;. Allows you to run SAF from an STSAdm extension.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Feature Adapter&lt;/strong&gt;. 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 &lt;a href="http://saf.codeplex.com/Wiki/View.aspx?title=Quick Start example" shape="rect" target="_blank"&gt;Quick Start&lt;/a&gt; for more info.&lt;/p&gt;  &lt;p&gt;In the next release here’s what’s coming :&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MSBuild Adapter&lt;/strong&gt;. 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 automation in too.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WCF Adapter&lt;/strong&gt;. This could be one of the most powerful adapters out there. It’s effectively going to allow you to run SAF remotely. eg. if you are working locally on a SharePoint DEV farm and want to push some SharePoint changes to a different farm then (say QA), then this will let you do that. If you mix this concept with the use of Gary LaPoint’s awesome STSAdm extensions, then wow – we have just given you a way to run tons of STSAdm commands (or Powershell scripts) remotely!&lt;/p&gt;  &lt;h4&gt;Visual Studio DSL&lt;/h4&gt;  &lt;p&gt;Not sure this will make the next release, but, we are intending to write a GUI in Visual Studio that will allow you to create a Macro using Graphical canvas to do so. &lt;/p&gt;  &lt;h4&gt;Changes to the SAF Context  &lt;/h4&gt;  &lt;p&gt;If you don’t know – the SAF Context is pretty much a Prop Bag that gets passed between one Action to the next. We have made some changes to make this Serializable. There are good reasons for this which I will cover in a later post.&lt;/p&gt;  &lt;h4&gt;When’s the next release?&lt;/h4&gt;  &lt;p&gt;Hugo has booked a few weeks into the diary to work on SAF (and Macro Centre using SL3), so we should see a release late next week once he’s finished it. (But we are close!)&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133751.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133751.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133751.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133751.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Run STSADM commands from SAF</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/SAF/archive/2009/07/28/run-stsadm-commands-from-saf.aspx" />
        <id>http://geekswithblogs.net/SAF/archive/2009/07/28/run-stsadm-commands-from-saf.aspx</id>
        <published>2009-07-28T06:25:2201:00:00</published>
        <updated>2009-07-28T06:25:22Z</updated>
        <content type="html">&lt;p&gt;I am pleased to announce that it’s now possible (with release &lt;strong&gt;1.2.3463.00&lt;/strong&gt;) , 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 &lt;a title="http://stsadm.blogspot.com/2009/02/downloads.html" href="http://stsadm.blogspot.com/2009/02/downloads.html" shape="rect" target="_blank"&gt;STSADM Blog&lt;/a&gt;), you are looking at over 250 useful SharePoint Actions. &lt;/p&gt;  &lt;p&gt;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).&lt;/p&gt;  &lt;h4&gt;An example : &lt;/h4&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 645px; padding-right: 5px; height: 185px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;xml version="1.0" encoding="utf-8" &lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;objects&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://www.springframework.net"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #008000"&gt;&amp;lt;!-- Defines the main macro to process --&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"MacroToProcess"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Macro"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;constructor&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;arg&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"id"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"{8BB25F02-5E41-4e86-BCA2-E253747354A3}"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;constructor&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;arg&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"actions"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;list&lt;/span&gt; &lt;span style="color: #ff0000"&gt;element&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"IAction"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #008000"&gt;&amp;lt;!-- Runs the STSAdm Command--&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"RunStsAdminCommands"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Action.StsAdmin"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"EntityList"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"StsAdminCommandList"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"StopOnDoException"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"false"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;list&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;constructor&lt;/span&gt;-arg&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #008000"&gt;&amp;lt;!-- Holds a list of individual list Items to export --&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"StsAdminCommandList"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Entities"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;constructor&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;arg&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;list&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #008000"&gt;&amp;lt;!-- Delete the Group using STSADM --&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Entity.StsAdminCommand"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Operation"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"deletegroup"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Arguments"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;dictionary&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"string"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"string"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"url"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"${CurrentWeb.Url}"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"name"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"SAF Demo Group"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;dictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #008000"&gt;&amp;lt;!-- Create the Group using STSADM --&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Entity.StsAdminCommand"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Operation"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"creategroup"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Arguments"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;dictionary&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"string"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;-&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"string"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"url"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"${CurrentWeb.Url}"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"name"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"SAF Demo Group"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"description"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"This is a group create by SAF"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ownerlogin"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"${CurrentUser}"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entry&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"type"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"owner"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;dictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;property&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;list&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;constructor&lt;/span&gt;-arg&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;objects&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt; &lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'courier new',courier,monospace; font-size: 11px"&gt;&lt;/pre&gt; &lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;The StsAdmin Action&lt;/h4&gt;

&lt;p&gt;As can be seen from the example above, it’s pretty straight forward to use the StsAdmin command. You use the Action by adding this line :&lt;/p&gt;

&lt;p&gt;&lt;span style="font-family: courier new; font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;object &lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;RunStsAdminCommands&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;Action.StsAdmin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; 
      &lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;EntityList&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;StsAdminCommandList&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt; 
      &lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;StopOnDoException&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt; 
      &lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-family: courier new; color: #0000ff; font-size: 16px"&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;h4&gt;The StsAdminCommand Entity&lt;/h4&gt;

&lt;p&gt;As with every Action, all of the parameter information is passed into the Action via a simple Entity. The Entity in this case is called “Entity.StsAdminCommand”. This entity has 2 properties that need to be passed, the &lt;strong&gt;Operation&lt;/strong&gt; and the &lt;strong&gt;Arguments. &lt;/strong&gt;Please Note! It’s possible to supply as many entities as you like. These will all get executed as separate STSAdm commands.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;object &lt;/span&gt;&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;Entity.StsAdminCommand&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;Operation&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;deletegroup&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;Arguments&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;dictionary &lt;/span&gt;&lt;span style="color: #ff0000"&gt;key-type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;value-type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;       &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;entry &lt;/span&gt;&lt;span style="color: #ff0000"&gt;key&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;url&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;${CurrentWeb.Url}&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;       &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;entry &lt;/span&gt;&lt;span style="color: #ff0000"&gt;key&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;name&lt;/span&gt;" &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&lt;/span&gt;"&lt;span style="color: #0000ff"&gt;SAF Demo Group&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;     &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;dictionary&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;   &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;property&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="font-size: 16px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color: #0000ff; font-size: 16px"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" shape="rect"&gt;&lt;/a&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;By supplying the Action (with its entity) this is equivalent to writing : &lt;/p&gt;

&lt;p&gt;&lt;span style="font-family: courier"&gt;STSADM -o deletegroup -url &lt;/span&gt;&lt;a href="http://localhost" shape="rect"&gt;&lt;span style="font-family: courier"&gt;http://localhost&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: courier"&gt; -name -“SAF Demo Group". &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Note! The “&lt;strong&gt;${CurrentWeb.Url}&lt;/strong&gt;” line, shown in the example, is called a &lt;strong&gt;Placeholder &lt;/strong&gt;and will substitute the value with real “url” at runtime. &lt;/p&gt;

&lt;p&gt;That’s pretty much it. You can now call any STSAdm command available by supplying a correct “Operation” and dictionary matching the parameters that the command takes. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download SAF from &lt;/strong&gt;&lt;a href="http://SAF.Codeplex.com" shape="rect"&gt;&lt;strong&gt;http://SAF.Codeplex.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://geekswithblogs.net/SAF/aggbug/133750.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/SAF/comments/133750.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/SAF/comments/commentRss/133750.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/SAF/services/trackbacks/133750.aspx</trackback:ping>
    </entry>
</feed>
