Highs, lows & random rants on SharePoint 2013 - Experiences from implementing a governance and quality management in SharePoint 2013. Presented at Norwegian SharePoint Community June 17th, 2013.
1. Highs, lows & random rants on
SharePoint 2013
IMPLEMENTING A GOVERNANCE AND QUALITY MANAGEMENT IN
SHAREPOINT 2013
NORWEGIAN SHAREPOINT COMMUNITY – 2013-06-17
6. File share, I loveth thee!
• Data stored in external system
• Exported as static HTML files to remote server, along with Diagrams (images)
• Exposing metadata as <META>
• Clickable <img> tags (image maps).
• Synced (RoboCopy) to server from static html files on a file share
• Imported to SharePoint and transformed
• Custom import job
• Publishing pages
8. Scrape, scrape, baby
• Processes and parses a set of files
• Generic processing and parsing
• Reading <META> template
• Determines what SPContentType the type and constructs typed objects.
• Specific parsing for certain objects
• E.g. Selecting a WorkflowDiagramProcessor
• Uses reflection
• Parses meta data values
• Maps META headers to properties by convention
• Specific mapping
• Cleans HTML
• Remove javascript
• Remove onclicks, table headers++
9. Object model cat walk
• POCO’s
• Puzzle Framework
• SharePointations
• Annotations
• Auto-generate stuff
11. Where is it?
Sites based on a blank template does not work out of the box – Won’t let you
create 2013 based workflows.
Enable-SPFeature -Identity WorkflowServiceStore –Url $yourUrl
12. Why don’t you love me?
At random times, workflows are getting cancelled
Details: System.ApplicationException: HTTP 401…
• User Profile Synchronization has to be started
• User Profile must exist for the user kicking of the workflow
13. You can’t handle the truth!
Workflow is suspended
Details: An unhandled exception occurred during the
execution of the workflow instance. Exception details:
System.ArgumentNullException: Value cannot be null
• Typically sending an e-mail fails as the user does not have e-mail address
• User is not synched to SiteUserInfoList with e-mail address
14. I don’t want to be approved!
• You want custom task outcomes
• No matter what the user picks as a result, the default outcome is returned in the
workflow, meaning option one - Approve.
15. You want an upgrade? – We’re all about SPD
• Remember to hit Publish before exporting
• Add a comment at the top for versioning
• Each export gives a new solution id, so no real version upgrade
• Deactivate the old feature, activate the new feature
16. 2013 Workflow’s – Yes, we do love you!
• Overall, much better design experience compared to 2010
• It is v1, we know it will be killer in v3, just don’t tell the customer
• Nintex anyone?
18. • Customer: We want CHARTS!
• Mikael: I’m NOT coding charts in ASP.NET!
• Mikael: How about the Excel Viewer Web Part?
• Customer: No, we only have Standard License.
• Mikael: CRAP!
• WAC: Hey, I can help
• Mikael: Of course! Because WAC in read-only mode is FREE, and
http://<ServerName>/_vti_bin/ExcelRest.aspx works just fine for
any SharePoint version (nothing needs to be enabled but WAC)
• Mikael: I’ll just whip up a custom web part for it!
20. Click jacking anyone?
• SharePoint 2013 by default prevents pages from being click-jacked/ iframed
• SharePoint 2013 by default does not encourage you to use different domains for
parts of your solution
• http://intranet.contoso.com
• http://collaboration.contoso.com
• http://my.contoso.com
• http://qms.contoso.com
• http://search.contoso.com
23. Users want to bookmark
• Feeds forgets when server runs out of memory – Veolocity Cache hooray!
• ..or when Velocity cache is reset
• Let’s follow the pages!
• Works just fine.. except…
• Our pages are on the format of E99829BB-70F3-4D72-980A-
E06D01FC1C83.aspx
• Feeds does not store the Title, but the Name field!
• JSOM to the rescue
• No default good grouping of what you have followed except
sites/documents/people/tags
24. JSOM is da shiznit!
• Rapid development and fun!
• At least three SP .js API’s who implement following
• Official API (sp.userprofiles.js)
• Page/list wrapper (followingcommon.js)
• Search wrapper (searchUI.js)
• OOB SharePoint does not check follow status on item load
26. Users want to see the world...
• A «360» view
• Automatically imported items (Processes)
• Documents
• Managed metadata
• Improvements (Relates to a process)
• Filter on «common» domain specific terms
• Business area or Region
27. The three leveled monster - Managed properties
• Site level, Site Collection level, SSA level
• Auto-generated properties
• Crawled
• Comes in «2»
• E.g. ows_q_DATE_ReportedDate, ows_ReportedDate
• Managed
• Always text!
• Don’t map to non-text columns
• Avoid auto-generation/mapping
• Script search setup
• Neat cmdlets
• *-SPEnterpriseSearchMetadataCrawledProperty , *-
SPEnterpriseSearchServiceApplication
28. Result sources
• Limit search to specific content
• Subset
• Content types +
• Easy administration from GUI
• Query transforms
• Preview
29. Result types and display templates
• Powerful feature
• Easy to get started
• Remember to press the button
31. Query rules and more
• The fun begins…
• Many ways to reach the goal
• Many errors in search along the way..
• 1 query rule to «rule them all»
• Promoted result blocks for each rs
• No good
• Global result source
• Distinct query rules
• One promoted block in each
32. Some quirks...
• Refiner on ContentType
• Application/xhtml [some newlines] MyContentType
• Not user friendly
• Use the builtin magic Managed property
• SPContentType
• Displaying a «User» field
• Shows the Claims identifier
• |Harald Fianbakken|8238229110120ACCE19192911;i0#;fianbakkenharald.fianbakken|harald.fianbakken@fianbakken.com|
• Fix by Javascript
• Check mapping order
• ows_Created_0x0020_by, Internal:105, Internal:3
33. …and we have more quirks…
• Managed properties not fetched
• Even when specified
• SPContentType is not returned in display template
• !retrievable
• Query rules not triggered
• But triggered when using the «preview».
• Result sources throwing exception, when used
• But working in preview
34. Lessons learnt...
• Avoid «complex» query rules
• 1 query rule per «result type»
• Create search schema on SSA
• If possible
• RAM
• Strange behaviors
• Crashes/query processing
• When in doubt; Reboot
38. Endless possibilities
• Requirement:
• «Our users need different forms for the Business area when submitting an item. The BA’s have
different fields required (and option) for when submitting an item, and different requirements when
editing the item».
• Solution:
• Use term store
• Add some custom coding
• Custom coding
• Dynamic populated dropdown lists and checkbox lists for the same SPField
• Add configurable options (properties) for each field
• Allowing a site collection admin (or term storeadmin) to customize the form
• Enforce «required» or hide fields in the different display modes.
• Automatically fill out values in form based on choices
• E.g. Selecting a «Improvement area» from a dropdown, sets another field by looking up the selected value
custom property
• Possible to port parts of code to delegate control.
40. Annie - The orphaned site-collection group
• Removing a site collection yields a orphaned group
• Not visible from GUI
• Interfers
• Accessable through Powershell
• Remove the old termstore
42. Get the right markup, get the markup right
• Twitter Bootstrap for SharePoint - http://bootstrapsharepoint.codeplex.com/
• Designers want to do HTML5/CSS3
• Customers want IE8
• Do NOT under-estimate the time needed to make your design fit in IE8 with
SharePoint overrides.
43. Mega menu script– out with the old
SP.SOD.executeFunc('sp.core.js', 'SP.UI.AspMenu', function() {
// Mega Menu
// Kill off SP's default menu hover script
SP.UI.AspMenu.prototype.showSubMenu = function () { };
});
45. Wrap-up
• Import data from file share to publishing pages
• Workflows 2013 style
• Office Web Apps (WAC) for charts
• Social following
• Search
• Managed meta data
• UI customizations
Create one global variable after the Assign task stepSet the global variable value to task outcome column explicitly.Mapped it with assigned task's TaskID variable.
Web Applications Companion
Nevnenoeomexplisitt loading a properties / strange behavior (lokalmaskin = working, server not loading properties unless explicitly specified..)