Tuesday, November 18, 2014

How can I use InfoPath to get KPIs in my library?


 
This post is an extension of a previous post about creating and using Key Performance Indicators (KPIs) in a SharePoint library, based on a calculated column. The follow-up question is, “Can I use InfoPath to set KPIs in SharePoint?”
 
The answer is “Yes, but... it takes a little bit of work.”
 

The Best Way To Get A Correlation ID Error Out of Your ULS Logs


One constant in the SharePoint world is that there are always multiple ways to do almost everything.  I can't recall the number of times I've heard someone in a meeting say "there's many ways we can skin that cat" when asked how to do something in SharePoint.  I'm not real well versed in cat skinning, but I get the point.

I work with clients and customers all over the world.  It's interesting to see all the different ways and free tools used to figure out what that pesky correlation ID that popped up is trying to tell us.  There are definitely a lot of ways to skin that particular cat.  The one I use unequivocally in every situation is merge-splogfile.  This is definitely not a brand new concept but it is new to most of the SharePoint professionals I speak with.  I'm not the first to blog about it but since it is still relatively unknown with those I speak with, and this blog has good viewership, I feel compelled to share.

When you run into a SharePoint page that errors and gives you a correlation ID, simply copy the ID to your clipboard, pop open a SharePoint Management Shell window and type in:

merge-splogfile -correlation pasteyourid -path filename.txt

Now, I like an organized server so all of my servers have an Errors folder created in the root of c where I can save these.  So my command looks like


 Once entered you will see the progress in the management shell window.


Most of the time just opening that text file in notepad is sufficient for seeing what happened.  If you need more detail you can open it in uls viewer or even excel.  Generally speaking I open the file in notepad, search for "unexpected" and can tell exactly what's wrong.

Not sold yet... if you are in a multi server farm, which WFE do you think recorded the error?  If you are opening the file with a uls viewer on a specific server, you basically have to guess unless you have something else in place.  The beauty of merge-splogfile is that you can run it from any server and it gathers data on that correlation ID from the entire farm.  That is a thing of beauty.

This command works on SharePoint 2010 and 2013.  For more information on merge-splogfile check out the msdn article here.

Tuesday, November 04, 2014

New White Paper: Cost-effective, Enterprise-ready SharePoint Extranets




A SharePoint extranet gives an organization’s employees, partners, vendors, and clients access to the specific information they need, when they need it.

In fact, the same things that make SharePoint a great intranet platform also make it a great extranet platform. But there is a problem.

While SharePoint is built for collaboration and contains built-in collaboration tools, IT professionals who attempt to implement SharePoint as an extranet quickly find out there are many hurdles to overcome.

In SharePoint, Microsoft’s extranet platform does not provide an easy way to: 

      Deploy an extranet
      Secure an extranet
      Manage an extranet
      Empower users to solve simple login issues or perform simple administrative actions for themselves
      Facilitate simple user-friendly access

A new white paper, “Providing Enterprise-ready and Cost-effective Extranets with SharePoint,” examines the kinds of business problems a SharePoint extranet can help an organization overcome and explains a way to overcome extranet hurdles, making extranet management and use secure, easy, and affordable.

It also looks at real-world challenges organizations face in deploying an extranet, and explains how an add-on solution called Extranet Collaboration Manager for SharePoint (ExCM) provides the tools that are absent in SharePoint out of the box but are necessary for an extranet to work optimally.

ExCM is a robust solution that numerous organizations worldwide have chosen to simplify and streamline the deployment, management, and use of their extranets.

SharePoint provides the extranet capability, and
ExCM provides the tools to make it smooth and efficient.

Easy collaboration and data-sharing with partners, clients, and vendors could save your company time and effort, and give it a competitive edge.

If your organization is considering deploying a SharePoint extranet, download this free, informative white paper and see the difference that a smooth and efficient SharePoint extranet can make.
 

Monday, October 27, 2014

SharePoint BI Basics: Set a KPI Column in Your Lists and Libraries as a Visual Reference


Business Intelligence is a hot button with most managers and executives these days, because the immediacy of having real-time data turned into actionable insights is priceless for strategic decision-making. In a recent class on “Business Intelligence Training – The Microsoft Self-Service BI Toolset,” one of our most popular courses, a student asked me an excellent question. With a little research, I came up with a better answer than I was able to give in class off the top of my head. So I thought I’d share it with you.
The question is, “How do I set a KPI (Key Performance Indicator) column for every object in my SharePoint list or library?” Our answer will be applicable to SharePoint 2010 and 2013, but I’ll be using screenshots from SharePoint 2010. 
Initially, I thought that this would require a hyperlink column that would need to be set by a workflow or some manual intervention.  Instead, I ran across this answer in a StackExchange discussion which shows that you can return html in a calculated column.  This means that our calculated column can not only do the evaluation of our conditions, but return the appropriate image for our KPI.  With a little more searching, it turns out that this solution has been around since SharePoint 2007 and just not used very much.  I think there are a lot of people interested in visual indicators who can benefit from this solution.
In my list (or library – both will work the same), I’m going to create a column to evaluate.  This will be my trigger to define which KPI will show up.  I’m going to make this column a choice field and set the three options to Correct, Incorrect, and Undefined.  For the KPI column, I will create a calculated column. This calculated column will use an IF calculation to set the actual KPI.  Now what is fascinating about this calculated column is that if we set the returned value to be a “number”, then we can use the following formula to return lines of html that will be interpreted by the web browser.  An image is used to display the formula in order to prevent web browsers from modifying it.
In this IF statement, I check the column ( [KPItrigger] ) to see if it is equal to a specific string (“Correct”).  I then use built in KPIs that are hidden in SharePoint to display the status; a green circle or a yellow triangle.  For a pretty full list of images available in SharePoint click on this link. Look in the alphabetical view for the most comprehensive listing.
Now when I create items in the list, I get KPIs.

Right now, I only have 2 KPIs defined.  If I want to have a more obvious KPI for my 3rd KPItrigger option of “Incorrect”, I need to get a little creative with my calculation.  I will have to nest an IF statement inside the first IF statement to allow for 3 KPIs.
This will check the first IF and then turn over to the second IF when it doesn’t find the “Correct” value.  With the second highlighted IF statement, when the “Incorrect” value is not found then the KPIDefault-1.GIF image will be used for any other value found.
By just changing the formula and not changing our data, we now get 3 KPIs on our list.

This is an example of how Business Intelligence can improve the way you do business.  With just a little effort and knowledge, you can simplify a list of information to provide visual indicators.  This is just scratching the surface of what Microsoft’s Self-Service Business Intelligence capabilities can do for you.
To learn in-depth about Microsoft’s Self-Service BI Toolset, check out our hands-on 3-day course, Business Intelligence Training – The Microsoft Self-Service BI Toolset, on our PremierPointSolutions.com website. In just 3 days, you can learn to build no-code BI applications, reports, and dashboards by leveraging the power of PowerPivot, Power View, Report Builder and PerformancePoint in combination with SharePoint.

Monday, October 13, 2014

Is Microsoft Pressing the “Delete” Key on InfoPath?



What is the future of InfoPath?


I frequently get asked variations of that question in my SharePoint training classes.

Microsoft’s official guidance released earlier this year declared that InfoPath 2013 will be the last version of InfoPath.  This led to widespread panic (not the band) on the part of many individuals, and numerous rants about how InfoPath should be avoided at all costs and how migration to alternatives should be initiated immediately.

Mark Twain once said, “The reports of my death have been greatly exaggerated.” The same could be said for InfoPath.

There are three important points to keep in mind:
  1. InfoPath 2013 and InfoPath Forms Services will be supported till 2023 – I work on a regular basis with companies that are just now migrating to SharePoint 2010 or 2013.  These are prime candidates for still being able to reap the benefits of InfoPath.
  2. There will be a migration path for forms – Microsoft is aware that companies have invested heavily in InfoPath.  The announcement about the last version of InfoPath mentions Microsoft will be developing future forms with a migration path from InfoPath.  I strongly suspect that InfoPath capabilities will probably be rolled into future Access releases.
  3. I haven’t owned one car for more than 6 years in my life yet.

Okay, so that last point may not look like something that’s important to keep in mind.  But here’s the point: when the remaining lifecycle for a product is going to be longer than a major commitment, like owning a vehicle, I have to question the validity of declaring that it’s time to jump ship on a product.

InfoPath is still a VERY valid option for digital forms development, especially if your company is just moving to SharePoint 2010. 

While there are some drawbacks to InfoPath, like not being able to access managed metadata directly, the easy learning curve, price point, and integration into SharePoint all make InfoPath a very attractive option.  You can sit on the sidelines and wait to see what Microsoft’s next form solution will be, you can buy an expensive third-party piece of software to make forms, or you can start working with InfoPath and have forms built for your SharePoint environment today.

PremierPoint Solutions offers two courses on creating and using InfoPath forms, and automatically routing those forms through the creation and use of SharePoint Designer workflows.

SharePoint 2013 Workflow and InfoPath No-Code Development is a 4-day course which delves deeply into creating and using forms and workflows.

InfoPath 2010 and SharePoint Server 2010 No-Code Workflow Deep Dive is the comparable 4-day course for SharePoint 2010.

Learn more about these and other SharePoint training courses at http://premierpointsolutions.com.

Post Script: go to https://officeforms.uservoice.com/ to tell Microsoft what you want to see in the next generation of forms and vote on others’ suggestions!

Friday, August 15, 2014

Configuring Global Registration Fields in Extranet Collaboration Manager (ExCM) 2013


Registration is one of the core concepts in Extranet Collaboration Manager 2013. There are two types of registration; Anonymous and Invitation. The most common, by far, are the Invitation Registrations. You send an e-mail to a potential new user, they click on the Registration link provided and they are taken to the custom Registration Page on your site. Here is an example:




This page can be completely customized to capture the data you want from your users.  In the example above, we are capturing the following (field type in parentheses): 

·        First Name (Text) 

·        Last Name (Text) 

·        Company Name (Text) 

·        Job Title (Text)

·        Phone Number (Text) 

·        Zip Code (Text) 

·        Captcha (Captcha) 

·        Site Policy (Policy)
 

In addition to the field types above, you can also implement the following field types: 

·        Description – Provides a way to enter lines of text for descriptive or informational purposes 

·        Choice – Presents selections as either a drop down, radio button, or checkbox 

There are two ways you can edit the fields that appear on the Registration Page: by Site Collection via the User Interface (UI) and globally via the web.config file.  In most cases, you will want to capture certain fields on every site (First Name, Last Name, Company Name, etc.), so it makes sense to configure those globally and add the more specialized fields (Captcha and Policy) via the UI.  However, what if you were running ExCM on hundreds of sites?  It would be very time consuming to go into each site and configure the additional fields.  In that case, you would want to choose the common fields for ALL your sites and configure them globally.  In this blog, we will look at how to configure all the field types globally via the web.config file. 

First, let’s take a look at the area in the web.config file for the content site where the global Registration fields are declared.  Here is the provided tag example from our help site:
 
 
This example includes First Name, Last Name, Company Name, Job Title, and Phone Number by default, and all are of the type “text” marked as “required” with the following elements: 
fieldType="Text"
isRequired="true" 
The “name” of the field (how it will appear on the Registration Page) is declared in this way: 
add fieldName="First Name" 
Now, let’s take a look at how to add the additional field types here in the web.config file so that they are available globally.  First, here are examples of the remaining three types:
Description
<add fieldName="Description" fieldType="Description" description="Enter the characters you see." />
 
Captcha
<add fieldName="Captcha" fieldType="Captcha" isRequired="true" imageStyle="Basic" />
where imageStyle="Basic\GreenDiagonals\PurplePlaid"
 
Choice
<add fieldName="State" fieldType="Choice" isRequired="true" displayType="DropDown" options="AL,AK,AS,AZ,AR,CA,CO,CT,DE,DC,FM,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MH,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA,PR,RI,SC,SD,TN,TX,UT,VT,VI,VA,WA,WV,WI,WY" />

Policy
The Policy field is a little more complex because it typically contains HTML content, which is invalid in an XML attribute.  As a result you, we will need to add the policy message content to a resource file (.RESX) and place it in the App_GlobalResources directory of the IIS site.
<add fieldName="Policy" fieldType="Policy" policyLabel="Resources:mycompany,RegistrationField_PolicyLabel" policyMessage="Resources:mycompany,RegistrationField_PolicyMessage" />
We have provided a zipped collection of files for use with Global Policy Fields that can be downloaded from here:
In it, you will find the following files:
 

Note that I have also used “ACME” in the sample config files to remain consistent with the blog post.  In your case, you will basically want to replace all instances of “ACME” with your company name.
The first is the resource file itself.  This is where we will enter the HTML changes we want to make for the Policy Field. The next is a sample anonymous master page that I will use for this blog.  In my environment, I have Anonymous Access turned off on both my Web App and IIS for this site, so I will need to reference this anonymous master page to allow the users to see the Policy Field.

The third is a text file that simply contains the HTML portion of the resource file to make editing easier.  Decoded, it looks like this:



The “policy_web_config” file is the Policy Field tag that will need to be added to the content site web.config file for the Registration Field as mentioned earlier: 

<add fieldName="Policy" fieldType="Policy" policyLabel="Resources:ACME,RegistrationField_PolicyLabel" policyMessage="Resources:ACME,RegistrationField_PolicyMessage" /> 

Finally, “PrivacyStatement.aspx” and “ServiceAgreement.aspx” are sample files we can edit to suit our needs.  For the purpose of this blog, we will only configure the Service Agreement.  The configuration of the global Privacy Statement would follow the exact same steps.
The first thing we need to do is create a folder in the 15 hive to store our custom Policy.  By default we would create it here: 

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS 

In this case, I will create a folder named “ACME”:
 
Once it’s created, we need to copy the following files from the zip file into our new directory:
 
Now we need to edit the “ServiceAgreement.aspx” file to reflect our customizations.  I have highlighted the areas I changed below:
 
 
The first change I made was to reference the “anonymous.master” master page due to my environment configuration.  Next, I gave the header the name “ACME Service Agreement,” and did the same for the PageTitle and PageTitleInTitleArea tags.  Finally, I put a very brief custom agreement in the “descriptiontext” tag.

Next, let’s make the necessary edits to the included resource file.  The area we are looking for is at the bottom of the file:
 
The full text as it appears there is as follows:
data name="RegistrationField_PolicyLabel" xml:space="preserve">
    <value>I accept</value>
  </data>
  <data name="RegistrationField_PolicyMessage" xml:space="preserve">
    <value>Clicking &lt;STRONG&gt;I accept&lt;/STRONG&gt; means that you agree to the &lt;A href=&quot;javascript:ShowPopupDialog(&#39;/_layouts/ACME/ServiceAgreement.aspx&#39;)&quot;&gt;service agreement&lt;/A&gt; and &lt;A href=&quot;javascript:ShowPopupDialog(&#39;/_layouts/ACME/PrivacyStatement.aspx&#39;)&quot;&gt;privacy statement&lt;/A&gt;. </value> 
  </data>
 
Notice I have simply changed the path from “/SPSolutions/ExCM” to reflect our newly created folder “/ACME.”  Once the changes have been saved, we just need to copy the resource file to the “App_GlobalResources” directory under our content site:
 
The final step is to add the Policy Registration Field in our web.config file using the “policy_web_config” example from the zip file.  This will make it globally available to all Site Collections in our Web App:
 
In addition, I will also go ahead and add the rest of the global field types we mentioned at the beginning of this post:
 
Now we’re ready to take a look at the update Registration Page with our Global Fields:
 
And here is how our customized Service Agreement now appears:
 

As mentioned earlier, you can follow the same steps to also customize the Privacy Agreement.

Tuesday, July 29, 2014

Configure ExCM Password to Meet Corporate Complexity



One of my favorite help desk stories is the lady that was attempting to use “DocDopeySneezySleepyGrumpyBashfulHappy” as her password. When asked about it she stated, “Because it had to include 7 characters.”



These days, you would at least need to throw Snow White in there as well because most places require at least 8 characters… and do not get me started on alpha numeric and at least one special character with no repeating characters!
As an IT guy, I have been the recipient of a tongue lashing from a few “less-than-happy” end users, when I informed them that the password they were attempting to use does not meet their companies’ complexity policy. I have also spent the better part of 20 minutes informing a user that the word “Window” does in fact have a repeating character in it. Wouldn’t it be easier if we did not have end users passwords? But I do not think that either is going away anytime soon, so the best we can do is make it as easy as possible (or, at the very least, less likely that users will call us with password issues).

In this article, I will walk you through how to lock out a user after a certain number of unsuccessful attempts, how to change the length of time that a user has to attempt a password, and how to configure ExCM to enforce your company’s password policy. Before continuing with these steps, ensure that you have at least read and hopefully implemented our steps on Enabling User Automation as these steps give you even more options when it comes to password security.

To begin, you need to navigate to your ExCM web app’s web.config file. To do so, open IIS Manager by typing “INETMGR” into a command prompt. Once opened you will need to navigate to the IIS site for the extranet web application. Go ahead and make a backup copy of the web.config file by right clicking on it, choosing copy and paste it into the same directory. Now that we have an “Uh-Oh” copy, let’s open the web.config file.


The first change that we are going to make is the number of tries a user gets before the account is locked out. To do so, we need to do a search for the text “maxInvalidPasswordAttempts="10"”.  It should be in the membership “defaultProvider” section. By default this value is set to 10, which would give the user 10 attempts.


If Acme Corporation had a requirement of 3 invalid attempts before being locked out, and that is the only change we need to make, it would look like “maxInvalidPasswordAttempts="3”. Then, we could just save our web.config file and test it using a test account. (FYI, it is not wise to test using your admin account as you will need this account to unlock the user… not that I have ever done that. Or if I did, it was only to show you what not to do.)

However, I am not done just yet. Let’s say that I also want to adjust the amount of time that a user has to make their attempts to log in. By default the user gets 10 tries in 10 minutes. If you were making changes along with me, your user would now have 3 attempts in 10 minutes.

As most of the bots that we are trying to protect against would likely make more than one attempt a minute, it is probably safe to drop this number down as well, so the user can try again quickly without getting locked out. (Please note that users have the ability to reset their own passwords, so unless there is a regulation against it, I suggest giving users a higher number of attempts than configured in these steps, and allowing them to reset their passwords once they have exhausted their guesses.)

To adjust the time allowed for guessing a password, we will search for “passwordAttemptWindow=”10”” and just as before, we will change that number to match the number of minutes to which you would like to change the window.

 

Now that we have narrowed the number of attempts and how much time users have to attempt to enter their password let’s also ensure that the password cannot be guessed within the first few tries by making certain that the ExCM password meets your company’s password policy.

On the registration screen, when users first type in their password, they are presented with a strength meter that indicates if the password meets a predefined complexity level. By default, ExCM checks to see if there are 6 characters. To change this we need to navigate back to the same web.config file and search for “minRequiredPasswordLength=“6””. (It should be found in the same section as the last two steps.) As before, simply change the “6” to the number of characters that your complexity policy requires. Save the file and this will satisfy your length

 

Unless you are collaborating with psychics (and possibly even then), you may want to find a way to inform your users of what the password should look like before they (not the psychics) get frustrated at trying to figure out your complexity policy. With the web.config file open, do a search for “passwordMessage”.


Make sure to adjust this message to fit your complexity policy as well as update the “passwordExample” as these will display on the registration screen to help guide your users into selecting a secure password that satisfies your organization’s password complexity policy.