Showing posts with label SharePoint 2010. Show all posts
Showing posts with label SharePoint 2010. Show all posts

Thursday, April 9, 2015

SharePoint Migration and Administration Notification Tool

Scenario
  • You are performing an administrative change at the SharePoint site level or for all sub-sites starting at a particular location
    • Examples
      • Migration
      • Retention, Archival or Deletion
      • Redesign
      • User Acceptance Testing (UAT)
      • Upgrade
      • Restructure
      • Merge
  • You need to convey the administrative status to all users on the site
    • Likely as part of your SharePoint administrative communications plan
    Issue
    • There is no simple or easy out of the box way to accomplish this
    • We don't want to manually replicate notifications on each sub-site, modify the master pages, or configure content roll-ups on each site
    Solution
    • I developed the SharePoint Migration Notification Tool specifically for this purpose
      • Download SharePointMigrationNotification.wsp for deployment at the Site Collection level on a SharePoint on-premises farm
      • Add and Install the WSP file you downloaded
      • Enable the site collection feature named "Migration Notification" on each site collection
      • Add a list to the root site for each site collection.  Select the "Migration Notification URLs" list template (found under Blank & Custom list types)
        • You can name this whatever you like, but you should only have 1 of these lists at the site collection root because the tool uses the first one it finds
    • Here are some examples of the default notifications you can configure
      • You can also add your own custom notification messages

    • Here is the list configured at the Site Collection root level that defines your notifications
      • The new/edit item forms describe what should be entered in each field

    • Notification Tool Feature List
      • Site Collection Deployed full trust solution (Currently designed for SharePoint 2010+)
      • Client object model exclusively used for notification processing in order to support future releases on the SharePoint 2013 app model and Office 365 environments
      • Drop down selection of common notification scenarios
      • Migration notification list definition
        • Must be added to the root site collection
      • Configurable notification text with wiki-like syntax for inserting hyperlinks or a date from the Migration Notification List
        • More Info URL
        • New URL
        • Migration Date
      • SharePoint client object model property bag caching to reduce server load and increase performance
      • Supports the standard notification color selections
      • Include all sub-sites (notification can be overridden at the child site level)
      • New / test site URL replacement including the full path to the current page/form
      • Notification disable flag
      • Automatic population of the title field from the New Site URL wiki when sent to a ".../NewForm.aspx?source=..."  page (Using "New URL Set Title" syntax)
      • Permission based notification visibility (security trimming)
      • Notification dismissal option (cookie based)
        • 1 day dismissal duration
      • Automatically delete sites from the migration notification list by selecting Auto Delete or Auto Recycle in the Old Site Status field
        • This capability is enabled through a separate Site Collection feature and requires the user to have permissions to delete the site
        • This feature is especially useful for retention policies that require you to post a notice of deletion before deleting the site.
        • If you use Auto Delete instead of Auto Recycle, you should backup the site first if there is any possibility of needing a restore
    • Contact me for SharePoint Farm Upgrade or Migration services, to request a customized version of this solution, or to provide SharePoint Solution Architecture services
    Releases
    • Release 1.3.2.0 (2013 only): 11/7/2015
      • Fixed a bug when removing an existing Migration Notification List and adding another with a different name.
    • Release 1.3.1.0: 7/6/2015
      • SharePoint 2013 list view fix
      • 3 digit year date format fix (115 fixed to be 2015)
    • Release 1.3.0.0: 5/29/2015
      • SharePoint 2013 version created
    • Release 1.3.0.0: 5/27/2015
      • New Features
        • Auto Delete Old Site feature added
          • New feature activates migration notification list event receiver keying off a new field type "Old Site Status"
        • Refactored to use ScriptLink and _layouts JavaScript code file to enable browser based code caching
    • Release 1.2.1.0: 5/15/2015
      • Bug Fixes
        • Redirect URL now works when browsing folders within a list/library
          • These links now redirect to the Document Library root folder
      • New Features
        • Notification dismissal option (cookie based)
          • 1 day dismissal duration
    • Release 1.2.0.0: 5/13/2015
      • Bug Fixes
        • URLs with spaces and special characters now work correctly
          • You will need to make sure to unencode the URLs when entering them in the list.  The title field description now reflects this requirement.
        • Redirect URLs with special characters will now be encoded correctly
      • Added Features
        • Permission based notification visibility (security trimming)
    Backlog
    • Develop an Office 365 app version
    • Add parameter for dismissal duration length

    Tuesday, March 10, 2015

    CRM and xRM vs SharePoint: Business Solution Architecture

    Scenario
    • You are tasked with developing an enterprise application or business process solution using a stable platform tool
    • You have MS SharePoint / Office 365 and MS Dynamics CRM options available and need to decide which to use
    SharePoint / Office 365 and Microsoft Dynamics CRM and xRM Comparison
    • SharePoint and Office 365 is a(n)
      • Customizable and flexible business solution platform
        • Content-centric
      • Content/document management and versioning system (CMS/DMS)
      • Enterprise search engine
      • Workflow system (WWF/Azure Workflow)
      • Alert engine
      • Extension for MS Office client apps and MS OfficeWeb Apps (OWA)
      • Web site development and web content management tool (WCM)
      • Publishing tool
      • Personalizable web interface
      • Social platform
      • Cloud capable, multi-tenant framework
      • MS Access web database platform
      • MS Project platform
      • MS Team Foundation Studio site platform
      • MS Dynamics CRM document repository
    • Dynamics CRM (xRM) is a(n)
      • Customizable CRM line of business system
        • For Sales and Marketing departments
      • Entity management platform
        • Ex: Accounts, contacts, orders, cases and opportunities
        • May be configured for case management solutions such as health and human services, benefits administration, legal cases, grant management, etc.
      • Query tool
      • Workflow engine (WWF)
      • Analytics tool
      • Extension for MS Outlook, Excel, and Word
      • Custom business solution platform
        • Email and conversation-centric applications
          • Customer service, tech support, employee relations, outreach, campaigning, contracts, etc.
    Summary

    MS Dynamics CRM is designed as a customer relationship management system and the platform has native relational design at its heart.  It can be adapted to many conversational and relationship based business processes.  The primary problem with CRM, is that it lacks the popularity of SharePoint and Office 365 due to reduced feature set and increased cost and is therefore less likely to be available as a platform to most business developers and end users.  This makes finding third party solutions, developers, community forums, and experienced users difficult or costly.  Dynamics CRM as a line of business app has many competing products that make the base feature set less important when choosing a solutions platform.  These include those from MS partners built directly on SharePoint such as BPA Solutions CRM, SP CRM Template, and SP Marketplace CRM.

    The capabilities of SharePoint and Office 365 currently outweigh those of Dynamics CRM for general purpose custom business solutions.  This is especially true when business solutions incorporate enterprise search, documents and content management, publishing and approval, personalization, collaboration, or public web content.   SharePoint with a typical set of third party add-ins provides the best long term, affordable, and flexible solution architecture.  Microsoft has embraced SharePoint as an application platform within most of its divisions, Dynamics being the outlier.  SharePoint/Office 365 is also the fastest growing product within Microsoft due to its rapid adoption globally.  Finally, SharePoint has many more third party solution providers and COTS line of business systems than Dynamics CRM.

    For highly relational and performance based web applications it is better to develop a user interface in SharePoint (app model or web parts) with a SQL DBA developed backend or MS Access Web Database rather than develop a solution using the Dynamics CRM drag drop interface or native SharePoint lists/libraries.  This will remain the case until Dynamics CRM catches up to SharePoint/Office 365 in functionality, SharePoint integrates a better relational/back end framework, or another company develops a better web application platform.


    Microsoft Corporate Strategy and Product Roadmap Commentary

    Ideal Objective: SharePoint = Microsoft's Web Operating System

    SharePoint must be the single web based application platform for all Microsoft's business solutions.  MS Dynamics CRM has not been ported to the SharePoint platform for the main reason that customizable relational models are not embraced within SharePoint.  Every attempt by the SharePoint product team to incorporate true relational database (RDBMS) integrity, performance, and design into the product have met with limited success.  External lists and lookups are feature deprived and difficult to configure. Access web databases are siloed from other SharePoint features and sites.  Native lookup fields lack basic features and have limited relational support. Database synchronization to or from lists is non-existent.  Many third party vendors have stepped up to fill these gaps, but that leaves Microsoft without the capabilities for internal development utilizing these missing features.  For now, we are stuck in that period where the Dynamics CRM platform is not yet obsolete, but SharePoint (without third party add-ins) is not ready for the port.

    If Microsoft is to succeed in its primary focus towards enterprise software, then these product teams need to work together to bolster SharePoint's feature set as a solutions development platform and then port the Dynamics business solutions onto the improved platform.  This would allow the Dynamics teams to contribute to the design of the SharePoint platform while also removing the CRM team's burden of having to re-invent the wheel regarding the existing and continually improving SharePoint feature set.  Examples of these shared functionality opportunities include: workflow engine, search engine, forms engine, list engine, authorization, authentication, UI, admin consoles, deployment methods, device support, mobile applications, OneDrive for Business synchronization, web services, application object model, BI, content management, metadata, analytics services, patches, upgrades, and MS Office integration.  Microsoft has taken the first steps with incorporating the MS Access team into SharePoint forms and Access web database design, but the SharePoint team also needs the real world requirements and feedback from the Dynamics teams to ensure the future success of both products.

    Nearly 10 years ago, at the last SharePoint Conference he keynoted, I asked Bill Gates if SharePoint would get true relational design functionality.  His answer was that they were working on some of these features (which turned out to be External Lists and Lookup RI) but he still insisted on using SQL RDBMS for highly relational solutions.  This answer was inadequate and shortsighted.  It is now time for Microsoft to step up and take advantage of the monumental opportunity to combine relational design into the worlds most prevalent and feature rich Web OS, SharePoint (aka Office 365).

    Sources and Other Resources

    MS Ignite 2015 Update
    While attending MS Ignite 2015, I used the opportunity to talk with product leads and managers on both Dynamics CRM and SharePoint/Office 365 to find out how this is going down within Microsoft.  Both teams admit that there is very little collaboration between the Dynamics and SharePoint teams and there is a lack of direction from the executive level.  This issue flows from the Microsoft organizational structure and requires executive action or an internal grass roots effort to remediate.  If Microsoft wants to establish itself as the king of business solutions, then we need these teams (Dynamics, SharePoint/Office 365, and MS Access) to combine their platforms and stop wasting time reinventing the wheel.

    One prime example of waste was brought up in the CRM line of business development session.  Since the CRM team does not collaborate with the SharePoint team, they are developing their own separate enterprise search engine rather than utilizing the highly efficient FAST search engine the SharePoint/Office 365 team bought for $1.2 Billion.

    Monday, March 10, 2014

    SharePoint Farm Infrastructure Architecture Recommendations

    Following are some recommendations for a typical SharePoint Development environment topology:

    In addition to the corporate Test/Stage and Prod farms, I recommend a standalone Dev VM for each of your MSDN subscriptions/developers.  Development VMs contain a standalone single server farm as well as all development tools.  Any content only solutions (OOB site collection or web scoped) should be configured directly in Production in a new site collection.  Custom development (Visual Studio) is completed on the development VMs, released to Stage, tested, and then released to Prod.  Each Dev VM should be semi-isolated from the corporate network (separate subnet and domain).  Dev VMs should be disposable, distributable, and standardized as in my article here: SharePoint 2010 Development Farm VM

    In this way every new developer would only need to copy the VM to their workstation and would be up and running after connecting to Source Control.  They would also have full control of their VM so IT admin requests would be minimized.  Simply recopying the template VM would fix any issues.

    The development VM operating system drive should be a solid-state drive.  Optionally, an external BLOB storage and search index partition may be stored on a low cost drive (requires a little more configuration).  Workstations must support hardware virtualization.

    The Test/Stage servers may need to be used for debugging and development of integration issues.  Alternatively, a standalone Dev farm on the corporate network can be set aside for this purpose.

    In each case, a process for synchronizing Production site collections back onto the Test/Stage and Dev VMs should be maintained.  Usually this includes site collection backups being made available as needed.  However care must be taken to ensure information security policies are maintained.  This can include scrubbing/redacting content, disabling alerts and emails (this may be done through network isolation), and populating sample data.

    Friday, December 6, 2013

    SharePoint 2010 Search - View Properties Link w/ folder and case support - Federated

    Issue
    • You have SharePoint 2010 Server Standard or Enterprise
    • SharePoint search results provide a link to the document, but no other links
      • Often times a user has to copy and paste the document library url into the address bar and then search for the document in the library to view the properties or kick off a workflow.  This is extremely inconvenient.
    • You would also like a link to the document's View Item (DispForm.aspx) form
    • You would also like a link to the document's Document Library
    • You would like to configure this at the Search Service level so that the links appear in any search center in the farm utilizing the Search Service and also on the OSSSearchResults pages
    • Utilizing code from the following blogs

    Solution
    • Configure the Search Service in Central Administration as follows
    • IMPORTANT
      • Xslt variables and parameters are case sensitive
      • Make sure instructions are followed exactly as written
    • Create 2 managed properties (Metadata Properties in Search Service Application) after your sites have been crawled
      • basic4
        • map to basic:4(text)

          • You have to page to the right after selecting the "basic" group.  It does not show up on the first screen when searching for the crawled properties.  You cannot use the free-text search filter to find this item.
      • listitemid
        • map to ows_ID(integer)
      • Configure Federated Locations in Search Service Application.
        • Click "Local Search Results"
        • Expand "Display Information"
        • Modify the following "Core Search Results Display Metadata" sections
          • Uncheck "Use Default Formatting"
          • Add the following columns to the "Properties" window

            <Column Name="ServerRedirectedURL"/>

            <Column Name="listitemid"/>
            <Column Name="basic4"/>
             
        • Copy the contents of the XSL into a text editor like Visual Studio or Notepad  
          • Find the IsDesignMode parameter and modify as follows

            <xsl:param name="IsDesignMode">True</xsl:param>

            <xsl:param name="listitemid" />
            <xsl:param name="basic4" />
             
        • Find the DisplaySize template call and modify as follows

          <xsl:call-template name="DisplaySize">
          <xsl:with-param name="size" select="size" />
          </xsl:call-template>


          <xsl:call-template name="DisplayViewPropertiesLink">
          <xsl:with-param name="basicFour" select="basic4" />
          <xsl:with-param name="itemUrl" select="url" />
          <xsl:with-param name="siteUrl" select="sitename" />
          <xsl:with-param name="listItemId" select="listitemid" />
          <xsl:with-param name="contentclass" select="contentclass" />
          </xsl:call-template>

          <img style="display:none;" alt="" src="/_layouts/images/blank.gif"/>

        • Find the end of Stylesheet tag at bottom of document and modify as follows

          <!-- A custom template to display a link to view the properties for a document -->
          <xsl:template name="DisplayViewPropertiesLink">
          <xsl:param name="basicFour" /> <xsl:param name="itemUrl" /> <xsl:param name="siteUrl" /> <xsl:param name="listItemId" /> <xsl:param name="contentclass" /> <!-- Variables to convert siteUrl to lower -->
          <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
          <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
          <xsl:if test="$contentclass='STS_ListItem_DocumentLibrary'">
          <xsl:choose>
          <xsl:when test="contains($basicFour,'http')">
          <xsl:variable name="library" select="substring-before(concat(substring-after(translate($siteUrl, $uppercase, $smallcase), concat(translate($basicFour, $uppercase, $smallcase), '/')), '/'), '/')" />
          <xsl:variable name="viewPropUrl" select="concat($basicFour, '/', $library, '/Forms/DispForm.aspx?id=', $listItemId)" />
          - <a href="{$viewPropUrl}">View Properties</a>
          </xsl:when>
          <xsl:otherwise>
          <xsl:variable name="docLibLoc" select="substring-before(substring-after($itemUrl, concat($siteUrl, '/')), '/')" />
          <xsl:variable name="viewPropUrl" select="concat($siteUrl, '/', $docLibLoc, '/Forms/DispForm.aspx?id=', $listItemId)" />
          - <a href="{$viewPropUrl}">View Properties</a>
          </xsl:otherwise>
          </xsl:choose>
          </xsl:if>
          - <a href="{$siteUrl}">
          View Library
          </a>
          </xsl:template>

          <!-- End of Stylesheet -->
          </xsl:stylesheet>

           
        • Copy the contents of the text file into the "Properties:" textbox, replacing all existing text
        • Hit OK to save the changes
      • You may need to reset the index and run a full crawl to get everything working afterwards
        • Sometimes the Search Centers cache the old XSLT for awhile, so the index reset and possibly an app pool recycle may get it to refresh from the federated location.  Or toggling the Core Results web part on the search center page can work as well.


      Tuesday, June 11, 2013

      BCS BDC external data lookup field migration

      Scenario
      • You want to programmatically set an External Data lookup field
        • Ex: Migrating data into a SharePoint list or library
      Issue
      • In this case, we used Idera / Metalogix Migration Manager, which does not support External Data fields, nor do they plan on supporting it in the near future
        • This is likely due to the fact that they offer a client only (non-server deployed solution) and haven't figured out how to do this using the remote content deployment APIs
      • The result was that the external data field only displayed correctly in the View Item form and did not populate in the Edit item form or any of the related/projected fields in the view.
      Resolution
      • Luckily I did have access to deploy a server solution, so I developed the following web part to handle the migration
        • If you are using Office 365 or don't have this access then you will need to develop your own solution or need to use a data synchronization solution instead (several vendors make these)
      • In order for this solution to work, you need to add a temporary column to the list that will store the IDs of the field you wish to migrate.  Note that this is not necessarily the display name.
        • In our case we migrated the ID column to a list column named SourceId, ran the tool, then deleted the SourceId column.
      • I utilized code from StackExchange and Jaspers' Weblog along with some forum posts, converting all to VB.Net for aesthetics
      • Download the code
        • The wsp solution file is located in the \SetExternalDataWebPart\bin\Release folder
        • You must enable the feature at the site collection level and add the web part to a page in the subsite that contains the list. 
        • In my test environment this tool updated 25 records every 10 seconds.
      • Notes
        • I found that in addition to setting the display name you also need to set the RelatedField to the BDCIdentity to get the correct value to display in the edit form and to be updateable via the refresh icon.
      // Set the BCS field itself (Display Value)
      listItem[dataField.Id] = dtBDCData.Rows[0][dataField.BdcFieldName].ToString();
      // Set the related field to the BDC Identity
      listItem[dataField.RelatedField] = dtBDCData.Rows[0]["BdcIdentity"].ToString();
      • Some other tips:
        • I had to use the RevertToSelf (BDC Identity) connection to get the refresh to function
        • I did not need to run with elevated or allowunsafeupdates except when debugging permissions.
      • Updated release info:
        • 6/27/2013
          • Added list ID range support to split copies into smaller chunks
            • Uses an SPQuery on ID field.
          • Added refresh interval for regular mid-copy status updates
            • These are actually just auto post backs using an asp.net timer control
        • 7/5/2013
          • Fixed refresh bug

      Tuesday, May 28, 2013

      Every SharePoint Team Site should have a OneNote notebook

      Update:  Office 365 and SharePoint now include a OneNote notebook in every Team Site.  Thank you Microsoft for listening!

      In my experience, any "Team Site" should have a document library containing a OneNote team notebook.  My premise is that since a team site is typically created for collaboration, a team notebook is likely the best tool for those needs.  Team sites gutted and used as the base for a custom solution would no longer count towards this premise.  I would also consider Evernote or similar notebook tools as decent alternatives, albeit not as fully featured or integrated.

      Windows 8/10 Tip 
      Make the desktop version of OneNote the default (Not the Metro version) to get the most features

      OneNote 2016 and Office 365 new features

      OneNote Notebook features
      • Continuous Save. No Save Button
      • Automatic track changes / version history
      • Automatic synchronization and offline editing
        • Sync Now (Shift+F9) is an option to refresh quicker when collaborating
      • Simultaneous editing (changes highlighted)
      • Windows-Shift-N desktop shortcut or right click via the control panel
        • Also the Windows-N new side note and Windows-S screen clipping shortcuts
        • Other than Copy/Paste, these should be your most commonly used keyboard shortcuts
      • 1-4 click left/top/right navigation (can go deeper at the section level)
      • Recent notebooks are easily accessible via the Notebook Pane
        • Notebooks are available on the Notebooks Pane on the left nav every time you open OneNote until you remove (Close) the notebook
        • Notebooks can be renamed uniquely to that machine and user
          • Notebook contents however are synchronized across machines and users
        • OneDrive/OneNote.Com/SharePoint/O365 will also maintain a separate list of your recently used notebooks across machines
      • Audio (and video) recording with note taking time stamps
        • Notes taken at any time during the recording can replay the recording at the appropriate time
      • Mobile device support
      • Embedded documents
      • Screen clip tool (Windows-S or Insert screen clip from note page)
      • Embedded links (Linked Web Notes)
        • If researching using a browser, notes taken in OneNote will automatically embed the related URL
        • Copying, pasting, and screenshots will also include the current address from the browser
        • Also works when viewing other OneNote notebooks, PowerPoint, or Word documents
      • Drawing/tablet support (Ink to Text, Ink to Math)
      • Math (Trig/Calculus support )
      • Linked meeting notes from Outlook invitation for quickly accessing meeting notes for scheduled meetings
      • Free form layouts, markups, and drawings
        • Text, drawings, images, etc. can be inserted anywhere on the note page
        • Use to markup a screenshot or document print
      • Dock to desktop and full screen features
        • Docks to side of screen displacing the desktop so that you can take notes while demoing or working
        • Full screen mode removes the notebook navigation and menu items
      • Save to SharePoint or OneNote Online (OneDrive)
        • Notebook sections and pages are saved as folders and files within the document library, so don't be surprised if you see this in explorer view
      • Print to OneNote
        • Quickly markup or take notes on any document source
        • OneNote installs a virtual printer driver on your machine
      • Web based versions of OneNote
      • Share pages and notebooks via Email or Hyperlink (to facilitate notebook adoption)
      • MindMapping Source (Not really specific to OneNote but a nice use)
        • MindMaps are just graphical bulleted lists.  Make the bulleted list in OneNote and then copy the list to your favorite MindMapping tool.  This way you can collaborate with others who don't know or own the MM tool and you can look cool demoing the info.  Note that my whole blog could be converted into a giant mind map. :)
      Additional Features with OneTastic
      • Macros
        • Macroland: prebuilt macros
      • OneCalendar
        • See your notes by date in a calendar
      • Image utilities
        • Crop/rotate images and select OCR'd text
      • Custom styles
        • Like MS Word styles
      • Favorites and pin desktop shortcuts
      When not to use OneNote
      • Final published or printable document
      • Blogging
        • Use Windows Live Writer instead (send to blog is supported but not as good)
        • Drafts in OneNote are ok
      • Heavily formatted content or page oriented layout
        • This is better done in Publisher or Word
        • When copy/pasting or sending to MS Word, bullets may need to be reset and other formatting corrected
          • Highlight the bulleted list and then double click the bullet icon to fix the lists in MS Word
      • Diagramming or presentations
        • Use Visio or PowerPoint
        • Quick hand drawings or draft object drawings are ok
      • Spreadsheets
        • Use SharePoint lists or Excel and embed a link in OneNote
      • Dynamic/sortable/filterable lists, data, or documents
        • Use SharePoint

      Monday, May 13, 2013

      Projected Field in View Item Form

      Scenario
      • You are using Projected Fields (a.k.a. additional columns) from a lookup column in a list or library. 
        • This may be a standard lookup column or a BCS External Data column.
      • You would like these fields to show up on the list/library display (View Item) form.
      Issue
      • Normally you will only see projected fields in list views configured to display these columns.  For some reason, MS did not include them by default on the display form.
      Resolution
      • Add these fields below the standard item form.
        • The form will continue to be dynamic since the standard Data Form Web Part is still used for all other fields
          • Example: A new column added to the list will automatically show up on this customized display form.
      Steps
      • Create a New Form in SharePoint Designer on the appropriate list/library.
        clip_image001
      • Set the File Name to "DispFormWithAdditionalFields", Type to Display item form, and set as default
        clip_image002
      • Temporarily Insert a Display Item Form in the div Below the existing content
      • This will populate the Data Source Details window. Open this window if not already visible. Data view Tools (ribbon) / Options / Data Source Details (Data section)
        clip_image003
      • Right click on the Projected Field you wish to display, right click it, then select Copy Item XPath
        clip_image004
      • Now delete the temporary Display Item Form. This was just used to populate the Data Source Details window.
      • Insert a SharePoint ListItemProperty control (Insert / Controls / SharePoint) at the same location
        clip_image005
      • Right click the control and edit properties.
      • In the Tag Properties window Set the Property property. :)
        • Paste the XPATH copied earlier and delete everything up to the @ sign
          • /dsQueryResponse/Rows/Row/@Exam_x0020_Number_x003a__x0020_Company_Name
          • Change to: Exam_x0020_Number_x003a__x0020_Company_Name
      • Add a column header above or to the left of the new field.
      • Save and Preview in Browser
        clip_image006
        (names removed in image)
      • Enjoy!

      Tuesday, July 17, 2012

      Active Directory Password Expiration Notification Email

      Scenario
      • Users log into your site using an AD user store
      • Password expiry is enabled via Active Directory Group Policy
      Issue
      • User's passwords may expire without their knowledge, especially if they don't have regular access to a domain attached PC
      Resolution

      Monday, July 2, 2012

      AAM Default Zone Configuration Issues

      Scenario
      • You have configured Alternate Access Mappings (AAMs) for a SharePoint web application
      • You may be using ISA or UAG to terminate a FQDN and redirect to an internal URL
      Issue
      • SharePoint Designer Workflow email alerts with document or item links may display the internal URL or other URL from the AAMs, rather than the public URL
      • Search results will not display any results (no results) on the search page when searching using a site scope
        • Ex: From a subsite, you enter a search criteria which is scoped to "This site" and receive no results even though the content has been indexed.  "All Sites" scope works correctly regardless
      Resolution

      Thursday, May 10, 2012

      Solution Architecture - To SharePoint or Not to SharePoint

      You are architecting a web based software solution and are considering custom development (Asp.Net and SQL) or SharePoint list and library based architecture.  You can decide based on the following list of SharePoint pros and cons.  If you can pick 3 or 4 items (or 1 very important item) from the Pro list and are aware of the items in the cons list, it is likely beneficial to use SharePoint.
      • Pros
        • Authentication, authorization, and membership - Claims, forms, AD, LDAP, and custom
          • Security trimming throughout the product - Very important
        • Document and content management
          • If you plan to upload files, plan to use SharePoint - Very important
        • Item Data
          • Site, library, and list columns
          • Managed metadata
          • Customizable ad-hoc list and library views
        • Search and Indexing
          • Security trimmed - Very important
        • Publishing, approval, versioning, and check outs
          • Versioning - Very important
          • Remember to turn these on where appropriate
        • Navigation
          • Security trimmed
          • Dynamically populated
        • Web content management - Sites, pages, wikis, blogs, and web parts.
        • Recycle Bin - The big undo
        • Email Alerts, RSS
        • Integrated workflow and task engine - Pre-built Approval and Review workflows
        • Retention policies, legal holds, and record management
        • Email enabled libraries
        • Unified user interface (Master pages, layouts, themes, and styles)
        • Reporting integration
          • Excel services
            • Better with PowerPivot (SQL Enterprise or BI)
          • SSRS
          • MS Access
          • PerformancePoint services
        • External lists and external chart web part
          • Using business connectivity services
        • MySites (personal web sites) and user profiles
        • MS Office integration
          • Including Office Web Apps (with MS Office volume license)
          • SharePoint Workspace for offline caching and synchronization
        • Plethora of third party products and solutions
        • Standardized skill-sets - by SharePoint focus
          • Ex: Architect, developer, analyst, admin, designer, end-user, bi analyst, librarian, etc.
        • Web Part Framework integration
          • This is also available in ASP.Net, but does not have audience integration and requires some master page work and is not as flexible for reuse and customization by end-users.
        • APIs: web services, client object model, sever object model, and PowerShell
        • MS Support
        • Load balanced, scalable architecture
        • COTS - little to no coding required for many solutions
      • Cons
        • Relational support limited
          • SharePoint supports lookups with referential integrity and reflected columns but does not support hierarchical/tree view and complex entity relationships without custom development
          • SSRS does not allow you to query with a join or union
        • System integration complexity
          • Integrating and maintaining SharePoint and related applications in your environment can be complex and requires a professional to do correctly.  This can be mitigated by using a hosted SharePoint provider.  This admin level complexity is greatly outweighed by SharePoint's inherent functionality.
        • Performance
          • You can't optimize the performance as well as with a SQL database.  If your system is highly transactional, consider moving these pieces to SQL and front-ending in SharePoint
        • New skill set to utilize fully
          • SharePoint is still in the early stages of user adoption and training.  Many users will need to be trained to understand how best to use SharePoint.
        • Storage hungry
          • SharePoint solutions with document libraries can eat up disk space faster than a file share.  Make sure to plan SQL capacity and possibly Remote Blob Storage
        • Wildfire effect
          • If proper governance plans, quotas, IT professionals, and permissions aren't in-place, SharePoint training and support needs may surpass the IT department's ability to provide
        • Initial cost
          • Initial costs (server licenses and CALs) should be surpassed by reduced development costs and increased productivity. 
          • Search Server 2010 Express (SharePoint Foundation 2010 w/ advanced search)  is available for low cost solutions.  This will not have all the features listed above.
        • Not easy to synchronize functionality and content across distributed farms, sites, and lists
          • If you plan to utilize site or list templates, you must have a plan to integrate new features into sites after they have been created.  Data migrations, schema changes, and feature additions must be addressed in a solution package or powershell script.
        • Troubleshooting bugs and limitations
          • The more you use SharePoint, the more you will run into its limitations and bugs.  Troubleshooting issues is usually not straightforward and requires SharePoint knowledgable IT staff and/or many hours on the support line.  Fortunately, limitations are very often overcome by community and third party products and are a google search away.  See the rest of my blog for many of these bugs, limitations, and workarounds.
        • Easy to poorly architect a solution
          • With great ease of implementation, comes incredibly horrible solutions
            • Generally, do not:
              • Use folders
                • unless they are doc sets, email enabled folders, or OneNote sections
                • folder level security and explorer view needs are a possible exception
              • Copy/move documents unless you have a good reason
                • Utilize in-place publishing, versioning, security, and filtered views whenever possible
              • Overwrite the standard list/library CRUD forms
                • you can add to the pages, just don't remove the dynamically generated form web part
                • Try to use custom fields, third party products, or views to implement custom functionality within a column
              • Use too many site collections
                • Site collections isolate functionality.  Only split if you are sure there will be little crossover in SharePoint functionality.  Search will work across site collections.
              • Use too many sites
                • Sites should map to your main navigation, you don't want too many at each level
                • The exception would be for dynamically generated templated sites, but you would need to implement code for instantiation, navigation, and disposal.
                  • Ex: Project sites and my sites.
              • Use too many lists/libraries
                • Items with similar metadata and security should be in the same library and separated by content type or metadata values.
              • Develop a custom solution that can be addressed using native SharePoint functionality
            • Generally, do:
              • Have a seasoned SharePoint specialist gather requirements and architect a  solution
                • This person should know all the dos and don'ts
              • Use site content types and site columns
                • Define site columns and content types at the lowest level site needed to encompass all sub-sites where they will be used
              • When custom development is needed
                • Use javascript, ajax, and jquery
                  • but not for security
                • Use PowerShell for administrative functions
                • Build SharePoint Designer workflows
                • Build Visual Studio workflow actions
                • Build Visual Web Parts
                • Build EventHandlers
                • Package and deploy visual studio solutions as a .wsp
                • Be careful with performance on the above
                  • Dispose items properly
                  • Cache any collection references, don't use the index
                    • Ex: Don't use splist.items[x], instead use getitembyid or equivalent
              • Perform user testing
              • Use lookup lists and columns
              • Performance testing
              • Disaster recovery testing
                • Backup plans are useless without successfully tested recovery plans

      Wednesday, March 21, 2012

      #SharePoint Lookup Column DefaultValue Datasheet View Bug

      Scenario
      • You have set a Lookup Column's default value property via code
        • There is no way to set this via the SharePoint UI with the exception of the workaround to default the first item in the lookup by making the column required
      • You receive the following errors
        • "The text entered for ColumnName isn't an item from the list." dialog box
        • The spreadsheet will not save the row and an invalid entry window will pop up

      Side Note

      I have developed a SharePoint solution that will allow a user to specify column defaults from a root site list for all instances of a Site Column within a specified site. For example, a company has several offices that each have a category that may change.  Each office has it's own team site. Every document and list item in the company must also have the office category populated for filtering and searching.  The user would set the office category from an office list at the root site which includes the office team site url, at that time, my tool updates the default value in each list/library where that site column is used within that team site.  If you would like more info, please comment to this post or contact Kiefer Consulting.

      Issue
      •  Datasheet view does not work properly
        • You will run into errors if any of the following are the case
          • The client is running Office 2010 64bit with the 2007 Office System Driver: Data Connectivity Components workaround
            • The name and id are swapped in this case.  If you set the defaultvalue to the backwards combo the default will work for this client configuration but will not work with the standard new item form or other client configurations.
              • Ex: "Name1;#1"
          • The client is running an older version of Office
          • A defaulted lookup is multi-select
        • You may run into errors if the following is the case
          • A defaulted lookup is not visible within the Datasheet view
      Resolution
      • There is only one unique circumstance where Datasheet view will work with standard formatted defaults
        • Office 2010 32bit is installed on the client
        • The lookup columns are single-select
        • All defaulted columns are visible within the Datasheet view
      • To code for maximum datasheet support, you must use a repeated id format workaround
        • Ex: spfieldlookup.defaultvalue = "1;#1;#2;#2"
        • This will solve the "The text entered for ColumnName" issue for multi-selects and non-visible fields in Office 2010 32bit
          • This will also work for Office 2007 for single-select columns, and non-visible multi-select fields.  You will still get the error for visible multi-select fields
        • The side effect to this format is that the id value will be visible, instead of the display value, until the user moves off the row.

      Monday, February 27, 2012

      SharePoint 2007 to 2010 Help Desk Upgrade

      Scenario
      • You have installed the HelpDesk Fab 40 Template
      • You are performing a database attach upgrade from SharePoint 2007 or WSS 3.0 to SharePoint Server or Foundation 2010 and have run test-spcontentdatabase
      Issue
      • The test-spcontentdatabase report contains the following errors (the cooresponding feature names have been added):
        • Category        : MissingFeature - HelpDeskModules
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-02cb-4f87-bb11-1ffde748a953].
          Remedy          : The feature with Id 75a0fea7-02cb-4f87-bb11-1ffde748a953 is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances, HelpDeskServiceRequestsList
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-fe9d-4119-9615-2c2ef22d6fdb].
          Remedy          : The feature with Id 75a0fea7-fe9d-4119-9615-2c2ef22d6fdb is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances, KnowledgeBaseKeywordsList
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-12fe-4cad-a1b2-525fa776c07e].
          Remedy          : The feature with Id 75a0fea7-12fe-4cad-a1b2-525fa776c07e is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances, HelpDeskTasks
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-3b2a-4838-8a0c-57ba864feed3].
          Remedy          : The feature with Id 75a0fea7-3b2a-4838-8a0c-57ba864feed3 is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-97c5-4487-88e4-70fde8f79b25].
          Remedy          : The feature with Id 75a0fea7-97c5-4487-88e4-70fde8f79b25 is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances, HelpDeskSupportFaqList
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-70e3-40b1-b395-c06f85d0d158].
          Remedy          : The feature with Id 75a0fea7-70e3-40b1-b395-c06f85d0d158 is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskExpertsList, HelpDeskListInstances
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-e63b-4059-8f5a-ce9cbbadad2a].
          Remedy          : The feature with Id 75a0fea7-e63b-4059-8f5a-ce9cbbadad2a is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary.
        • Category        : MissingFeature - HelpDeskListInstances
          Error           : True
          UpgradeBlocking : False
          Message         : Database [MOSS_ContentDB] has reference(s) to a missing featu
                            re: Id = [75a0fea7-d31d-491a-9177-f0e461a81e3f].
          Remedy          : The feature with Id 75a0fea7-d31d-491a-9177-f0e461a81e3f is r
                            eferenced in the database [MOSS_ContentDB], but is not instal
                            led on the current farm. The missing feature may cause upgrad
                            e to fail. Please install any solution which contains the fea
                            ture and restart upgrade if necessary
      • There will also be some MissingSetupFile - Need to install messages as well.
      Resolution
      • The following solution is to get existing sites working.  To create new sites using the fab 40 templates, you may download and install the 2010 upgraded versions
        • I would recommend starting from a blank site template to build a tailored solution instead of using these templates due to the issues we've had modifying and upgrading them
      • The solution is to copy and then install the missing features
        • Copy the erroring feature folders from the 12 hive on the 2007 server to the 14 hive on the 2010 server
          • ...\12\template\features
          • ...\14\template\features
          • The ones we copied were: HelpDeskExpertsList, HelpDeskInIssuesList, HelpDeskListInstances, HelpDeskModules, HelpDeskServiceRequestsList, HelpDeskSupportFaqList, HelpDeskTasks, HelpLibrary 
        • Install the features on the 2010 server from PowerShell (SharePoint 2010 Management Shell)
          • Ex: install-spfeature -path "helpdeskservicerequestslist"
            • Do this for each of the folders copied earlier

      Wednesday, February 15, 2012

      Android: Upload documents, images, list items, or metadata to SharePoint

      Scenario
      • You are developing an Android OS application on an Android tablet or Android phone and need to upload a document or photo to a SharePoint list or library.
      Issues
      • NTLM authentication is not natively supported
      • SOAP protocal is difficult to implement
      • REST interface is limited
      • Need to batch upload multiple documents and set metadata while reducing bandwidth
      • Need to thread multiple uploads
      Resolution
      • Kiefer Consulting, Inc. has experienced SharePoint and Mobile development teams that can help address these issues.

      Tuesday, November 15, 2011

      SharePoint 2010 SQL AutoGrowth Settings

      Scenario
      • You would like your SharePoint 2010 and Reporting Services (SSRS) databases to perform well by avoiding excessive database auto-growth and disk fragmentation. Note that this is in addition to other SQL performance tuning steps such as splitting up the tempdb across physical files and optimizing SQL Server disk access speeds.
      Solution

      Note: The following settings are initial baselines.  You should adjust the Initial Size and Autogrowth settings appropriately.  Monitoring and reporting on auto-growth is vital to this process.

      Also, make sure you have a SQL Server Maintenance plan in-place to backup your transaction logs every 5 to 60 minutes.  If you don't do this, you must do full backups from SQL Server, not SharePoint to avoid using up all your disk space.  The interval chosen for you transaction log backups will be the maximum data loss interval in-case of failure.
      •  Change Initial Size and Autogrowth Settings
        • Right click the database in SQL Server Management Studio
        • Click Properties
        • Select Files, change as in the table below, and click OK
          • If blank, leave as-is or set to the auto growth setting
      Database
      File
      Initial Size
      Autogrowth
      master
      Data
      10MB
      10MB
      Log

      10MB
      tempdb
      Data
      20MB
      20MB
      Log

      10MB
      spfarm_AdminContentDB
      Data
      500MB
      100MB
      Log

      10%
      spfarm_BusinessDataCatalogDB
      Data
      10MB
      10MB
      Log

      10MB
      spfarm_ConfigDB
      Data
      250MB
      100MB
      Log
      500MB
      50MB
      spfarm_EnterpriseSearch
      Data
      50MB
      20MB
      Log

      20MB
      spfarm_EnterpriseSearch_CrawlStore
      Data
      250MB
      250MB
      Log

      50MB
      spfarm_EnterpriseSearch_PropertyStore
      Data
      50MB
      20MB
      Log

      20MB
      spfarm_MetaDataDB
      Data
      50MB
      20MB
      Log

      20MB
      spfarm_MySites_Content
      Data
      250MB
      250MB
      Log

      100MB
      spfarm_PerformancePointDB
      Data
      50MB
      50MB
      Log

      20MB
      spfarm_ProfileDB
      Data
      100MB
      50MB
      Log

      20MB
      spfarm_SecureStoreDB
      Data
      10MB
      10MB
      Log

      10MB
      spfarm_SocialDB
      Data
      10MB
      50MB
      Log

      30MB
      spfarm_StateServiceDB
      Data
      100MB
      20MB
      Log

      20MB
      spfarm_SyncDB
      Data
      100MB
      20MB
      Log

      20MB
      spfarm_UsageAndHealthDB
      Data
      150MB
      50MB
      Log

      20MB
      spfarm_WebAnalyticsReportingDB
      Data
      20MB
      20MB
      Log

      20MB
      spfarm_WebAnalyticsStagingDB
      Data
      20MB
      20MB
      Log

      20MB
      spfarm_WordAutomationDB
      Data
      20MB
      20MB
      Log

      20MB
      spfarm_WWW_Root_Content
      Data
      1,000MB
      500MB
      Log
      100MB
      100MB
      ReportSerer
      Data
      50MB
      50MB
      Log

      20MB
      ReportServerTempDB
      Data
      20MB
      20MB
      Log

      10MB