Microsoft Flow & Salesforce.com Integration

This afternoon I had a quick call with a fellow community leader Adam Levitan who works for Metalogix. We were recording a podcast which will hopefully air later this fall during the Collab365 Conference. We got onto the topic of the future of collaboration and I said that Microsoft is absolutely hitting a home run with their Flow service. For those of you who aren’t familiar with it, Microsoft Flow is a workflow automation solution which allows you to tie systems together through activities. While SharePoint does an amazing job of allowing users to automate business processes, Flow takes it a giant step forward.

One of the use cases that I’m very interested in is the ability to integrate the Office 365 Platform with Salesforce.com. Although I’m a big supporter of Microsoft technologies, many of my clients have decided to go with Salesforce.com instead of Dynamics or the new Dynamics 365 for their CRM platforms. One of the challenges with Salesforce is that the recurring subscription costs are expensive when you start trying to license all the users that may play some role within the sales cycle. The purpose of this post definitely isn’t to cover all the features of Salesforce or the many different clouds they have (Sales, Service, Health, etc.) but rather to focus on the future where you can tie cloud services together and build some really powerful solutions.

To illustrate what I mean, I’m going to walk through building a very simple “Flow” which mirrors a business scenario I’ve personally encountered. So I work for Slalom Consulting and we sponsor many community events like SharePoint & SQL Saturdays, various tech conferences, etc. Typically these sponsorships include a booth where we send a recruiter, sometimes a sales executive, but most of the time just members of that particular Practice / Vertical, etc. During these conferences there often times are potential leads generated based on discussions that happen at the booths, and the usually our folks capture a business card or just take down the person’s information. At the end of the event the team goes back to the office the next week and either sends the spreadsheet, or transposes that information from Excel into the CRM system for the sales team to go work. You might be saying to yourself “there has to be a better way” – and indeed there is!

What if you could generate those Leads from an Excel table and have it imported directly into CRM? Wouldn’t that be cool? Well guess what, that’s exactly what we are going to do.

First, let’s login to our Office 365 tenant which has Microsoft Flow enabled (as of this blog post it is still considered to be a Preview service). And we’re going to search up at the top for available templates to create our Flow from:

image

Let’s pick the Create Salesforce Leads from a Excel table template:

image

From here a new page will be displayed giving an overview of the template we selected:

image

Click the big “Use this template” button to bring up the connection configuration screen. We’re going to need to create connections for both the Excel file which will have the table of sales leads, and the connection to our Salesforce.com instance.

image

First click on the “Create” button for the connection to the Excel file.which will bring up a list of list of choices for where the Excel file can sit. Notice there are also non-Microsoft services such as Dropbox, Box, and even SFTP! For the purposes of this walk-through we are going to pick the OneDrive for Business but feel free to select the data source that best meets your requirements.

image

It will prompt you for credentials for your OneDrive For Business account after clicking the Sign In button:

image

So in truthful blogging, I’m going to tell you that it threw an error:

AzureResourceManagerErrors

I waited a bit, cleared out some of my old connections under my profile and then tried again and this time it made the connection.

Next, I created my connection to my Developer Salesforce instance: I logged into Salesforce.com:

image

Next, I allowed PowerApps access to my Salesforce tenant:

image

Of course I clicked, Allow and then continue on the main page to bring up the workflow canvas:

image

So working from the top, the very first thing you can do is setup recurrence for how often the flow will run. As of this time, this is still just a Preview service and there hasn’t been any real discussion on licensing or pricing. Like any service there are most certainly going to be service levels – ie; being able to guarantee computing power to run the job, amount of data perhaps to be processes, and likely some other elements that I haven’t even dreamed up yet – but you can rest assured that there’s a team at Microsoft figuring out how to price this service. Smile

For demo purposes, I am just going to have it recur every 15 minutes. So clicking the little ellipses in the corner of the recurrece box brings up the advanced options where I can set that information:

image 

Before proceeding to the next step I’m going to create a sample Excel file with the following column headers:

First Name
Last Name
Company
Phone
Email

image

Click OK and the following Table will be generated:

image

Last, I’m going to save my file as SPSLeads.xlsx and drop it on my OneDrive for Business. Back to the flow I go to the Get rows section of my flow and click the folder expand button on the right, and find my SPSLeads.xlsx file:

image

Next, I select the table which I left as the Excel default of Table1:

image

Next we dig into the Create Object section of the flow which is really the “Create Lead” functionality in Saleforce. This is where you can map the different columns to the fields in a Salesforce Lead Object. I went with the bare minimum of what is required to generate the lead, but there are other fields such as Street and Zipcode that can also be captured and added to the record.

image

Some of the fields can also be defaulted which is what I am going to do for the Lead Source since these leads are being captured at my fictional SharePoint Saturday Connecticut event:

image

Last, I’m going to have it Delete the row after creating the lead in Salesforce, essentially following the same path of picking the Excel file on my OneDrive and Table1 as my table name:

image

Finally I’m going to give this Flow a name:and then click the Create Flow button and let Microsoft Flow work its magic!

image

I’ll click the Done button and then see that I’m all set:

image

When I go to the My Flows, I’ll now see that there’s the Flow I just created:

image

Next, I’ll click on the little information icon to see that my flow is actually running:

image

In reality though – it takes a bit for my Flow to run. I suspect it’s because I both didn’t set a start time and that I also put a recurrence of every 15 minutes. This is definitely still a Preview service so there will probably be a bit more polishing up of the user interface before it goes live.

Then I looked at my Flow to find out that it had errors:

Flow-Error2

Then when I went to edit the Flow I found myself in the spinning page of doom:

image

So then I decided to back it all out and pop my file up on my Dropbox. I created the service exactly the same way and it picked up the file no problems at all!

image

After allowing the Flow to run, I logged into Salesforce.com and noticed that the following leads were generated:

image

I then popped open Spoopy Matfess (my amazing dog) and low and behold all the lead data came over:

image

Then I logged into my Dropbox accoutn and opened my file and noticed that it had been touched by PowerApps:

image

I’m a little curious as to why it would leave that last record with the _PowerAppsId_ at the end, but maybe that is just part of the beta. I would expect that it would leave the table cleared out and then allow for users to continue adding new leads as they come in throughout the day.

So the big question is why did my original attempts using OneDrive for Business fail? I could be wrong but there might be something with my profile since I’ve got multiple profiles, multiple O365 accounts, etc. Now, I did create the connection to OneDrive and authenticated successfully to Azure AD and it was also able to find the Excel workbook and the table. However, when it came time for the job to actually run, it threw some connectivity errors. I also could have possibly hit some ironically timed Azure issue.

Regardless though, flipping over to Dropbox and seeing it run successfully should hopefully give you some ideas as to what’s possible with Microsoft Flow. You can have users working in systems that they are familiar with such as OneDrive, SharePoint, etc. – and then have the output of their work feed into downstream systems.

Advertisements

Yammering about the new O365 Community

For those of you who know me, I’m a little sarcastic with a pretty dry sense of humor. Friday night I was scanning my Twitter feed and noticed that Naomi Moneypenny had put out an article on the new O365 Community and how it was not on Yammer. I had seen the blog post out on the Office Blogs site and had tagged it as something I was going to peruse during my Saturday morning coffee & catch up on news time. I’m a big fan of Naomi, she’s absolutely brilliant and her observations are incredibly insightful – so I decided to check her post out before continuing on with my Friday night plans of yard work & various chores. As I had suspected it was really sharp article and she pointed out a really valid point for why it makes sense to now have the O365 Community in Yammer – it completely eliminates the barrier to entry. You can choose to browse it anonymously or register with your Microsoft account so that you an engage in the community. She also pointed out that by enabling anonymous access would mean that the search engines would be able to index the content as well, making it even more valuable for those looking for information about O365.

I have a love/hate relationship with Yammer and I’m slightly conservative when talking to clients about it. From my perspective it can be an incredibly useful tool within a Corporate environment where you have the appropriate Power User base in place to ensure that answers and/or ideas are being captured and somehow logged into a knowledge management tool to help eventually break a cycle of everyone blasting out questions to an organization. I like it for the remote “in the field” workers that are capturing information and posting it for those at their desks to analyze and provide input where necessary. I’m not a huge fan of it for the large scale “chaotic” implementations similar to what we have with the O365 Network & Groups. Honestly, what we have today is kind of a mess.. There are groups for different things – Development, IT Pro, Client-side Development, Patterns & Practices, the list goes on and on. I’m not against having all those groups but finding groups is a bit of guessing and/or wasted time searching. There’s also lack of real ownership which is kind of the Yammer model, but this doesn’t always work with large groups. There’s the occasional message about, “can’t wait to see where <insert person here> takes this group” – which undoubtedly leads to 1-2 posts by that person and then they get busy with life. 🙂

Now here’s where my Friday night went oh-so wrong.. In Naomi’s post she provided me with the ultimate obnoxious question setup:

Screen Shot 2016-07-17 at 8.42.11 AM

Maybe it was the really chaotic week, or the cycle of the moon, or the fact that my sarcasm gets the best of me, but I just couldn’t help but responding back on Twitter with the following:

Screen Shot 2016-07-17 at 8.45.39 AM

Sure it seemed innocent at the time and knowing Naomi I thought she would have gotten a chuckle out of it but what I did not realize is that my quiet evening was going to turn into a chaotic mess of likes, retweets, responses, threads & subthreads. At one point I’m pretty sure Al Gore jumped in and let us know that he actually invented Yammer.

Looking back through the thread I identified the themes of the arguments for why this isn’t a good move as:

– Investments have been made already in the existing O365 Yammer Network
– This is yet another place to monitor questions/answers/information
– Not hosting this on Yammer means that Yammer is dead
– The “Community” didn’t like not having input on the decision

These are all very valid points and I have a couple of comments for them:

1) Investments have been made already in the existing O365 Yammer Network
From my perspective the life of an IT Professional is constant change & evolution despite investments made in products. I can recall a huge ERP implementation that had teams churning through millions of dollars over the course of a few months to implement a new system and having their project halted right before Go-Live. This was because of a pending merger which already had licenses for the product and the decision pivoted to waiting until after the merger was completed. (1-2 year delay). For this instance, yes there was absolutely time & energy put into building out these Yammer groups but to quote Naomi, the penetration level was less than 100,000 users on the network which is an incredibly small fraction of the SharePoint & O365 users out there. I’m not trying to be too critical but you could argue that the network was a failure based on the #’s alone. Obviously you can always argue no matter what side of the coin you’re on, but in terms of a percentage of install base vs engaged, the Yammer network simply doesn’t have the reach that Microsoft would like to have. Don’t forget, Microsoft’s success is based on adoption & consumption of services – ensuring adoption & consumption is completely tied to their bottom line.

Just to build on that point the O365 IT Pro network is only 13,329 (as of 9:22 AM EST on 7/17/16) and that’s the second biggest group in the network!

Screen Shot 2016-07-17 at 9.21.58 AM

2) This is yet another place to monitor questions/answers/information
Yes. I absolutely cannot argue with the fact that this is yet another place to monitor for SharePoint/O365 questions, answers, and announcements. However, I’m curious what the impact is to those that are going to use this platform mostly for consuming information & announcements vs those community leaders who are publishing information. What I mean is – take user Joe working at a large company who just wants to learn more about Planner and how it impacts him. Now instead of hunting across Stackexchange, MSDN forums, MVP blogs, etc. – he can go to this one Community Site (choosing to login or remain anonymous) and follow information put out by Microsoft or members of the community. This is a much different experience than say Rob Windsor who is an amazing Community leader in the Development space.

Rob made the comment here:

Screen Shot 2016-07-17 at 9.08.01 AM

As someone on the content producing, knowledgeable, and sought after – I can absolutely see how yet another community can lead to eye rolling and perhaps non-participation. From my perspective though, Rob’s more of the exception to the rule. I can empathize the additional overhead this can add to his participation in the community, though I would ask if perhaps at some point he would consider dropping out of one of the other channels in place of this new one once it’s beyond the Preview period.

3) Not hosting this on Yammer means that Yammer is dead
So I have to chuckle because the Yammer being dead comment is really what caused my Friday night to go from quiet to phone constantly buzzing with Twitter updates. 🙂

Yammer is no different than any other solution in that it was developed to match a specific use case. I feel that Yammer works in Enterprise environments with governance, with governance, with people dedicated to ensure that individuals who are going to get the most out of the platform. I personally did not like the O365 Network on Yammer, I found it to be a hot mess of groups all over the place.

Take a look at the splash screen – it’s so much easier to navigate towards the type of content you are looking for in the new network:

Screen Shot 2016-07-17 at 9.19.08 AM.png

Versus the Yammer experience is a hodgepodge of trying to scroll through find the groups that are most relevant. This is a nice clean modern interface for getting information about what you’re looking for – whether it be Yammer, SharePoint, Office Apps, etc.

Also to address the other elephant in the room about Yammer being “dead”, I can definitely see how folks might interpret that not using it means that Microsoft is pulling the plug. However, I think that the mass of O365 users would make it very difficult for Microsoft to just pull the rug out from users. What I think we might be seeing is a true convergence of SharePoint, OneDrive, Yammer, and Groups into something else. I don’t have any insider info on this one. But if you look at the power of Groups, the re-energizing of SharePoint, and the rich capabilities of Delve – it feels to me like something big might be coming which really ties them all together with Yammer perhaps somehow either being reborn or updated to help complete that picture. I can only see Yammer becoming more integrated vs being killed off.

4) The “Community” didn’t like not having input on the decision
So I consider myself to be part of the O365/SharePoint Community – I run a user group and I speak at SharePoint Saturdays when I can. It is true that nobody asked me if we should switch from the O365 Yammer Network to this new platform. When I think about the community though, I gravitate towards the people that are consuming announcements, blog posts, asking questions & hopefully getting answers. Running the user group, I find myself really striving towards trying to build an inclusive environment where people feel comfortable asking questions & getting help with their problems. Looking at the the network I think this was Microsoft’s intent as well – they wanted to make it easier, organize the content, eliminate any additional headaches with Yammer accounts, and provide a nice modern experience. I would also say that the numbers in the Yammer network don’t accurately reflect the true volume of community members. If you remove the Microsoft employees, the MVP’s, and the evangelists, you’re really talking about very small numbers of network members vs true community members.

So are there people who are active in the O365 Yammer Network? Absolutely! Might they have concern or mixed feeling about moving? Sure! Rather than look it as a negative, I would challenge those who have some concerns to look forward to hopefully a more rewarding experience if Microsoft is able to grow the number of active users in this new community. I intend on announcing it during our next CT SharePoint User’s Group meeting, and I would encourage those who either run or participate in local user groups to do the same.
To quote Dux Raymond Sy – “Shift happens”. 🙂

What’s in a namespace?

If you have attended any of my sessions on beginning Client Side Development you might have heard me talk about ensuring that you do not promote the public namespace. For SharePoint/O365 Developers who are starting to learn client-side the concept of namespaces are common in C#, but not as common in JavaScript. The whole purpose of developing under a namespace is to ensure that your variables do not collide with other variables, resulting in broken functionality, errors, etc.

The approach that I take to address this is by creating a unique object and then working under that object as a pseudo-namespace.

For example:

var jaredApp = jaredApp || {};
jaredApp.GetData = function(){

console.log(“This functionality exists under jaredApp”);

}

You could follow that approach and build out your other functions – and then it is as easy as jaredApp.GetData(); to call the function. The benefit of this is all of your variables fall under jaredApp (or whatever you decide to call it), rather than binding to the window object which is where variables are assigned by default – this is also referred to as the global namespace.

There are a couple of other approaches such as the immediately invoked function execution (IIFE) which looks something like this:

(function(){
console.log(“This functionality exists temporarily within this invoked function”);
})();

The nice things about the IIFE is all variables created within it are scoped within that function therefore they would not be bound to the global namespace, which prevents collisions.

Happy SharePointing & JavaScripting!