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

Monday, August 6, 2018

Use a JSON file in a SharePoint Library

Scenario
  • You want to utilize a JSON file uploaded by an automated process to a SharePoint Document Library
  • In this case we will use the SiteAssets (Site Assets) document library in an Office 365 SharePoint Online (O365) site
Issue
  • If you use a direct path to the file you get the "Sorry, something went wrong"  "File Not Found." error
    • Ex: https://mycompany.sharepoint.com/sites/MySite/SiteAssets/MyFile.json
  • If you click on the file or get a link to the file you are given a URL to an AllItems display form which renders a file editor, but will not grant access to the JSON via script
    • Ex: https://mycompany.sharepoint.com/sites/MySite/SiteAssets/Forms/AllItems.aspx?id=%2Fsites%2FMySite%2FSiteAssets%2FMyFile%2Ejson&parent=%2Fsites%2FMySite%2FSiteAssets
Resolution
  • Using the Download button and Fiddler (or IE dev tools / network), you can identify the correct URL to access the raw JSON file.
    • Look for the HTTPS GET for download.aspx
  • Alternatively, you can use the following URL format and replace mycompany, MySite, and MyFile text with your own values:
    • https://mycompany.sharepoint.com/sites/MySite/_layouts/15/download.aspx?SourceUrl=%2Fsites%2FMySite%2FSiteAssets%2FMyFile%2Ejson
      • Note: This is for a site at /sites/MySite.  You may need to modify this path.
  • If using JQuery, here is some code to get it:
$(document).ready(function () 
{
$.ajax({
type: "GET",
url: "/sites/MySite/_layouts/15/download.aspx?SourceUrl=%2Fsites%2FMySite%2FSiteAssets%2FMyFile%2Ejson",
success: function(result)
{
            console.log(result[0].property1+ " - " + result[0].property2);
}
});
});

Wednesday, July 25, 2018

SharePoint Column Validation - Is Numeric

Scenario
  • You want the Title field to be an integer only.
Issue
  • The Title field cannot be typed as an integer using the standard list administration UI
  • The column validation in SharePoint is not straightforward
    • ISNumeric([Column Name]) does not work as it always sees the parameter as text
      • You have to add 0 to get a numeric value
Resolution
  • Use this format for the column validation to correctly identify an Integer
    • =IFERROR(INT([Column Name]+0)=[Column Name]+0,FALSE)

Monday, May 21, 2018

OneNote Compliance, Records Management, and Governance - O365

Scenario
  • OneNote (part of the Office 365 suite of tools) is used to store information that may be considered records (official information)
  • Your compliance or governance teams may want retention, legal holds, or other policies configured on these records
Issues
  1. Mixed Content: OneNote notebooks contain mixed content with differing record policies.
    • Ex: Meeting minutes in one section, project info in another, and issues in a third section.
    • You cannot apply policies at the page level.
    • Note: This issue is the same as any other document containing mixed content (Word, Excel, etc.), however it is easier to use OneNote in this manner.
  2. Time Span: OneNote notebooks contain content spanning multiple days, months, or years
    1. This means disposition policies may not apply correctly, delaying or accelerating policy dates
  3. Legal Holds: Legal holds may inadvertently block an entire notebook from being editable
  4. Incompliant Locations: If  OneNote usage is discouraged or blocked, records are more likely to end up in  incompliant locations and users may experience broken integration features
    1. Incompliant alternatives: Notepad saved locally, Evernote, cell phone pictures and voice memos (Office Lens), emails, other online services, a personal OneDrive OneNote account, or a locally stored OneNote
    2. To avoid OneNote, users would also need to ignore the extensive OneNote integration features provided in Outlook, Windows, and the other Office products.
    3. There is not a good alternative note-taking tool that would better meet compliance policies.
Solutions

1. Mixed Content

OneNote notebooks with records should live in SharePoint, not in OneDrive or on a file share.
  • SharePoint allows for version tracking at the library level
    • Note: This is in addition to the limited OneNote versioning.
  • SharePoint also allows content policies to be applied at the section or Notebook level
OneNote notebooks with differing compliance policies should be split into separate notebooks
  • The policies should then be applied at the notebook level

2. Time Span

Notebook policies should be applied based on the parent SharePoint site policy whenever possible and should be defined based on the overall work being done. 
  • Example: A notebook for a project would last as long as the policy for the entire project.
  • Example: A team site notebook would expire when the team was disbanded.
  • Example: A department level knowledge-base notebook should not auto expire unless the department goes away.  A separate policy for archiving historical content can still be put into place.
Users can also be trained to export and archive specific content using any time frame required by your policies.  Users may automatically be assigned tasks to remind them to do this.
  • Example Policy: Meeting minutes should be exported quarterly to PDF format and minutes deleted from the notebook for the prior quarter.
  • Example: Project notebook should be exported yearly to XPS or PDF formats.

3. Legal Holds

For legal holds that block edits, records living in OneNote should be exported to an appropriate format (PDF, Word, etc.) and the hold should be applied to the exported document which would then be the official record and not block additional modifications to the entire notebook.  An alternative approach is to export the entire notebook and place a hold on the exported copy.  This issue applies to all document types that are actively used, but may be more impactful for OneNote if mixed content is contained in the notebook. 

4. Incompliant Locations

The best solution is to provide the user with compliant locations that are easy to use.  This can be done by provisioning SharePoint sites and OneNote notebooks for common records management use cases.  In this way, notebooks will already be split by appropriate policy groupings and correctly configured for versioning and compliance policies.

Restricting usage and adherence to best practices is the hardest to control and must be enforced through user training.  Some incompliant locations may be blocked by IT through firewall rules, but users can always get around these by using their own mobile devices.

Monday, November 20, 2017

Deploy JavaScript to a Site Collection or Web in Office 365 or On Premises + Dynamic Navigation Link

Scenario
  • You have some JavaScript you'd like to inject into a page and want the simplest method of deploying it to all pages within a Site Collection or Web.
Issue
  • You can do this via custom master pages, but then you break any future upgrades from Microsoft
  • You can also do this via a Sandbox code solution, SharePoint Framework, or a SharePoint Add-In, but these are all overly complex for this simple task and may not work in some environments due to incorrect environment configurations
Resolution
  • The simplest, fully supported way to do this is via a User Custom Action ScriptLink
  • John Liu has a nice UI tool to simplify registering your code with each site/site collection
Example
  • The following code example injects simple Javascript into each page to add a dynamic link to the left navigation menu (quick launch)
  • I like to put these in Site Assets at the Site Collection root.  If you don't have a Site Assets library, you can create one by opening the site in SharePoint Designer and double clicking the Site Assets link.  You can also do this by enabling any feature that utilizes the Site Assets library.  Otherwise, you can use a different library that everyone can read from.
  • You will need the following 3 files.  These should be saved into the Site Assets library at the site collection root site.
$(document).ready(function(){ 
 //Fixes Chrome Scrolling problem and load of ECMAScript 
 if (typeof(_spBodyOnLoadWrapper) !== 'undefined'){
     _spBodyOnLoadWrapper(); 
     
    console.log('test');
 MenuLastLI = $('#zz14_RootAspMenu li:last');
 MenuLastLI.before('
<li class="static"><a class="static menu-item ms-core-listMenu-item ms-displayInline ms-navedit-linkNode" href="http://www.votematrix.com/"><span class="additional-background ms-navedit-flyoutArrow"><span class="menu-item-text">CUSTOM LINK</span></span></a></li>
');
 }; });
  • Click to open John Liu's configuration page (configure-page.aspx)
  • Configure jQuery as Sequence 900 (so it loads first).  Install Site Collection.
  • Configure JSTest.js as Sequence 2000 (Loads after jQuery)
  • That's it.  The link should show on the left nav.

Tuesday, November 15, 2016

SharePoint 2013 - Redirect to View Item Form on New Item Save

Scenario
  • You are saving a new record and want the user to be redirected back to the view item form to review the item.  This will allow the user to start a workflow or perform another action on the ribbon without the need to find the item in the list or library view.
  • Need the solution to use JSOM (client side script) only.  
  • Should work in Office 365, SharePoint Online, and On-Prem.
Issue
  • By default, SharePoint redirects you to the List View you most recently came from.
  • There is no out of the box setting for this.
Resolution
  • We solve this by adding a redirect script to each list view page that does the following:
    • Check if a new item was added by the current user.
    • Check and create a short term cookie to determine if they have already been redirected for this item
    • Redirect the user if they haven't already been
  • First add the following Javascript file to your SiteAssests/js folder.  
    • Create the "js" folder if it's not already there.
    • Replace the ALLCAPS hard coded values with appropriate values.

SiteAssets/js/SP.RedirectOnAddItem.js

var siteUrl = '/sites/SITENAME';

function createCookie(name,value,minutes) {
    if (minutes) {
        var date = new Date();
        date.setTime(date.getTime()+(minutes*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

function RedirectOnAddItem() {
var clientContext = new SP.ClientContext(siteUrl);
var web = clientContext.get_web();
this.currentUser = web.get_currentUser();
clientContext.load(currentUser);
clientContext.executeQueryAsync(
Function.createDelegate(this, onUserQuerySucceeded),
Function.createDelegate(this, onQueryFailed)
);   
}

function onUserQuerySucceeded(sender, args) {
    var email = this.currentUser.get_email();
    var userid = this.currentUser.get_id();
    var loginName = this.currentUser.get_loginName();
    var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('LISTORLIBRARYNAME');       
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name = "ID" Ascending = "FALSE"/></OrderBy><Where><Eq><FieldRef Name="Author" LookupId="True"/><Value Type="User">' + userid  + '</Value></Eq></Where></Query><RowLimit>1</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);
       
    clientContext.load(this.collListItem);
       
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onListQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));  
}

function onListQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
       
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id();
        listItemInfo += '\nAuthor: ' + oListItem.get_item("Author").get_lookupValue();
        var diff = Math.abs(Date.now()) - new Date(oListItem.get_item("Created"));
        var minutesPassed = Math.floor((diff/1000)/60);
        listItemInfo += '\nCreated (Minutes Ago): ' + minutesPassed ;
       
        if (oListItem && minutesPassed < 2) {
//alert(listItemInfo.toString());
if (!(readCookie('PANnewID') == oListItem.get_id().toString())){
createCookie('PANnewID', oListItem.get_id().toString(), 2);
window.location = "/sites/SITENAME/Lists/LISTORLIBRARYNAME/DISPLAYFORMNAME.aspx?ID=" + oListItem.get_id();
}
}
    }
}

function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
  • Finally, add the following code to a Script Editor web part on each List View page where the user would normally be redirected.
<script src="/sites/SITENAME/SiteAssets/js/SP.RedirectOnAddItem.js"></script>
<script type="text/javascript">ExecuteOrDelayUntilScriptLoaded(RedirectOnAddItem, "sp.js");</script>

Tuesday, July 26, 2016

Is SharePoint a true Document Management System (DMS)? Rumor explored.

In my 10+ years working with SharePoint I've heard 3 individuals declare that SharePoint isn't "a true Document Management system".  When questioned about this they bring up instances of poorly architected solution issues or performance limitations as the justification.  I too have experienced poor performance, bugs, limitations, and have inherited poorly architected SharePoint solutions; but my tendency is to address the underlying issues or engineer proper solutions rather than discounting the software out-of-hand.  This leads me to believe that there are some outdated primary sources for this rumor that were introduced outside of these users' own experiences.  This article will look into some of these sources, listing their bias.  I will also post some refuting articles.

Disclaimer: Obviously my bias is towards SharePoint as I am very familiar with its capabilities and have used it to implement more than 40 document management solutions with each one exceeding its unique requirements

Sources of Rumor (SharePoint is not a DMS)
  • eFileCabinet - SharePoint competitor (2010)
  • ContentVerse - SharePoint competitor (2014)
  • Fishbowl Solutions - Oracle WebCenter SharePoint Connector provider (2012?)
    • Has a good overview of the history of SharePoint issues pre-2010 but is mostly propaganda for keeping WebCenter and using their connector instead of migrating everything to SharePoint
  • Reva Solutions - Alfresco (SharePoint Competitor) ISV (2015)
  • DocFinity - SharePoint competitor
  • Lexmark's In Context - Perceptive Software (SharePoint Competitor - now Lexmark) interview  (2011)
Refutations of Rumor (SharePoint is a DMS)
Conclusion

SharePoint (2007 or later) is a bonafide Document Management System with its own unique advantages and disadvantages.  The rumors appear to have been initiated by competing vendors as marketing propaganda from sources with limited knowledge of SharePoint's capabilities or from early reviewers who balked at the new technology and its use of third-party vendors for imaging and other advanced functionality.  It's fair to mention that SharePoint 2007 (pre-2010) was missing some of the more enterprise scale features of a DMS, but even those features were not mandatory to consider that version a "true DMS" as typically defined unless third-party products were excluded from use.

The closest you can get to the original rumor while maintaining the truth is that "SharePoint is not just a true Document Management System." Even the terms "Document Management System" and "File Management System (FMS)" are outdated.  "Enterprise Content Management System" (ECM, ECMS, or CMS) is now the preferred moniker to describe platforms that do more than just manage files and documents.  SharePoint, being one of the most widely used ECMs, benefits from the fact that it also takes on collaboration, intranets, extranets, (WCM) web content management, workflow, insights, enterprise search, and more.  It does so while maintaining one of the largest ISV (partner) communities of any ECMS, including most of the other ECM vendors who are struggling to maintain their relevance by integrating with SharePoint and Office 365.

This brings about the final argument against SharePoint, "it's not specialized only for document management, thus taking on too much and spreading too thin."  I agree that if the entire SharePoint team focused on just the DMS side, then it would be more feature rich in that area.  However, the true benefit of SharePoint over other DMSs is that it is a multi-tool that excels in many areas, each with fringe benefits to document management.  This is one of the primary reasons for the mass migration from single-focus systems to broader platforms.

Note: The meaning of "true DMS" is subjective, therefore if you define a "true DMS" to include a specific limitation (ex: Must be able to render historical versions in search without exposing the versioned documents in a library or folder - SharePoint Limitation), then you can justify your claim.  Just realize that anyone else can do the same to your preferred system (ex: Must provide secure co-authoring capabilities in a web-based note-taking client on MS, iOS, and Android mobile devices - available only with SharePoint).

Feedback?

Please contribute comments below listing specific features that your favorite CMS has which SharePoint may not.  I will do my best to provide feedback on its support within SharePoint.

Thursday, July 7, 2016

Hacking the Datasheet View / Quick Edit in SharePoint 2013 to display in an IFrame

Scenario
  • I created a document library list view in datasheet (quick edit) mode for display in a custom popup dialog in a SharePoint 2013 Visual Studio project "application page".
    • This grid was used to make last minute changes to metadata values of selected items before continuing an existing process in a larger solution.
  • I needed to display the list view using an IFrame pointing to a URL filtering the values by IDs.
  • This was a large list exceeding the list view threshold
  • I needed to hide all chrome, navigation, ribbon, and other elements surrounding the list view web part.
  • I needed to call a JavaScript function outside the list view page from a button on the list view page.
  • Note that I couldn't figure out how to convert the application page into a web part page which is why the list view web part is included via an IFrame rather than embedded directly into the page, however the same issues would apply except without the need for a hidden button or the chrome trimming.
  • An alternative to using the list view web part in datasheet mode would be to use a datagrid control and manage the CRUD programatically, but this would be harder to maintain if the SharePoint schema changed down the line and would require much more coding to implement correctly.
Issues
  • In Datasheet view the last record edited (or possibly the only record) will only save if you select another record (which you can't even do if there's only one record). This was an issue for 2 reasons:
    • There was a custom button in the app that when clicked would continue the process without saving the record that was just edited.
    • The stop editing functionality which would normally be used to save the last record resulted in a list view threshold error dialog due to a bug in the datagrid / Quick Edit mode when in a folder or using filter parameters and using the "Stop editing this list" link because it forwards to a standard view without the filter or folder.
Resolution
  • Implementing the IFrame: A bug in Visual Studio .Net 4.5 framework IFrame web control requires the control to be instantiated manually in the code behind rather than automatically in the designer code file
protected global::System.Web.UI.HtmlControls.HtmlGenericControl iframe1;
  • The IFrame was added to the application page like so:
 <iframe name="iframe1" id="iframe1" ClientIDMode="Static" runat="server" height="400" width="400" seamless" />
  • The IFrame was instantiated dynamically using server side code that set the filter parameters in the query string like so (itemids are in a semicolon delimited format):
iframe1.Attributes["Src"] = "/sites/SiteName/LibraryName/Forms/DatasheetViewName.aspx?IsDlg=1&FilterName=ID&FilterMultiValue=" + itemids;
  • I hid a button (id = btnCopy style:display = none) on the application page which ran the application code and added the following JavaScript function to the application page so that it could be called from the list view page from within the IFrame.  Note the timed delay here as I'll explain this later.
<script type="text/javascript">
    function triggerBtnCopyClick() {
        setTimeout(function () { document.getElementById('btnCopy').click(); }, 1200);   
    }
    
    ....  existing code used by the application page that handled the btnCopy click event.
</script>
  • I added a script editor web part to the Datasheet List View page and configured it to remove the chrome elements still remaining after IsDlg=1 did its work.  Note that your class names may be different based on the WPQ number (find using your browser's developer tools).
    <style>
    #s4-ribbonrow{display: none;}
    #Hero-WPQ2{display: none;}
    #CSRListViewControlDivWPQ2{display:none;}
    </style>
    • Finally, I added the button and code to call the parent page's triggerBtnCopyClick code.  You will need to find the GUID of your list view web part (webpartid) and plug it into the code.
      This is the part that involved hacking the datasheet view by finding the function calls the "Stop editing this list" button used to save the final changes and reusing them in my own code.  The downside to this is that the grid needs to be refreshed afterwards and takes a second to finish processing so I added a 1200ms delay into the triggerBtnCopyClick function above that processes the code after the save.
    <input type="button" id="SaveEdits" value="Save and Process" onclick="var gridInitInfo = g_SPGridInitInfo[('{WebPartID GUID HERE}')]; var ganttControl = window[gridInitInfo.controllerId]; var ganttControl = window[gridInitInfo.controllerId]; ganttControl.TryDispose(function(dlgReturnValue) {window.location.reload(false);}); this.style.display = 'none'; window.parent.triggerBtnCopyClick(); return false" />



    Wednesday, May 13, 2015

    SharePoint Saturday, Silicon Valley, 5/30/2015

    My Presentation
    Conference Link

    Tuesday, August 5, 2014

    AutoSpInstaller Notes

    Scenario
    • Using AutoSpInstaller to run a multi-server farm install.
    Issues
    • When provisiong the User Profile Service the second window pops up and immediately closes, then the main window eventually hits a Timed Out error
      • This was caused by the Farm account being unable to run PowerShell commands on the app server despite being configured correctly as local admin and having the log on locally permission
        • When running any command  as the farm account, the following error is displayed: "The term 'Get-ChildItem' is not recognized as the name of a cmdlet, function, script, ...."
          • 'Get-ChildItem' here could be any PowerShell command
      • This anomaly only occurred on the app server in the farm and only with the farm account, but unfortunately, the User Profile Service must be configured as the farm account.
      • The solution ended up being that the PSModulePath environment variable had been removed for the farm account.  We re-added and it ran fine.

    Wednesday, May 21, 2014

    SharePoint 2013 Virtual Development Environment Installation Guide - Part 1

    SharePoint 2010 dev server deployment guide can be found here

    Scenario
    Prerequisites
      • Your workstation must be running a 64bit processor with Hardware Virtualization enabled
      • You must have enough memory (6 GB), disk space (60 GB), and processor power (2 cores) to run the VM and hold all snapshots.  Disk space will need to grow as you add content.
        • I highly recommend running this VM from a solid state drive (SSD) for optimum performance.  Disk speed is the greatest limiter for performance and if your RAM is limited, then the SSD swap file will help compensate.
      • You must have access to and appropriate licensing for above products
        • ex: MSDN Subscription
      • You must have time (about 8 hours) to install everything.
        • Hints:
          • Look for "Wait" for good break points
          • Snapshots can be used to create other virtual machines or to test minimally installed environments
          • Hyper-V, VirtualBox and VMWare specific settings will be called out
    How To
    • Download the Software Listed Above - Wait
    • Enable Windows 8 Hyper-V, install VMWare, or install VirtualBox and the Extension Pack
    • Hyper-V: Enable a Shared/NAT virtual switch
      • ICS can only be set up from one network card at a time in Windows 8 so if you have a laptop and switch between WiFi and Ethernet you will need to change the ICS if you need the VM to access the internet
    • Create a new virtual machine named "sp2013"
      • Hyper-V: Generation 2 option
      • 6144 GB RAM (not dynamic)
      • Network: Use a Shared/NAT connection
      • 125GB dynamically expanding boot hard disk
        • You will likely use 45GB of this without any content
      • Increase the processors: 2-8 range
      • Mount the Windows Server 2012 R2 ISO
      • VirtualBox: Enable RDP support
    • Start the sp2013 virtual machine and boot from DVD
      • Hyper-V: Hold down a key to boot to DVD
        • Don't wait till the prompt to "Press a Key" or you will get this error: "Boot Failed. EFI SCSI Device."
    • The Windows Server 2012 R2 installer should begin
      • Select Windows Server 2012 Standard (Server with a GUI)
      • Select Custom (new install)
      • Short Wait
    • Set a new administrator password
      • pass@word1
    • Install VM guest tools (none for Hyper-V)
      • VirtualBox: VirtualBox Guest Additions
        • Auto Reboot
      • VMWare: VMWare Tools
    • Configure Server Manager: Local Server properties
      • Rename the server to sp2013 (Both the name and the computer description)
        • Note: If you forget this step, you will have a randomly named server.
          I have included instructions for aliasing and configuring a randomly named server
        • Restart later (so we can shut down instead)
      • Enable Remote Desktop
      • Disable IE Enhanced Security Configuration
    • Shut down and take a Snapshot named "Windows Install" then boot the machine
    • Server Manager Dashboard: Add Roles
      • Server Roles
        • Active Directory Domain Services
          • Add features and Include management tools
        • Application Server
        • DNS Server
          • Add features and Include management tools
          • Ignore Static IP warning
        • Web Server (IIS)
          • Add features and Include management tools
      • Features
        • ASP.NET 4.5 (under .NET Framework 4.5)
        • Telnet Client
          • SMTP connectivity troubleshooting tool
        • User Interfaces and Infrastructure
          • Desktop Experience
            • Also adds Ink and Handwriting Services
      • Application Server / Role Services
        • Web Server (IIS) Support
          • Add features and Include management tools
      • Allow auto-restarts then Install
      • Short Wait
      • Click "Promote this server to a domain controller"
        • Select "Add a new forest"
        • Root domain name: sp.local
        • Next
        • Forest and Domain functional level: Windows Server 2012 R2
        • Password: pass@word1
        • Continue pressing Next until Install
          • Short Wait for NetBIOS domain name to be recognized and for Prerequisite check
          • Ignore the 3 warnings
        • Install
        • Short Wait
        • Accept reboot prompt
        • Log back in as Administrator
    • Server Manager Dashboard: Add Roles
      • Features
        • ASP.NET 3.5 Features
        • Before installing specify the following alternate path
          • D:\sources\sxs  (where D: is the Windows Server DVD drive)
    • Verify Internet connectivity by opening Internet Explorer and browse to Bing
    • Disable SmartScreen Notifications from the Action Center
    • Windows Update: Turn on auto updates
      • Install Updates and Wait
      • Reboot when prompted
      • Some errors in windows update may occur as they are installed and the server is rebooted. Here are some solutions:
        • Several updates fail and require reboots
          • Open System Configuration (msconfig)
          • Check Selective startup
            • Uncheck Load Startup items
          • OK
          • Restart when prompted
        • Hyper-V: Security Update for Windows Server 2012 R2 (KB2920189) Failed 800F0922
          • Only occurs on Gen 2 Hyper-V with Secure Boot
          • Temporarily disable Secure Boot in the VM settings while installing the update
    • Open Active Directory Administrative Center (Pin to desktop and Start menu)
      • Administrator account
        • Account / Password Options: Password never expires
        • Organization / Email: administrator@sp.local
      • Create a user in the Users OU
        • Full Name: User
        • User SamAccount: sp\user
        • pass: same as Administrator password
        • Account / Password Options: Password never expires
        • Organization / Email: user@sp.local
      • Add User to the Users group
      • Create a user in the Managed Service Accounts OU
        • Full Name: spservice
        • User SamAccount: sp\spservice
        • pass: same as Administrator password
        • Account / Password Options: Password never expires
    • Open Group Policy Management console
      • sp.local / Domains / sp.local / Domain Controllers / Default Domain Controllers Policy
      • Right click and Edit
        • Policies / Windows Settings / Security Settings / Local Policies / User Rights Assignment
        • Edit Allow log on locally
          • Add the Users group
    • Stop and Disable the following Services
      • DFS Namespace
      • DFS Replication
    • Shut down, snapshot "DC and IIS", and start virtual machine
    • Mount the SQL Server ISO to the VM DVD drive
    • Start SQL Server Setup 
      • Install Stand-alone
      • Use MS Updates
      • Ignore DC and Firewall warnings
      • All Features with Defaults
      • Continue
      • Server Configuration / Service Accounts
        • Use the same account for all SQL Server services
          • specify the sp\spservice account and password created above
      • Continue
      • Analysis Services Configuration
        • Account Provisioning
          • Add Current User
      • Reporting Services Configuration
        • Install only for both
      • Distributed Replay Controller
        • Add Current User
      • Continue then Wait
    • Shut down, snapshot "SQL Server", and start virtual machine
    • Open SQL Server Configuration Manager
      • SQL Server Network Configuration
        • Protocols for MSSQLSERVER
          • Enable Named Pipes
    • Restart the SQL Server (MSSQLSERVER) service
    • If your server is randomly named - not sp2013
      • DNS Manager
        • Forward Lookup Zones
          • sp.local
            • Add a new alias
              • Name: sp2013
              • FQDN: Browse to splocal\servername
                • servername will be a randomly generated value
    • Mount the SharePoint Server 2013 iso
    • Start the Prerequisites installer
      • Run D:\Splash.hta (open with MS HTML Application Host)
      • Short Wait
      • Finish to restart
    • Start the SharePoint Install
      • Enter your Enterprise license key
      • Wait
      • Run the Configuration Wizard
      • Create a new server farm
      • Configuration Database
        • Server: sp2013
        • Name: SharePoint_Config
        • Username: sp\spservice
        • Password: same as above
      • Farm Security Settings
        • Passphrase: same as admin password above
      • Central Admin Web App
        • Port: 8000
        • Auth: NTLM
      • Wait
      • Finish
    • IE will open to the central administration website.
      • Join the experience program (or don't)
      • Start the wizard and configure as follows
    • Central Admin Initial Farm Configuration Wizard steps
      • Use existing managed account: sp\spservice
      • All items should be checked except for Lotus Notes
      • Next
      • Wait
      • Create Root Site Collection
        • Title: SP2013
        • URL: /
        • Experience version: 2013
        • Template: Collaboration \ Team Site
        • OK
          • If you encounter a  error, skip to the next step (AAM config) then delete the running timer job, restart IIS, and re-run the wizard from Central Admin
        • Finish
      • Open central admin (http://sp2013:8000) and add the following Alternate Access Mapping (AAM) internal URLs
    • Set the browser home page to http://sp2013
    • Configure Search from Central Admin
      • Central Admin \ Manage service applications \ Search Service Application (first one)
        • Content Sources
          • Local SharePoint Sites
            • Incremental every 30 minutes (or other value here based on needs)
              • Recommend disabling incremental crawls for performance
            • Note: Continuous crawls will require more resources on VM startup
          • Start a full Crawl
    • Open http://sp2013 in IE
      • Add sp\administrator to the sp2013 Members group
      • Add sp\user to the sp2013 Visitors group
      • Validate that the following workset
        • Any workflow
        • Search scopes
        • My Sites and User Profile
    • Performance Tuning
      • Run the following PowerShell scripts (in SharePoint 2013 Management Shell)
        • Set-SPEnterpriseSearchService -PerformanceLevel Reduced
      • Disable the following system services unless/until needed
        • SQL Server Analysis Services (MSSQLSERVER)
          • From Automatic to Disabled
        • SQL Server Reporting Services (MSSQLSERVER)
          • From Automatic to Disabled
        • Optional (if you do not need SharePoint search and want to reduce memory footprint)
          • Remove the incremental crawl scheduled earlier
      • More tips from Andrew Schwenker
    • Shut down, snapshot "SharePoint Configured", and restart
    Optional Configurations

    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.

    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, 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