Haaron Gonzalez Rotating Header Image

SharePoint

Invoking User Profile Service when Selecting from People Picker in InfoPath

While supporting a customer on InfoPath development, he ask me how to retrieve data from a specific user using the Profile Web Service, but he want to invoke the service after selecting a user from a people picker control, problem was that the Action section in the people picker control was disable so he was asking why and how can we accomplish what he wants. I remember that I was able to implement same exact scenario a while back ago but didn’t remember how, so I did some basic research and this is what you need to do:

Step 1 – Create another field in the form of type Text (String) and make sure to set the default value equal to the people picker Account ID field, also it is critical to check the Refresh value when formula is recalculated check box control

Step 2 – Create an Action rule in the new text box control, this will get execute any time the people picker control change the continuing Account Id value

Essentially this as the actual concern, so now we are able to have a trigger action in order to query the User Profile Web Service.

Just use a Office 365 based credential when deploying programatically

So all people happy and kind of impress with Office 365 Pattern & Practices components, especially the ones that are related to Office 365, is so much easier and simpler the provision things up to SharePoint Online. Recently had to deploy some assets into SharePoint Online, I did use Office 365 PnP as our deployment approach. Everything work just fine in our Office 365 Dev environment but as soon I got to customer tenant our deployment console app didn’t work as expected.

First I notice that customer had ADFS set up and the code when trying to authenticate was throwing the following exception:

Unhandled Exception: Microsoft.SharePoint.Client.IdcrlException: Unable to get ticket due to unknown error.
at Microsoft.SharePoint.Client.Idcrl.IdcrlAuth.GetServiceToken(String securityXml, String serviceTarget, String servicePolicy)
   at Microsoft.SharePoint.Client.Idcrl.IdcrlAuth.GetServiceToken(String username, String password, String serviceTarget, String servicePolicy)
   at Microsoft.SharePoint.Client.Idcrl.SharePointOnlineAuthenticationProvider.GetAuthenticationCookie(Uri url, String username, SecureString password, Boolean alwaysThrowOnFailure, EventHandler`1 executingWebRequest)
   at Microsoft.SharePoint.Client.SharePointOnlineCredentials.GetAuthenticationCookie(Uri url, Boolean refresh, Boolean alwaysThrowOnFailure)
   at Microsoft.SharePoint.Client.ClientRuntimeContext.SetupRequestCredential(ClientRuntimeContext context, HttpWebRequest request)
   at Microsoft.SharePoint.Client.SPWebRequestExecutor.GetRequestStream()
   at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()
   at Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest()
   at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
   at Microsoft.SharePoint.Client.ClientContextExtensions.ExecuteQueryImplementation(ClientRuntimeContext clientContext,Int32 retryCount, Int32 delay)
   at Microsoft.SharePoint.Client.ClientContextExtensions.ExecuteQueryRetry(ClientRuntimeContext clientContext, Int32 retryCount, Int32 delay)
   at BrandingCAN.Program.Main(String[] args) in projectpath\Program.cs:line 41

Did some research and perform several recommendations, but unfortunately didn’t work at all. So, at this moment I still don’t understand what to do to make my console app to authenticate to O365 with ADFS set up and account. But, I did manage to solve the issue just using an Office 365 based credential instead of an ADFS based credential, and that’s what I wanted to share here.

Whenever you deploying something programmatically to O365, please use O365 based credentials like “accountname@company.onmicrosoft.com” and Office 365 PnP and all SharePoint Client APIs will perform as expected.

 

BCS Limitatios to keep in mind

Have you wonder about the limitations of BCS in SharePoint 2010? Well Chakkaradeep Chandran a Program Manager from Microsoft SharePoint Development Team blog about it here on August 2010. As long customers require SharePoint 2010 support I will continue sharing information like this. So, please take a look:

BCS Limitations

Even though BCS is great and can do wonders when you want SharePoint 2010 to interact with your external systems or other LOB applications, it has its own limitations. Understanding these limitations will help you build good BCS solutions.

Below are some/all of the BCS/External Lists limitations:

  1. Workflows cannot be associated with external lists
    • However, you can use the external data columns and manipulate the external lists in a workflow
  2. No RSS feed support for external lists
  3. No REST based access for external lists
  4. LINQ to SharePoint spmetal.exe does not support external lists
  5. Cannot configure alerts for external lists
  6. Cannot export external list items to Excel (Export to Excel feature)
  7. Item-Level permissions is not available for external lists
  8. Versioning cannot be configured on external lists
  9. Item History is not available on external lists
  10. Datasheet view cannot be used in external lists
    • XSLT is supported though
  11. You cannot create a site column of type ‘External Data Column’
    • External data columns can be created only as list based columns and cannot be consumed in site level content types
  12. No Write support for BLOB
    • You cannot write back to BLOB fields using BCS unless you write your own method
    • You can access BLOB columns by defining a StreamAccessor method and presenting the external data via the BCS Data List web part by checking the Display stream fields property
  13. Ratings feature is not supported for external lists
  14. Metadata based navigation is not supported for External Lists

Some of the limitations are quite obvious as the data does not reside in SharePoint and it is not SharePoint’s responsibility on how the data behaves. SharePoint is here to just present the external data. That said, I do think some are not limitations, but Microsoft just didn’t have time to implement, like:

  1. RSS feed support
  2. External data site columns
  3. Export to Excel

If I have missed any limitations, please feel free to comment and I will add them to the list.

This post was originally published by Chakkaradeep Chandran here http://chakkaradeep.com/index.php/bcs-limitations/

How to copy the body of your email action in Workflow Designer using SharePoint Designer

This is for my friends and customers that still support SharePoint 2010 workflows and solutions using SharePoint Designer 2010. Have you been in the situation to re-create a SharePoint Designer 2010 workflow and notice that you cannot copy or paste the body of your Email actions forcing you to re-create your action from scratch? What a hassle.

Well, today I found a way that copy the content of your action attributes and with that simplify a little bit the experience of recreating Workflow Designer actions.

Step 1: Locate the Send Email action in your workflow and open the Properties window

SPD1

Step 2: Select the content of the Body attribute in the property window, right click and copy

SPD2

Step 3: in your new Send Email action open the Properties window

SPD3

Step 4: Click the “…” button

SPD4

Step 5: Paste the content of your clipboard

SPD5

Step 6: Click OK and just re-assign you lookup properties

SPD6

What happens when you accomplish your dreams? Well, you create new dreams

It’s time for me to close a cycle and move on to another endeavor in my career. For the last 3 years I have been lucky enough to work for Konica Minolta formerly known as Hershey Technologies. After Tom Castiglia, Arjay During and Neal Fischer believed in me and gave the opportunity for me to join the team I started engaging with existing/new customers, team members and SharePoint local community folks. I started little by little, building, gaining trust based on pure hard work and consistent outcomes. I was fortunate to partner with account managers and do pre-sale work that help us position our services and close so many deals that with the help of the team we were able to deliver value in a profitable way and consolidate strong/solid relationships with customers. After touching more than 55 customers, more than 74 projects during a 3 year span is time for me to say farewell.

I am extremely proud, grateful and lucky to have the chance to learn from everybody here and to grow professionally accomplishing things that once in my life where dreams and future visions of me. Even do, it’s hard to say goodbye to friends, this is something that I feel and know I need to do. Thanks Konica Minolta formerly known as Hershey Technologies team members, management and top executives for your patience and trust. Please continue taking care of our customers.

What happens when you accomplish your dreams? Well, you create new dreams. That’s why I am joining Slalom Consulting. This is a company with a high level consulting profile that I know is the right step for me to continue doing what I know and what I need to do to strive in bigger challenges and outcomes. I am so excited to join this team, so more histories to come in the future, new dreams and visions to conquer.

Thanks all for your friendship and partnership, sicerelly Haaron Gonzalez

How to display additional lookup data from another list in a Nintex Form

Let’s say that you have a lookup site column that you are using all over the place in multiple lists and sites under your site collection and you need to be able to display additional data from this important list in a Nintex form, there is a way fortunately.

By adding this site column into your content type or list the Nintex Form will identify field as a lookup control automatically and by using the lookup function you can query another list in the site collection and return data from it.

In this example, I have a Stores list, every store has a district number associated, so when I pick and choose a particular store number by using the lookup function I am able to return the district for the selected store.

lookup1

To understand how the lookup function determines what data to bring back, consider the following lookup function:

[code language=”css”]
lookup(“listA”, “ID”, 1, “Title”)
[/code]

This lookup will send a query to SharePoint, asking for list items within a list titled ‘listA’ and return the Title column value from any list items whose ID column value is 1.
Note: The match on the value is case-insensitive.

The lookup function does not support complex query construction; it determines what list items are included, as data to bring back, based on the filter column being an exact match to the value you specify. You can compose complex formulas with the formula builder if you need to build up a complex query, however be mindful that each lookup function will send an individual request to SharePoint for data.

So, in my example I just added a Calculated Value control in the Nintex form and configure the lookup runtime function like this:

[code language=”css”]
lookup("/sites/mysitecollection|mylist","ID",Store,"District")
[/code]

Notice that there is a “|” to point to a list in another site, in this case, the top level site using a relative URL Path, then delimit the list title with a pipe ‘|’ symbol. If your list exists under your current site just use the list title without the URL Path.

lookup2

 

How to read values from query string in a Nintex Live Form

I remember when a friend that was very good at writing technical articles and blog posts told me that he didn’t had the time to do it when I asked why he doesn’t blog anymore. That’s exactly what happened to me in the last couple of months or so. I apologize in advance.

Today, I want to share how you can read query string parameters using JavaScript and pass them into a Nintex Live Form controls.

Set the Client ID JavaScript variable name for your text box controls you want to set with the query string values

  • Select your text box control, right click settings
  • Expand the Advanced section
  • Provide a Client ID JavaScript variable name

Set the Client ID

 

Modify the Custom JavaScript i the form Settings

  • Click the Settings ribbon button
  • Expand custom JavaScript section
  • Create a JavaScript function to read and return query string properties ( I borrowed the function from here)

[code language=”css”]

var getQueryString = function ( field, url ) {
var href = url ? url : window.location.href;
var reg = new RegExp( ‘[?&]’ + field + ‘=([^&#]*)’, ‘i’ );
var string = reg.exec(href);
return string ? string[1] : null;
};

[/code]

  • Invoke the function to get the query string values passing the name of the parameter and use the NWF$ to set the values in the right text box. kmsid is my query string parameter

[code language=”css”]

var surveyId= getQueryString(‘kmsid’);

NWF$(document).ready(function() {
NWF$(‘#’+TitleControl).val(surveyId);
});
[/code]

Custom JavaScript

Now you need to make sure your Nintex Live form URL includes the Query String parameter we are referring in the code. In my case I created a Nintex Workflow that will send an email and in the email body a hyperlink to the Nintex Live form is included. I modified the hyperlink to have my query string parameter kmsid, just make sure you don’t use the default URL provided by Nintex Live, use the resulting URL of your Nintex Live form to construct the entire URL with the additional query string.

 

SharePoint Workflows with Vlad Catrinescu

All you need to know about Workflows in SharePoint 2010 and 2013 as a Power User is covered in Vlad Catrinescu Pluralsight course. Very well done and nice examples.

Check it Out here https://www.pluralsight.com/courses/sharepoint-work-creating-workflow-sharepoint-designer

Welcome February!

Formulas to get the first and last row on a repeating table in InfoPath

You know, you wake up knowing that is going to be a wonderful day working for a customer with the software products you love. During today on-site support session, you found out that is needed to write some good old XPath formulas on an InfoPath form.

There is a repeating table with the columns necessarily to describe travel information like Departure Date, Return Date, City, you named and the requirement was to expose the initial Departure Date and the last Return Date of the entire trip, so, what do we mean with entire trip? I maybe start a trip from San Diego to Mexico City, and then another trip from Mexico City to Seattle and then from Seattle to Las Vegas. Clearly, the Departure Date and Return Date are not associated with just one row “trip” in the repeating table because I have at least more than one row for describing all the trips.

The data structure of the repeating table is:

 

 

structure

So, here are the formulas to get the first and last row on a repeating table.

../my:TravelInfo/my:TravelInformation[count(preceding-sibling::my:TravelInformation) = 0]/my:DepartureDate

../my:TravelInfo/my:TravelInformation[count(following-sibling::my:TravelInformation) = 0]/my:ReturnDate

Fortunately, the approach work as a charm. No C# code saved the day today. Pure old good XPath did it. InfoPath, you are definitely the sunshine of my love, especially now that you will be supported until 2026 baby.

 

Speaking at Nintex Inspire 2016 in Las Vegas

I am so happy to announce that I’ll be speaking at Nintex InspireX Conference co-presenting with Tom Castiglia. We will share how to use Nintex Workflow & Forms and DocuSign fornintexinspire automating some of the most typical Human Resources process in a company. Nintex Workflow and Docusign can work together to request and retrieve digital signed PDF files for archiving the paperwork that needs HR by law need to retain. We automated some process for our customers and we want to share our overall solution approach.

Nintex InspireX will be on take place in Las Vegas, Nevada between February 22-24. In encourage you to review the agenda and awesome sessions/speaker line up.

Here the session details:
Using Nintex and DocuSign for Open Enrollment and Employee Onboarding, with Konica Minolta Business Solutions
When organizations hire a new employee, the onboarding process always requires the new hire to fill out, sign and submit numerous legally binding forms. These forms are typically provided by benefit providers and government agencies in paper and/or PDF format, and require a “wet” signature to be submitted. This session will show how to architect a re-usable solution based on Nintex Forms, Nintex Workflow and DocuSign, that can support any number of different third party forms, converted into DocuSign templates in order to capture a legally binding digital signature. We’ll also show dashboards for the HR Manager to monitor the progress/status of forms pending for each employee.