They say that it’s the little thing in life that makes a big difference. In that spirit, I’m looking to share this little thing I picked up today in Microsoft Flow and SharePoint. It’s trivial and if you already know this, then great! If not, then even better because now you know and don’t have to lose time like I did, over such a little thing =)

The scenario is building a Flow that interacts with a Choice Field in SP

When you build the Flow, you’ll see 2 listings to the same Choice field. If you want to reference the user’s selection on the Choice Field, you have to select the one with the suffix of “Value”.

Otherwise, the Flow will not reference the value/selection of the Choice field.

And that’s the end of post =) Because I was working on a slightly more complex Flow, I lost more time in troubleshooting this small issue than I care to admit to. In leaving this small breadcrumb, hope the tip saves the trouble from the next person! Enjoy your 4th of July!

This post outlines how to render address information on a map using PowerApps. We will utilize SharePoint Online as the data source. However, keep in mind that you could opt for other (growing number of) sources, e.g.: Salesforce, Dynamics CRM Online, etc.

Quick Disclaimer – At the time of writing this post, PowerApps is in Public Preview, so PowerApps’ features and accuracy of this post are subject to change.

Prep Work:

Find a REST service to render your map. For this post, we’ll leverage Bing Maps:

I was recently faced with a common challenge of needing to ship a document from one document library to another. While we all wait for the upcoming, super promising Move & Copy feature (announced during Future of SharePoint), I had to come up with another route that doesn’t involve instructing the end users to use Save As or download a local copy then re-upload to the other library.

For this use case, the request was simple. Copy a document to a different library. For that reason, I immediately thought of an old trusted friend, the Send To destination. Send To does everything that the end users needed, except the function is tucked away in the ribbon, accompanied by a teeny 16×16 icon.

This is, after all, a carry-over function from SharePoint 2007, so its lack of prominence is understandable. In the spirit of making things easier though, I had to do a bit more digging. As it turns out, the Send To function references a copy.aspx system file, residing in the _layouts folder. What’s beautiful about this is the URL path, where you could identify the document location and send it anywhere within the web application (and yes, it does go across site collection!)

Now, what we can do with this information is to create a Custom Action (otherwise known as Quick Step) in SharePoint Designer (SPD) in order to promote this to our document’s Properties menu/hover card. Once you connect to your site in SPD and find the Document Library, click on “New” in the “Custom Actions” section.

Give the Custom Action/Quick Step a name then select “Navigate to URL” option. Copy the URL that you have constructed from the exercise above, except replace The Source URL (i.e.: the link to your document) with {ItemURL}

In my brief testing with the SharePoint Modern Library (i.e.: New Experience mode currently in SharePoint Online First Release, at the time this post was written), the Send To function does NOT work. The Copy page appears but clicking OK doesn’t actually do anything.
That being said, this post would be less relevant after the new Move & Copy feature has been released for SharePoint 2016 and SharePoint Online (which should include move/copy function to other document libraries and OneDrive For Business)

After facilitating nearly 30 requirement gathering sessions in the past weeks, I had a chance to take a step back for some self-reflections. For starters, these sessions can be darn exhausting! And after numerous interactions with the many different personalities, I found myself needing to exercise recurring tactics, which were rather fundamental and, by no mean, earth shattering. Yet, it was refreshing to have been reminded of how important these things could be during any requirements gathering interview. I hope to keep them in mind and continue to hone my skills based on these basic principles:

Practice Empathy Getting people to talk about what they do or want to do, could be challenging and uncomfortable. Sure, there are ways to make the process smoother. But ultimately, doing self or need-assessments and stepping someone else through that – is a hard ask. Throw technology in the mix, and you have what could be a very daunting experience for any information worker.

That being said, be sure to level with them. Hear their comments, concerns, complaints. Even in the most adversarial of interactions, I often experienced that listening to people and just simply nodding could be the best remedy to defuse the situations.

Come Prepared
These participants are setting aside their normal 9-to-5 to talk with you. Without doing anything (good or bad), you are already a distraction to their day. Knowing that, come prepared and be ready! Never discount any prep work, like arriving ahead of the meeting time to setup. Boot up your devices, hook up that projector, straighten out the room. Should your meeting be virtual, sign in to the meeting and start sharing your screen in advance.

You need to prepare your mindset as a facilitator. You want to make a good impression and let your participants know that you are present and you are ready from the moment they enter that room.

Different Strokes for Different Folks
One of my favorite mantras to live by in the professional setting is to “Over-prepare but be flexible.” As mentioned, preparation is key to a successful session. That being said, however, a common mistake is to put a meeting plan on a pedestal. Of course you want to meet the meeting objectives. But remember that you are there to facilitate, not dominate.

Some people are creative, others are analytical. Some groups are visual learners, others are auditory. What works for one person or one group could be a flop for another. You won’t hit a homerun every time, but you should do your best to adjust your approach, if you have to, so you don’t strike out.

For instance, if your open-ended-questions were getting nowhere, then try 20 close-ended-questions. If “Tell me about your morning” were simply getting an “I’m fine” response, then don’t stop there. Ask if they ran into any traffic in the morning, what their favorite morning coffee is, the kind of pets they had to kiss before leaving for work, the names of their kids they had to drop off on the way to the office.

Be flexible to change your method to cater to your audience and the room. Don’t fall in love with your agenda!

2 Heads are Better Than 1
If your project could afford the time for a peer review, always take advantage of it. I realize that in this competitive market with fast-tracked project schedules, that’s often a *big* if. Whether you are a more junior member or not, having a colleague or a mentor review your requirements really goes a long way for the project. Whether it’s to bounce ideas with or to let him/her poke holes on your theories, a peer review provides a different perspective, which keeps you more honest in your progress and approach.

Through my current project alone, the peer review sessions have helped me to be better prepared as a facilitator, allowed me to think more creatively about potential solutions, and has boosted my confidence as a technologist, which would ultimately impact my overall professional development.

I thought I would end the post with this Dilbert cartoon, which I found to be very fitting. I often say (half-jokingly) that if we were to remove people from the equation, then everything would be too easy. At the same time, you would also be removing all the fun.

Thanks for reading. Let me know what you think and please do share any personal tips that you have to keep your requirement sessions productive and engaging.

In an effort to unify my social media presence, I have decided to change my blog to bobbyschang.com. You can also find me in Twitter, LinkedIn, Slideshare, about.me – all with the bobbyschang tagline. It’s a personal branding move that, if not for anything else, would be easier for me to share my contact info for networking.

This also means that I bid farewell to the bobbyspworld.com domain name. With industry trends leaning towards O365 and cloud technologies, dropping sp may also not be the worst of idea. Since bobbyspworld had been around for 4 years, I expected this change to impact SEO. I don’t write often so I, honestly, am not too concerned with site statistics or lower readership.

But when I found myself receiving personal inquiries (including text/SMS on my personal cell) about the expired domain, I was taken aback. Unlike blog hits status quo, this on the other hand, has me concerned. If there is a person or two who reference these posts on a semi-regular basis, then I should have done a better job providing a heads-up of the change.

If you have relied on this blog and found that your bookmark now leading to a dead link, I apologize. I hope this post is picked up by you and the search engines, noting that bobbyspworld is no more but all content is still accessible in bobbyschang.com

As always, thank you for reading. And here’s to better communication and more writing!

If you’ve worked long enough with SharePoint Designer (SPD) 2013, then you’re probably aware of the constant need to clear cache.

Here’s a couple symptoms that you may run into with SPD caching issues:

Error message: “Cannot perform this operation. The file is no longer checked out or has been deleted.”

Published Workflow with conditions and transitions stripped/removed (if you invested time & sweat, this could look very daunting!!)

Clearing cache in SharePoint Designer is no rocket science. But it’s also not Ctrl+F5 that some of us have grown to love. Essentially, you have to delete all files in 2 local folders:

%APPDATA%\Microsoft\Web Server Extensions\Cache

%USERPROFILE%\AppData\Local\Microsoft\WebsiteCache

Just like rebooting any machine, once you clear cache, all most of your SPD problems disappear.

Now, my short term memory can be rather lousy … so I always have to dig up my notes to get these folder locations. This is why I love this handy dandy PowerShell script who does the clearing for me. The script is courtesy of my brilliant colleague, Matthew Bramer.

Save the script as a .ps1 file for future reference. When you run into a caching issue, make sure you close SharePoint Designer first. Then simply right click the ps1 script file and run with PowerShell. After that, you’re golden.

Side note: this should also work for SPD 2010 Cache. Though I have yet to confirm it.

In this post, I will demonstrate how to create a no-code currency conversion solution using SharePoint Designer 2013 workflow.

Find a currency exchange data source

First things first. We need to identify a data source that would present the currency exchange rates. For this post, I will be using the following Currency API.

For one, it’s free. And since this service provides the response in JSON format, it’s primed for SharePoint’s consumption. A couple of caveats to note – it only supports 17 types of currency and you can only make a max of 3,000 web service calls per month. Since this post serves as a proof of concept, I’m mostly concerned about it being operational (and of course, free). If you search on the Interweb, you will find A LOT of results on Exchange Rates API. For a production development, you should consider paying for a service to ensure a higher reliability.

Hang on to the URL as you will need it later!You can access it via a web browser, but I recommend using a JSON Viewer so the data is more presentable. One that I use is JSONView– it’s a Chrome plug-in that’s quick to install so I can punch the URL directly into Chrome. This is what you would see with JSONView:

Type a name for the dictionary, e.g.: “dictionaryXchangeRate”. This dictionary contains the JSON response which you would need to reference later on.

Optional: Create a Log for the web service call

To make it easier to troubleshoot potential issue, try creating logs throughout workflow

Type “log” then select “insert Log to History List”

Click on “message” than click on ellipses to open String Builder

Click on “Add or Changer Lookup” and select the “Workflow Variables and Parameters” of “responseCode”

Note: when you’re running the workflow, you should expect to see “OK” in workflow history if this web service call was successful

Obtain the Exchange Rate info from the dictionary

First, go back to JSON Viewer and obtain the exact data path to the Exchange rate field. In Chrome JSONView, you need to hover over the display field name and copy the exact path displayed on the bottom of the browser

For this REST API, the exact path is the same so it’s a non-issue. However, in other APIs, the path could certainly be different than what’s displayed in the browser, so be sure to use the exact path.

Side note: you may also need to reference the path differently in SharePoint Designer (SPD). For example if the exact path were “d.rate” then you would need to change it to “d/rate” in SPD.

In SPD, type in “get” then click enter to select “Get an Item from a Dictionary”

Click on “item by name or path”

Type “rate” and click Enter

Click “dictionary” and select “Variable: dictionaryXchangeRate”

Click “item” then select “Create a new variable”

Provide a variable name for the currency exchange, e.g.: “valueXchangeRate”

Select the type of “Number”

Optional: Create a log for the exchange rate

Type “log” then select “insert Log to History List”

Click on “message” than on ellipses to open String Builder

Click on “Add or Changer Lookup” and select the “Workflow Variables and Parameters” of “valueXchangeRate”