﻿<?xml version="1.0" encoding="UTF-8"?>
<!--RSS generated by Microsoft SharePoint Foundation RSS Generator on 5/22/2013 8:54:11 PM -->
<?xml-stylesheet type="text/xsl" href="/blogs/sharepoint/_layouts/RssXslt.aspx?List=66d1527a-5d29-4d15-a74c-04134d22d911" version="1.0"?>
<rss version="2.0">
  <channel>
    <title>NMR SharePoint Team Blog: Posts</title>
    <link>http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/AllPosts.aspx</link>
    <description>RSS feed for the Posts list.</description>
    <lastBuildDate>Thu, 23 May 2013 00:54:11 GMT</lastBuildDate>
    <generator>Microsoft SharePoint Foundation RSS Generator</generator>
    <ttl>60</ttl>
    <language>en-US</language>
    <image>
      <title>NMR SharePoint Team Blog: Posts</title>
      <url>http://www.nmrconsulting.com/blogs/sharepoint/_layouts/images/siteIcon.png</url>
      <link>http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/AllPosts.aspx</link>
    </image>
    <item>
      <title>SharePoint Developer Orientation - Part 5: Professional Development with Visual Studio</title>
      <link>http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/ViewPost.aspx?ID=10</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCBF3C480281D4B689D03FA51C7042099"><p class="ms-rteElement-P ms-rteThemeForeColor-2-4"><em>Get ready for Visual Studio development by setting up a Sharepoint development environment and getting accustomed to Visual Studio's Sharepoint Tools.</em></p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Getting started with Visual Studio</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">This article is going to be somewhat of a diversion from the style of my previous posts.  It is going to feel more basic, elementary, and possibly boring at times for some of you (sorry!).  We need to set up a development environment and learn about Visual Studio's SharePoint Tools, so please bear with me.  I think these are important topics to cover in an &quot;orientation&quot; series, even though this information is available scattered about the internet.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">The goal for this article is for readers to have a good feel for the environment they will be working in.  I will cover setting up a development environment, working with SharePoint projects in Visual Studio, organizing and deploying your project with features and packages, and finally, I will wrap up with a little professional software engineering advice.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Setting up your development environment</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">So far in this blog series, we have only needed access to a SharePoint site, and a computer with SharePoint Designer and a web browser.  With only those tools, power users can build rich applications.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">For full-featured, professional SharePoint applications, however, we need Visual Studio.  This requires SharePoint to be installed on the development machine.  To set this up, please reference <a href="http://bit.ly/vCTlaW">Technet</a> and <a href="http://bit.ly/vf6kCa">the community</a> for instructions.  In short, you will want: </p>
<ul class="ms-rteThemeForeColor-2-4"><li>A virtualization environment (Hyper-V, VMWare, etc.), although you could install on a physical Win7 64-bit machine</li>
<li>At least 8GB RAM (with at least 4GB allocated to the guest virtual machine)</li>
<li>Ideally, one or more SSDs or fast 7200+ rpm HDDs (host OS on one, VMs on another)</li>
<li>For best results, install 64-bit server software, and 32-bit client software (Office, browsers, etc.).</li>
<li>Install pre-requisites (SQL 2008 R2 Express+, PowerShell, IIS, etc.)</li>
<li>Install SharePoint 2010, Designer, and VS2010.</li>
<li>Install <a href="http://bit.ly/sw8PLk">Visual Studio 2010 SharePoint Power Tools</a></li>
<li>Install <a href="http://bit.ly/rT5FTu">CKS – Development Tools Edition (Server or Foundation)</a></li></ul>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Take a little time to research your options and plan your development environment.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Sandboxed Solutions</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">In Visual Studio, most SharePoint project types are the same.  They are <em>Empty SharePoint Projects</em> with one or more <em>SharePoint Project Items</em> (SPIs) added by default.  You will almost always use the Empty SharePoint Project type and add any necessary SPIs yourself.  When you create a project, you will be prompted to enter a local SharePoint site to use for debugging, and choose between a sandboxed solution and a farm solution.</p>
<div style="text-align:center"><img alt="SBorFarm.png" src="/blogs/sharepoint/Lists/Photos/SBorFarm.png" style="margin:15px" /></div>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Many SharePoint experts will tell you to always select sandboxed and change it to farm later, if necessary.  I agree with this advice, but I think there are a couple of things we need to fully understand.  What are sandboxed solutions and why bother with them? They are SharePoint solutions (WSP files) that are installed into a site collection’s Solutions gallery.  Anatomically, there is no difference between a sandboxed WSP file and a farm WSP file.  If your solution meets certain restrictions, then it is eligible to be installed into a site collection's Solutions gallery.  The real value is that they are installable by a site collection administrator (a.k.a. “USER”) rather than a farm administrator (a.k.a. “IT”).  That is why they are sometimes referred to as &quot;user solutions&quot; and are run by the &quot;user code service.&quot;</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">When you attempt to activate your solution from the Solutions gallery, it will be validated against <em>sandboxed restrictions</em>.  Sandboxed solutions only have access to limited subset of the Microsoft.SharePoint namespace, are limited to the Site Collection scope, run under the current user’s security context at all times, and cannot touch the file system.  Furthermore, they run in their own process and app domain with strict CAS policies (the sandbox), and SharePoint reserves the right to shut them down if they exceed configured thresholds (CPU utilization, etc.).  Farm Administrators can add more restrictions via <a href="http://bit.ly/ts3tyo"><font color="#0072bc">custom solution validators</font></a>, increase or decrease a solution's thresholds, or turn off Sandboxed solutions altogether.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">See Technet’s <a href="http://bit.ly/t8OFwL">Sandboxed Solutions Overview</a> and MSDN’s <a href="http://bit.ly/ryLR52">Restrictions on Sandboxed Solutions</a> article for more information.  As usual, there is guidance <a href="http://bit.ly/w23tkO">from the community</a> as well.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">A couple more quick notes about Sandboxed solutions...  First, you can use the Packaging Explorer (View &gt; Other Windows &gt; Packaging Explorer) to validate your package and find out if you are still within the constraints of a Sandboxed Solution:</p>
<div style="text-align:center"><img alt="PackagingExplorer.png" src="/blogs/sharepoint/Lists/Photos/PackagingExplorer.png" style="margin:15px" /></div>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Finally, you can change the Sandboxed/Farm status in the project’s properties window:</p>
<div style="text-align:center"><img alt="SPProjectSandboxedProperty.png" src="/blogs/sharepoint/Lists/Photos/SPProjectSandboxedProperty.png" style="margin:15px" /></div>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>SharePoint Project Items (SPIs)</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">To add functionality to your project, you will add SharePoint Project Items (Right-click your project &gt; Add &gt; New Item...).</p>
<div style="text-align:center"><img alt="SPIs.png" src="/blogs/sharepoint/Lists/Photos/SPIs.png" style="margin:15px" /></div>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">SPIs behave like folders that contain files that are <em>functionally </em>related.  This does not represent how the files are deployed to SharePoint.  The SPI abstracts deployment details to make your life easier. Some files may end up on the file system, in the content database, or not deployed at all.  Every SPI has an Elements.xml element manifest file, and a hidden SharePointProjectItem.spdata file that helps Visual Studio keep track of the SPI's files, compiled code (SafeControl entries), and how to package it all for deployment.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Let's look at a few examples:</p>
<div style="text-align:center"><img alt="WebPartSPI.png" src="/blogs/sharepoint/Lists/Photos/SpiExamples.png" style="margin:5px" /></div>
<ul class="ms-rteThemeForeColor-2-4"><li>The <strong><em>Empty Element</em></strong> SPI is the basis of all the others and literally contains an empty Elements manifest.</li>
<li>The <strong><em>Module</em></strong> SPI simply places files into the SharePoint content database (in document libraries or galleries) or the file system.  It adds a &lt;Module...&gt; xml element to the Elements.xml manifest with one or more &lt;File...&gt; elements that define where to place each file.</li>
<li>The <strong><em>Web Part</em></strong> SPI is essentially a pre-configured Module SPI that places the .webpart definition into the site collection's Web Part Gallery.  In addition, it has the .cs code file for the WebPart class that is compiled.  This file is not deployed (in the properties window you will see a Deployment Type of &quot;NoDeployment&quot;), but its namespace is tracked in a SafeControl entry so that when the solution is deployed, the code is allowed to run in the SharePoint environment.  You can see this in the SharePointProjectItem.spdata file.</li>
<li>The <strong><em>Visual Web Part</em></strong> SPI goes even further by defining a user control (the .ascx is placed on the SharePoint file system in the control templates folder via a module).  The user control is loaded programmatically within the WebPart class (VisualWebPart1.cs file).  This allows you to visually design your web part as you would a regular ASP.NET user control.</li></ul>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">There are many other SPIs, but there is not always a pre-defined SPI for everything you might need to build.  For example, there is no Custom Action SPI out of the box.  You have to add an Empty Element SPI and add the necessary XML by hand.  (The CKS:DEV VS Extension adds a Custom Action SPI, by the way, among others.)</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Features</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Features are the logical units of functionality that users can turn on and off for a particular <em>deployment scope</em> (site collection, site, farm, or web application).  Going to Site Settings or Central Administration, a user can see the list of features they can activate or deactivate:</p>
<div style="text-align:center"><img alt="SiteSettingsFeatures.png" src="/blogs/sharepoint/Lists/Photos/SiteSettingsFeatures.png" style="margin:5px" /></div>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Visual Studio adds Features to your project for you as SPIs are added.  Generally, you will have one feature for each deployment scope you need to use, but you can have as many as you want.  Not all SPIs can be deployed to all scopes, though.  Web parts, for example, must be deployed at the Site Collection level (because that is where the Web Parts gallery is).  You will get an error during packaging if any SPIs are in the wrong features, although the feature designer does a lot to help prevent that.  It is helpful to name your features with their scopes (e.g. “Web Feature”) in Solution Explorer, but definitely provide user-friendly titles and descriptions in the feature definition itself.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4"><em>Feature Receivers</em> (right-click the feature &gt; Add Event Receiver) allow you to run code upon FeatureActivated (post-event), FeatureDeactivating (pre-event), FeatureInstalled (post-event), FeatureUninstalling (pre-event), and FeatureUpgrading (pre-event).  This enables some interesting scenarios.  You can programmatically create lists and other items instead of doing so declaratively in SPIs.  Or get creative with an empty feature that fires off any server code you wish upon activation and/or deactivation.  Another good use of feature receivers is to clean up after yourself.  Not everything is cleaned up automatically when your feature is deactivated or uninstalled.  Any list instances, modules (files, including web parts), or documents you deployed will be left behind.  As a best practice, you should understand the disposition of all your solution’s items and plan on how you will clean up after them, if at all.  See <a href="http://bit.ly/sb54se">Stefan's blog post</a> for an example of cleaning up after yourself.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Features can have <em>activation dependencies</em> on other features.  Users will not be able to activate your feature until the other one is activated.  It is possible to automatically and silently activate a feature yours depends on, but only if it is hidden and at the same deployment scope as your feature.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Once your feature is developed and deployed, you will have a new set of challenges <em>upgrading features</em>.  When you are ready for version 2.0 of your solution, you will have to track your changes from the baseline manually, and explicitly lay out the upgrade steps from prior versions.  If you are developing a solution that needs to be maintained and upgraded over time (as opposed to installed fresh each time or one-off site-specific solutions), you have to begin version 2.0 carefully and be disciplined as you change your solution.  Always remember, if your upgrade process is getting out of hand, you can write code for the FeatureUpgrading event receiver to get over a hump.  Chris O'Brien has covered <a href="http://bit.ly/uX0vue">feature upgrading</a> in depth in his blog, so I will refer you to him for more details.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Packages and Deployment</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">A package shows which features and files will be contained in the WSP file.  It is concerned only with deployment… how to package up features, mapped files (files copied directly to the file system during deployment <a href="http://bit.ly/rSEq8Y">via a mapped folder</a> rather than provisioned in a feature via a module), and assemblies into the WSP file.  When you package your project from the Build menu, your output directory will contain a WSP file you can manually deploy.  Solutions are manually deployed using PowerShell for <a href="http://bit.ly/tO4k0v">farm solutions</a>, or the web UI for <a href="http://bit.ly/sHSHNH">sandboxed solutions</a>.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Visual Studio does support F5 deployment, which is handy for local deployments during development, but not deployments to other environments.  F5 deployment will retract your solution if already deployed, and automatically resolve conflicts.  For example, if your solution creates a list, F5 deployment will remove the list and deploy it fresh.  This is not the behavior you will get when deploying in a real-world scenario, so leave yourself time to test deployments!</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Professional Software Engineering</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">As this is an orientation series, I will only briefly mention that professional software engineering practices are possible with SharePoint.  You can set up a build server for continuous integration, write unit tests with mocking frameworks, secure and version your source code with TFS, etc.  You know how to do this, because you've done it before.  Developing for SharePoint does not excuse you of your responsibilities as a professional developer to create reliable solutions.  There may be pressure on you to cut corners when your power user counterparts are churning out solutions a dozen at a time.  You are here to play a different role and provide value in a different way.  Try not to get caught up - or let your customers or bosses get caught up - in the mistaken notion that SharePoint can solve all problems fast and cheap.  You get what you pay for.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Finally, let me point you to a great resource for developers.  The patterns and practices crew at Microsoft put out guidance for <a href="http://bit.ly/tcDs9Z">Developing Applications for SharePoint 2010</a>.  It is currently on MSDN, but was started and developed and refined into its current state on codeplex, where you can still find some <a href="http://bit.ly/sKfy6v">hands on labs</a>.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>Conclusion</span></h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">So where do we go from here?!  This almost wraps up this orientation series.  Part 6 will round it off with an example of how to build a business application.  It will showcase one approach that ties in all (ok, hopefully most) of the lessons of this series.  If there is anything you want to hear more about, please let me know in the comments below or on twitter (<a href="http://bit.ly/rBXX2t">@SharePointLou</a>) or linked in (<a href="http://linkd.in/w552pS">louestrada</a>).</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Thanks for reading,<br />Lou Estrada</p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=7&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=7&RootFolder=*">General</a>; <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=4&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=4&RootFolder=*">Development</a>; <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=6&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=6&RootFolder=*">Deployment</a></div>
<div><b>Published:</b> 11/9/2011 11:00 AM</div>
]]></description>
      <author>Lou Estrada</author>
      <category>General; Development; Deployment</category>
      <pubDate>Sun, 06 Nov 2011 19:36:24 GMT</pubDate>
      <guid isPermaLink="true">http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/ViewPost.aspx?ID=10</guid>
    </item>
    <item>
      <title>SharePoint Developer Orientation - Part 4: Advanced Customization with Designer</title>
      <link>http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/ViewPost.aspx?ID=9</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCBF3C480281D4B689D03FA51C7042099"><div class="ExternalClass3B0B81A003DA4E80827C949638387865 ms-rteThemeForeColor-2-4"><p class="ms-rteElement-P ms-rteThemeForeColor-2-4"><em>Learn how to use SharePoint Designer to declaratively develop advanced customizations.</em></p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em"><span>SharePoint Designer is your friend</span> </h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Now that you are generally familiar with <a href="http://bit.ly/qcmeNz">SharePoint from a user’s perspective</a>, it’s time for advanced customizations with SharePoint Designer.  This tool is for customizing specific SharePoint sites and adds a lot of functionality over the Web UI (workflows, form customizations, Business Connectivity Services, etc.).  It is a powerful and useful tool, even if buggy, prone to crashes, and slow.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">The goal of any SharePoint project is to leverage the use of the platform, deliver value rapidly, and enhance the user’s capabilities to serve their business needs.  Depending on the <a href="http://bit.ly/pzxfdc">type of project</a> you are working on, Designer can be your destination or your vehicle.  If this is a single-site customization project, for example, try to stop at the web UI and Designer.  If this is a professional solution with complex implementation, deployment, or maintenance requirements, you will still use Designer regularly.  Oftentimes, it is the only way to learn how something works, or at least the best way to get started.  You will then import your customizations into a Visual Studio solution to package them up, and deploy them, and likely add code (web parts, workflow activities, event receivers, etc.).</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em">Customizing list views and forms</h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">One of the most common and likely customizations you will come across is customizing list views and forms.  In the web UI, you can customize a view by showing or hiding columns, adding filters, sorting, grouping, and that sort of thing.  You cannot, however, touch how the list data are rendered.  Each field will display the same way every time depending on its type.  The headers, the hover effects, and all the elements of that list are predetermined.  SharePoint Designer gives you the tools to go deeper.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">SharePoint uses an XSLT rendering method that applies the XSL Transformations to the results of a query to render a list view or form (display, edit, or new).  The actual transformation happens early in the page lifecycle during page initialization, allowing the use of ASP.NET server control declarations in the XSL.  You will see the <span style="font-family:consolas;color:blue;font-size:10pt">&lt;</span><span style="font-family:consolas;color:#a31515;font-size:10pt">SharePoint:FormField </span><span style="font-family:consolas;font-size:10pt">... <span style="color:blue">/&gt;</span></span> control in new and edit forms, for example, that renders the complex controls for editing data depending on the field type.  Also, SharePoint provides added functionality by importing some xml namespaces for use in your XSL markup.  So, when customizing a view or form, you have the power of <a href="http://bit.ly/nrw6Yu">XSLT</a> to work with, plus the <a href="http://bit.ly/pQHrvs">SharePoint ddwrt namespace</a>, plus the use of ASP.NET and <a href="http://bit.ly/pa1bsp">SharePoint server controls</a>.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">To get started, check out <a href="http://bit.ly/pwqj6y">this great SharePoint Designer resource from Microsoft</a>.  The <a href="http://bit.ly/oZSMGa">Data Views and Forms</a> link has a wealth of information on how to use the tool to customize views and forms using Designer.  Each article has a See Also section near the top of the right margin with related articles.  Some notable examples:</p>
<ul><li><strong>Example 1:  </strong><a href="http://bit.ly/plA5P9"><strong>Create a custom list view</strong></a><br />Just to give you an idea, here is an example from a recent sample project I worked on.  Here I used HTML (added div elements and the like to the XSL), jQueryUI and CSS to translate numeric or text values into meaningful visualizations:<br /><br /><b><i>Before:</i></b><br /><img alt="Example 1, Before screenshot" src="/blogs/sharepoint/Lists/Photos/sdop4i1.png" style="margin:5px" /><br /><br /><b><i>After:</i></b><br /><img alt="Example 1, After screenshot" src="/blogs/sharepoint/Lists/Photos/sdop4i2.png" style="margin:5px" /><br /><br /></li>
<li><strong>Example 2:  </strong><a href="http://bit.ly/raBGlU"><strong>Create a custom list form</strong></a><br />Once again, example screenshots to spur the imagination.  Here I formatted the fields as Text Boxes instead of SharePoint FormField using the Design view.  I then switched to Source view and added jQueryUI sliders and synced them with the textbox.  To add more sizzle, I swapped out CSS classes for the slider depending on ranges I chose.  Green for 0 – 0.35, etc.<br /><br /><b><i>Before:</i></b><br /><img alt="Example 2, Before screenshot" src="/blogs/sharepoint/Lists/Photos/sdop4i3.png" style="margin:5px" /><br /><br /><b><i>After:</i></b><br /><img alt="Example 2, After screenshot" src="/blogs/sharepoint/Lists/Photos/sdop4i4.png" style="margin:5px" /></li></ul>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Before we move on, I have to mention <a href="http://bit.ly/rlfcAO">Marc Anderson</a>, one of the most active members of the SharePoint community serving “the middle tier”.  Call it what you will, this advanced customization, declarative programming, or middle tier development that I described above is very powerful.  Check out <a href="http://bit.ly/mT6qG6">his blog</a>, and the <a href="http://bit.ly/rsMtYO">SPServices jQuery library</a>.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em">Designer workflows</h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">You can create <a href="http://bit.ly/rgtnUN">workflows</a> to help automate business processes using the many <a href="http://bit.ly/paD9tg">OOTB workflow actions</a> and pre-canned workflows, like approval and signature collection.  Workflows open the door to processing data that you don't have in the web UI.  A workflow is just code that runs on the server with inputs, outputs, access to variables, etc. This is Workflow Foundation under the covers.  So using the existing workflow actions, you can process data in new ways.  For example, since some fields aren't accessible in a Calculated column (like ID or lookup fields), you can use a workflow as a replacement.  The workflow is scheduled to run asynchronously in a timer job after the list item is created with no guarantee of when it will run, so it may not be ideal in all situations.  Any workflow-modified fields will not be immediately available to the user and could take a few minutes to update.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">You cannot create new actions or write new workflow code in Designer, but you can augment your toolbox.  Here is a great opportunity to gradually scale up your project.  If you find you cannot accomplish something with a Designer workflow, you can find open source components (check <a href="http://www.codeplex.com/">codeplex.com</a>) and third party products (from activities to advanced workflow design software).  Failing that, as a developer, you will certainly be able to <a href="http://bit.ly/oD2I12">write your own</a> as well.  It goes against our instinct as developers, doesn’t it?  If Designer workflows are too limited, we want to pull it into Visual Studio and use the full power of Workflow Foundation.  We don't want to use some contrived designer to perform actions that would take only a line or two of crisp, clean code.  Remember... the point is to deliver low-cost, low-complexity solutions.  Purchasing a workflow action is cheaper, more reusable, and easier than custom code.  Of course, when warranted, there is nothing better than custom code, but think reusability.  Write a custom action to get over a hump before writing a completely custom Visual Studio workflow.</p>
<h3 class="ms-rteElement-H3" style="font-size:1.5em">What else?</h3>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">A few other important capabilities to be aware of are:</p>
<ul><li><div class="ms-rteElement-P ms-rteThemeForeColor-2-4"><strong>InfoPath:</strong>  If you are using SharePoint Server, you also have access to <a href="http://bit.ly/ojwiae"><font color="#0072bc">InfoPath forms</font></a> for form customization. InfoPath includes a rules engine, validation, more form layouts, and controls, and the ability to write code within the form.<br /></div></li>
<li><div class="ms-rteElement-P ms-rteThemeForeColor-2-4"><strong>Business Connectivity Services:</strong>  Business Connectivity Services allow you to integrate external data and functionality into your SharePoint 2010 environment. This <a href="http://bit.ly/o9H2Do"><font color="#0072bc">great article by Kirk Evans</font></a> describes what BCS is, how to use it, and even proper scenarios for custom development beyond Designer.<br /></div></li>
<li><div class="ms-rteElement-P ms-rteThemeForeColor-2-4"><strong>Honorable Mention:</strong>  Well, as this post fizzles out, I'll mention that Designer has other capabilities that you can explore on your own.  Editing pages, editing master pages, and site/sub-site creation all get an honorable mention.</div></li></ul>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">In conclusion, I hope you see that an awful lot can be done in SharePoint using the web UI and Designer.  Even if you remain strictly a custom coder, there is a place for you in this ecosystem.  Everything we have covered so far can be extended with custom components.  It is important to understand how this all works, what the capabilities are, and where your hooks are to develop most efficiently.  But for the developers who are interested in building complete business solutions on SharePoint, you have to have an open mind.  Even if you are working in Visual Studio, you will author many of your customizations in the web and Designer before importing them into your project.  You will play a sort of dual role as a power user and developer, but that comes with the greatest combination of capabilities.</p>
<p class="ms-rteElement-P ms-rteThemeForeColor-2-4">Thanks for Reading,<br />Lou Estrada</p></div></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=7&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=7&RootFolder=*">General</a>; <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=4&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=4&RootFolder=*">Development</a>; <a onclick="OpenPopUpPage('http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=3&RootFolder=*', RefreshPage); return false;" href="http://www.nmrconsulting.com/blogs/sharepoint/_layouts/listform.aspx?PageType=4&ListId={A4B77051-99DE-4EF2-AB91-A69ED0D72ADC}&ID=3&RootFolder=*">Design</a></div>
<div><b>Published:</b> 9/23/2011 8:00 AM</div>
]]></description>
      <author>Lou Estrada</author>
      <category>General; Development; Design</category>
      <pubDate>Wed, 21 Sep 2011 14:04:00 GMT</pubDate>
      <guid isPermaLink="true">http://www.nmrconsulting.com/blogs/sharepoint/Lists/Posts/ViewPost.aspx?ID=9</guid>
    </item>
  </channel>
</rss>