Skip Ribbon Commands
Skip to main content

Quick Launch

NMR Consulting > Blogs > NMR SharePoint Team Blog
November 09
SharePoint Developer Orientation - Part 5: Professional Development with Visual Studio

Get ready for Visual Studio development by setting up a Sharepoint development environment and getting accustomed to Visual Studio's Sharepoint Tools.

Getting started with Visual Studio

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 "orientation" series, even though this information is available scattered about the internet.

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.

Setting up your development environment

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.

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 Technet and the community for instructions.  In short, you will want:

  • A virtualization environment (Hyper-V, VMWare, etc.), although you could install on a physical Win7 64-bit machine
  • At least 8GB RAM (with at least 4GB allocated to the guest virtual machine)
  • Ideally, one or more SSDs or fast 7200+ rpm HDDs (host OS on one, VMs on another)
  • For best results, install 64-bit server software, and 32-bit client software (Office, browsers, etc.).
  • Install pre-requisites (SQL 2008 R2 Express+, PowerShell, IIS, etc.)
  • Install SharePoint 2010, Designer, and VS2010.
  • Install Visual Studio 2010 SharePoint Power Tools
  • Install CKS – Development Tools Edition (Server or Foundation)

Take a little time to research your options and plan your development environment.

Sandboxed Solutions

In Visual Studio, most SharePoint project types are the same.  They are Empty SharePoint Projects with one or more SharePoint Project Items (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.

SBorFarm.png

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 "user solutions" and are run by the "user code service."

When you attempt to activate your solution from the Solutions gallery, it will be validated against sandboxed restrictions.  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 custom solution validators, increase or decrease a solution's thresholds, or turn off Sandboxed solutions altogether.

See Technet’s Sandboxed Solutions Overview and MSDN’s Restrictions on Sandboxed Solutions article for more information.  As usual, there is guidance from the community as well.

A couple more quick notes about Sandboxed solutions...  First, you can use the Packaging Explorer (View > Other Windows > Packaging Explorer) to validate your package and find out if you are still within the constraints of a Sandboxed Solution:

PackagingExplorer.png

Finally, you can change the Sandboxed/Farm status in the project’s properties window:

SPProjectSandboxedProperty.png

SharePoint Project Items (SPIs)

To add functionality to your project, you will add SharePoint Project Items (Right-click your project > Add > New Item...).

SPIs.png

SPIs behave like folders that contain files that are functionally 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.

Let's look at a few examples:

WebPartSPI.png
  • The Empty Element SPI is the basis of all the others and literally contains an empty Elements manifest.
  • The Module SPI simply places files into the SharePoint content database (in document libraries or galleries) or the file system.  It adds a <Module...> xml element to the Elements.xml manifest with one or more <File...> elements that define where to place each file.
  • The Web Part 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 "NoDeployment"), 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.
  • The Visual Web Part 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.

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.)

Features

Features are the logical units of functionality that users can turn on and off for a particular deployment scope (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:

SiteSettingsFeatures.png

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.

Feature Receivers (right-click the feature > 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 Stefan's blog post for an example of cleaning up after yourself.

Features can have activation dependencies 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.

Once your feature is developed and deployed, you will have a new set of challenges upgrading features.  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 feature upgrading in depth in his blog, so I will refer you to him for more details.

Packages and Deployment

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 via a mapped folder 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 farm solutions, or the web UI for sandboxed solutions.

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!

Professional Software Engineering

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.

Finally, let me point you to a great resource for developers.  The patterns and practices crew at Microsoft put out guidance for Developing Applications for SharePoint 2010.  It is currently on MSDN, but was started and developed and refined into its current state on codeplex, where you can still find some hands on labs.

Conclusion

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 (@SharePointLou) or linked in (louestrada).

Thanks for reading,
Lou Estrada

September 23
SharePoint Developer Orientation - Part 4: Advanced Customization with Designer

Learn how to use SharePoint Designer to declaratively develop advanced customizations.

SharePoint Designer is your friend

Now that you are generally familiar with SharePoint from a user’s perspective, 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.

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 type of project 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.).

Customizing list views and forms

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.

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 <SharePoint:FormField ... /> 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 XSLT to work with, plus the SharePoint ddwrt namespace, plus the use of ASP.NET and SharePoint server controls.

To get started, check out this great SharePoint Designer resource from Microsoft.  The Data Views and Forms 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:

  • Example 1:  Create a custom list view
    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:

    Before:
    Example 1, Before screenshot

    After:
    Example 1, After screenshot

  • Example 2:  Create a custom list form
    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.

    Before:
    Example 2, Before screenshot

    After:
    Example 2, After screenshot

Before we move on, I have to mention Marc Anderson, 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 his blog, and the SPServices jQuery library.

Designer workflows

You can create workflows to help automate business processes using the many OOTB workflow actions 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.

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 codeplex.com) and third party products (from activities to advanced workflow design software).  Failing that, as a developer, you will certainly be able to write your own 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.

What else?

A few other important capabilities to be aware of are:

  • InfoPath:  If you are using SharePoint Server, you also have access to InfoPath forms for form customization. InfoPath includes a rules engine, validation, more form layouts, and controls, and the ability to write code within the form.
  • Business Connectivity Services:  Business Connectivity Services allow you to integrate external data and functionality into your SharePoint 2010 environment. This great article by Kirk Evans describes what BCS is, how to use it, and even proper scenarios for custom development beyond Designer.
  • Honorable Mention:  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.

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.

Thanks for Reading,
Lou Estrada

August 26
SharePoint Developer Orientation - Part 3: Be a User

In order to better understand SharePoint, its capabilities, and its limitations, use the product as an end-user.  This will give you valuable perspective when you start designing your own solutions.

Not So Fast!

If you are truly new to SharePoint, and you want to be a SharePoint developer, it is going to take time and you will have to start small.  You cannot – or should not – develop for SharePoint without understanding the platform from the user’s point of view.  The platform is for them, after all.  You are only going to be needed when users need help, or when a professionally developed and maintained application is warranted.  Also, as you develop components, you should understand how your users will interact with them and use them in a normal user scenario.

So, before you start reading development books, spend a couple of days playing around in the environment.  Learn how to create site collections, sites, pages, custom fields, content types, lists, views, etc.  Do this only from the web UI and avoid SharePoint Designer or Visual Studio for now.  It is important to know where the lines are so you start to get a picture of the user’s capabilities.  There are plenty of resources available to get you started.

Start Creating in the Web UI

When you create a site, notice the different site templates available to you.  Go into site settings and learn about site features.  Notice that a Team Site deploys with the “Wiki Page Home Page” feature enabled, for example, while the Blank site does not.  Create a list and notice the many field types available.  Create another list and add a lookup field to the first list.  Explore or take a guided tour, but do spend some time experiencing SharePoint from a user’s perspective.

If you think about a custom application, it would mainly consist of data, data access, processing, and UI.   SharePoint lists are a robust data store with indexing and referential integrity.  They can handle millions of records (although there are caveats with large lists).  SharePoint’s data access comes in a variety of flavors, including Server API, cross-platform Client APIs, and Web Services.  With event receivers, workflows, web parts, controls, http modules, timer jobs, custom actions, xsl, and client script, you have all the necessary means to implement your processing.  Finally, SharePoint is a web framework and has OOTB default rendering, although you could create your own pages, views, web parts, HTML, etc.  You can also utilize any of the applicable data access methods listed above from other platforms, like a native smartphone app, for example.

How’d They Do That?

By looking at the platform from a user’s point of view, you are engaging in some sort of reverse engineering.  You are looking at what is possible before getting bogged down with how to do it.  It is a useful exercise, and I suggest everybody take a minute to go to the web UI, find something really cool, and then figure out how you can do the same thing in your code.

While I was learning the SharePoint 2010 web UI, there were many things that caught my eye; the ribbon, the dialogs, the rich client experience.  As you will find out, you get some of this for free when you start developing your own solutions, and some you have to work for.  When I was building a web part, for example, I wanted to pop open a dialog to collect input like the Silverlight Web Part does.  After a couple failed attempts, I put it off for another time.  My colleague, Rob Cronin, sent me to a blog post by Wictor Wilén that explained the undocumented feature.  Having had experience with the web UI, I knew it was possible.

Another colleague, Rob Johnson, told me about his experience exploring SharePoint 2010.  He experimented with service applications like Excel Services.  He learned how to reference a cell, chart, or pretty much anything in an Excel document via a URL (using RESTful services).  “Think of the possibilities,” he said.  Well, as a developer exploring SharePoint through a user’s eyes, I say think of the opportunities.

When you hit a wall, DON’T crack SharePoint Designer just yet.  Search for third party tools, open source projects, and crafty solutions from the SharePoint community (and your colleagues!).  Think like a user and don’t try to develop your way out of every problem.  Is there a fix you can purchase, install, or configure?  How far can a user go without leaving the web UI and without calling you?

Learn SharePoint Permissions

Learning SharePoint permissions is important for a few reasons.  First, the users will have different experiences based on their permission levels.  If a user hits a wall, is it because they don’t have the permission to accomplish their task?  Or is it truly a limitation of the platform that you may have to develop around?  The user may not know which it is and call you.  Will you know?

Second, you may work with organizations that have different approaches towards user empowerment.  Consider how working with an organization that embraces user empowerment might differ from one that is more locked down.  Developing in an environment where users can develop for themselves makes for an interesting dynamic.  You may step on each other’s toes, be met with unrealistic expectations, and, if the culture doesn’t truly support it, you may begin to feel a lot of tension between the two groups.  On the other hand, if users are so locked down that they need a developer to do anything, then that defeats the purpose of SharePoint.  Costly developers will spend too much time creating pages and configuring web parts for the underprivileged rather than developing innovative solutions.

Understanding these dynamics, possibilities, and limitations will pay dividends later.

Thanks for Reading,
Lou Estrada

July 12
SharePoint Developer Orientation - Part 2: Where do we fit in?
SharePoint is becoming the ultimate RAD tool for end-users.  They are able to deeply customize their portals and compose their own solutions directly in the web UI or using Designer.  So where do professional developers fit in?

SharePoint is for end-users…

SharePoint was designed for end-users.  Whatever accommodations have been made for developers have been slowly introduced and improved over the last decade.  SharePoint 2010 is the first version that can pass as a development platform, in my opinion.  While it pales in comparison to other development platforms in some respects, it far surpasses them in others.

Point is, end-users are front and center.  They are supposed to be able to help themselves without us.  As it turns out, sometimes they can help themselves, and sometimes they can't.  Sometimes they are able to compose a solution by creating a list, customizing a view, creating a page, adding some web parts, etc.  Sometimes, users need a little extra push to get over a hump.  Even then, developers may not be necessary.  A power user can train up on SharePoint Designer and InfoPath, customize a form, add a workflow, and even surface external data through Business Connectivity Services.

…but there is room for Developers, too

There are a couple of scenarios where developers can shine within SharePoint.
  1. Extending the platform. SharePoint offers an impressive set of features.  That said, there are many ways a developer can extend SharePoint so users and power users have more tools to work with.  This is right in line with SharePoint's goal to empower the users.  When we extend the platform, we are not directly addressing a business need so much as overcoming a technical limitation.  The business problem is addressed by the user with the use of the new tool (field type, web part, workflow activity, control, ribbon, etc.) we, the developers, created for them.  This is a perfect separation of developers and users, and is therefore the cleanest arrangement with the fewest conflicts.  This is similar to being a control developer for ASP.NET.  You might create a custom control while writing a business application, but there are only so many Teleriks and Infragistics around making a living off of just that.
     
  2. Professional, Reusable Business Solutions. While users can go a long way creating business solutions, you have to consider that their customizations are not always portable. 
    • Oftentimes, users will try something in a staging environment, and then try to repeat the steps manually in production.
    • SharePoint Content Deployment, which is designed to move content through the normal dev/staging/QA/production deployment path, only handles content stored in the content database, so may not work every time.  It also does not address reuse of the solution in multiple sites/departments.
    • There are ways to export and import web parts and site templates and such, but they are rarely the best approach.

Developers, on the other hand, can utilize Visual Studio to package their solution into a WSP file for reuse in any SharePoint environment.  The developer packages the WSP, it is deployed to staging, and if the tests pass, the same exact package gets deployed to production, potentially multiple times in multiple environments.

Each has their own strengths

Developers have other advantages, too, like the tools that allow us to do more (features, controls, web parts, etc.) and the technical know-how that allows us to do it better (better architecture, performance, testing, quality, stability, reusability, maintenance).  Not to mention we have decades of IT lessons learned in our pockets, such as development methodologies, frameworks (ITIL, CMMi), best practices, and more, to help our projects succeed.

Users have an advantage with quick turnarounds (composing their solutions directly on production for instant gratification) and intimate domain knowledge (smarter about their business processes and their requirements, leading to more accurate process representations in their work).  They work faster and nimbler, with fewer layers of interpretation from problem to solution, and less ceremony getting in the way of immediate results.  Not every business problem warrants a six-figure (or more) price tag, and the results users and power users can put together often are compelling. 

Getting the best of both worlds

So how can an organization get the best of both worlds; the flexibility, speed, and accuracy of a user-created solution, and the stability, professionalism, and performance of a developer-created one?  Well, this is where politics and egos get involved.  In order to avoid problems down the road, an organization ought to put together guidelines ahead of time.  What are users free to do? When should developers get involved?  How should they work together?  There is no black and white answer here.  Navigating these politics come with the job.  Some guidelines to consider...

  • Look to invest in more professional solutions on mission-critical projects, projects that need to be maintained for years to come, or that need to be shared among departments/sites/workspaces.  Keep it simple on others.
  • Leverage the strengths of all team members, utilizing whatever assets are appropriate for the task at hand.
  • Find ways to work together... Consider pairing a developer with a power user to design solutions or perform solution reviews.  Or have shared meetings (perhaps Lessons Learned meetings) where knowledge, ideas, and status can be shared among everybody.  Each would be surprised what the other is capable of.
  • Document best practices for common situations... a knowledge base (a wiki is great for this).
  • Look for reuse opportunities.  If a developer sees a common problem, is there a creative solution that can be deployed as a feature?

These are all common sense measures here.  No matter what the makeup of your team, with a little thought, a bit of experience, and a lot of patience, you can find a way to get the best of both worlds.

Thanks for reading,
Lou Estrada

June 27
SharePoint Developer Orientation - Part 1: Why should we care?
SharePoint is getting a lot of buzz in the business world, but not as much in the IT development world. So what is it about SharePoint that is so appealing to business users? Why should I, as a professional developer, care about this "end-user" tool?

SharePoint is valuable to business...

SharePoint is here, and it is here to stay. It is more than a glorified web app. It is an environment where business users are placing more and more of their documents, data, and business process artifacts. It is a tool for business automation and user empowerment. It is becoming very popular, and the more it is around, the more likely you will be to face it at some point. It is popular for a reason. Much like Office empowers users to build their own solutions on their desktops, SharePoint empowers users in their corporate intranets, extranets, and other online environments.
 
SharePoint serves as an 80% solution for 100% of the organization. It provides value for everybody. It cannot solve all business problems, but it is not pigeon-holed to any one in particular, either. Chances are, more people will use SharePoint to help solve more problems than any custom application you have written. I have never written an application that had such potential.

An advanced platform for development...

Furthermore, SharePoint is a springboard for professional solutions. Developers start with the 80% solution (or 5% or 95%) and simply close the gap. This is much more cost effective than developing or purchasing completely custom solutions. Businesses are likely to catch on simply because their custom development dollars can go much further. Developers start with all the features and infrastructure SharePoint has to offer. We get a head start with out-of-the-box (OOTB) features like easy integration with data and assets stored in SharePoint, easy integration with other solutions in the environment, a built-in API to access even custom data and functionality, built-in authentication and authorization, and much more.
 
Custom development still provides the same value as ever. It tailors a solution to fill a need like no OOTB solution can. It addresses nuance and detail that sometimes makes all the difference in a business process. Custom development gets a bad name when it introduces fragmentation, chaos, and costly overhead. In SharePoint, you can deliver all the benefits of customization while adhering to, if not building upon, the ideals that have made SharePoint a success, including user-empowerment, consistent UI, central configuration/management, easy integration, and others. Surely this is more appealing to your customers than paying extra for this type of consistency or to train users on yet another UI.

Your customers care...

To sum it up, you should care about SharePoint because your customers, current and future, care about SharePoint, or will soon enough. You can continue to resist it and deny it, or you can shed the stereotypes and prejudices you may have, take a clean look at what it has to offer, and take advantage of the opportunity it provides. Thinking that SharePoint is an attack on development or threatens you in some way is misguided and poisonous to any SharePoint implementation, and potentially your career.

Thanks for reading,
Lou Estrada

April 25
NMR SharePoint Blog

NMR Consulting is a solution provider with a long history in IT.  We’ve been working with SharePoint since the 2003 version, and have rolled out internet, intranet, and extranet sites and a host of other solutions based on the platform.  Our history does not end there, as we also have strong expertise and proven capabilities across the IT spectrum.  We have seen technologies and trends come and go, and solid principles endure.  Diligence, hard work, inspiration, accountability, innovation, efficiency, resourcefulness, and customer service are technology- and time- agnostic. The years of experience and the deep expertise within our team allows us to see changes in the IT field with maturity and perspective rooted in these principles.
 
The changes, and challenges, SharePoint introduces are far-reaching and require a shift in our perspective as a solution provider.  It is a flexible platform that requires close collaboration and cooperation between business and IT to maximize the benefits.  It offers business a single platform to deliver streamlined processes, document and records management, search, collaboration, and other capabilities that are a core need of any organization.  It offers IT an environment to rapidly deliver services and solutions to customers, a framework for extending the core capabilities of the product, and integration of data and systems, whether internal or external to the SharePoint environment. 
 
SharePoint is over a decade old, but continues to mature aggressively with each release.  There is no single resource or reference that  covers the breadth and depth of the capabilities of SharePoint.  We at NMR believe in being an active participant in the SharePoint community.  This blog is a platform for our experts to better share ideas and experiences and to collaborate with others.  We will address problems, share tips and tricks, and offer our perspective and experiences for discussion, in an effort to positively contribute to the SharePoint community at large.

 

NMR Team​

 

 About this blog

 
NMR's SharePoint team delivers services ranging from deployment planning to solution architecture and development.