Uncategorized

Creating a Quiz in Forms Pro

Today we had a “bring your kids to work” day at Barhead Solutions in Melbourne, Australia, with six kids between the ages of 8 – 13 in the office.  I was brave and stupid enough to insist they take a break from the games and movies to create a quiz together, using Forms Pro.  I’ll be honest – there were varying degrees of enthusiasm in the room – I was competing with a Lego car set, a seriously huge pack of textas, origami paper, Uno, Monopoly cards, and tummies full of pizza.  But I was determined, enthusiastic, and in charge, and I put Forms Pro up on the big screen and forged on. with my own unique brand of enthusiasm…

Once the kids came up with the concept of a “How much of a kid are you?” quiz, I had more than half of them on side, and it wasn’t long til I had the whole group.  At first their questions were all about opinions – who was your favourite character in a movie – which led to an discussion of the difference between a survey (opinions, feedback) and a quiz (right and wrong answers with scores).  There is nothing quite as good at testing your understanding and ability to explain clearly as having to get a bunch of kids on track.

And so we worked together, constructing questions in their various areas of expertise and interest – cartoons, super heroes, Minecraft, board games, YouTubers, Disney Princesses.  I taught them (by stealth) how Forms Pro works, showing off the AI that appeared in various questions as we created them, much to their increasing delight.  Then we circulated the quiz to everyone at Barhead.  They watched their parents get things right and wrong. They watched the results come in, and the charts and reports being created and changing. The pizza was good, but this might actually have been the highlight of the day –  when we got 47 responses, most of which proved the adults don’t know as much as the kids!  The kids also loved the built in themes, and were very proud of how their quiz looked when we sent it out.

I’ve done a lot of demos with Forms Pro surveys, but this was my first real experience of putting the quiz functionality through its paces, and I learned a lot.  There is functionality there that I didn’t know existed, including the ability to grade and post results.  All the question types that appear in surveys are available to quizzes, but they don’t work quite the same way – for instance, the NPS question (“How much did you like our survey?”) shows as a dial, rather than a sentiment analysis, and doesn’t auto-score for the points available.  I’d also love to see the ability to allocate pro-rata points for multi-response answers (e.g. where someone picks 2/3 correct answers but misses the third one) – as much as the kids delight in seeing adults get things “wrong”!.

Overall, it was a fun and informative experience, which will lead me to explore more of the quiz functionality in Forms Pro.  I suspect when we have these kids back again on a day in the next school holidays, I will be able to hand over the laptop and let them create the next survey themselves.  It’s really that easy!

You can test yourself on our “How much of a kid are you?” survey here – but be warned – these kids are tough quiz masters – and no googling allowed!  https://forms.office.com/Pages/ResponsePage.aspx?id=DEOYUBLCG0GHJcJRCqvR1VOqayAv2uZIlXHN_DK7jh9URUlPSkdCSktZTEM1SjZBOUc0MlBWTjVNRS4u

D365UG Bristol

Man, oh MAN! I am just on the train back from Bristol after attending their first 365 User Group. and it was AWESOME!

First up, big props to the organisers @lubo @dbarber @xrmjoel @robpeledie @leembaker for doing such an amazing job. The venue was great, the food was too (including vegan options :-)) and the swag bags were epic.

But more importantly, the speakers were amazing.

First up, Mark Smith did a fantastic presentation to explain the (seemingly unexplainable) Common Data Model, which is something that sits on the CDS and exists to make sense of your data so that it is usable and, more importantly, means you can build apps faster. Considering he knew nothing about the CDM 5 days ago, this was a great presentation which goes to show how quickly you can assimilate information when the data is available in a usable format (see what I did there *winks*)

Second up was @scott-durowdevelop1-net showing us how much the Power Platform has changed in such a short space of time, and why that’s such a good thing, enabling access to a much wider audience and giving rise to things like the Citizen Developers who can effect such great change in an organisation, and how we all need to embrace change and be adaptable.

And finally, @themarkchristie with an entertaining presentation on how he bought headphones at the Microsoft store and @lubo busted them 5 minutes later – but not to worry, Virtual agent was able to help him raise a support ticket through Forms Pro, which then could be assigned to someone in Field Service, leading to the headphones being fixed (whilst being worn by Mark Smith).

I learned a lot about how to better use the tech we have openly available to us in a more inventive way, and how to work with the community to find answers to stuff that you are struggling with.

I love these community events and I hope to attend each and every one that I can.

Again, big thanks and well done to the organisers.

Love to all

Alison

(Me when I won a Flic button from @themarkchristie)

Retrieve option-set values and labels without use of metadata request in Plugin and JavaScript

 

Metadata is the place of database where we can retrieve information about structure of database such as attribute properties, length, maxsize etc. In most of the requirement we need to retrieve option set values in javascript as well as plugin.

 

  1. If we use Xrm library to retrieve option-set value, we can get only selected option set value and label.

var OptionValue = Xrm.Page.getAttribute(“logicalnameofattribute”).getValue();

var OptionLabel = Xrm.Page.getAttribute(“logicalnameofattribute”).getText();

 

 

  1. In case of plugin as well we can access only label and value of selected option.

int OptionValue = EntityObject.Attributes.Contains(“logicalnameofattribute”) ? EntityObject.GetAttributeValue<OptionSetValue>(” logicalnameofattribute”).Value : 0;

 

string OptionLabel = EntityObject.FormattedValues.ContainsKey(“logicalnameofattribute”) ? EntityObject.FormattedValues[“logicalnameofattribute”] : null;

 

“Any system is only as good as the metadata that it ingests.”
― Chris Bulock

 

I believe that MS Dynamics CRM is as easier as to retrieve metadata in Javascript and c# as well. Here I will show you how we can retrieve metadata of optionset without use of metadata request.

I will explorer here more with technical example how we can retrieve metadata of optionset using stringmap table.

 

  1. Plugin:

Here I’m using fetch expression to retrieve stringmap table of account entity.

string EntityLogicalName = “account”;

string FieldLogicalName = “customertypecode”;

string FetchXml = @”<fetch version=’1.0′ output-format=’xml-platform’ mapping=’logical’ distinct=’false’>

<entity name=’stringmap’ >

<attribute name=’attributevalue’ />

<attribute name=’value’ />

<filter type=’and’ >

<condition attribute=’objecttypecodename’ operator=’eq’ value = ‘” + EntityLogicalName + @”‘ />

<condition attribute=’attributename’ operator=’eq’ value = ‘” + FieldLogicalName + @”‘ />

</filter>

</entity>

</fetch>”;

FetchExpression FetchXmlQuery = new FetchExpression(FetchXml);

EntityCollection FetchXmlResult = service.RetrieveMultiple(FetchXmlQuery);

if (FetchXmlResult.Entities.Count > 0)

{

foreach (Entity Stringmap in FetchXmlResult.Entities)

{

string OptionValue = Stringmap.Attributes.Contains(“value”) ? (string)Stringmap.Attributes[“value”] : string.Empty;

Int32 OptionLabel = Stringmap.Attributes.Contains(“attributevalue”) ? (Int32)Stringmap.Attributes[“attributevalue”] : 0;

}

}

 

 

 

  1. JavaScript:

Using following API request we can get stringmap table in javascript

 

var req = new XMLHttpRequest();

req.open(“GET”, Xrm.Page.context.getClientUrl() + “/api/data/v9.1/stringmaps?$select=*&$filter=attributename eq ‘customertypecode’ and objecttypecode eq ‘account'”, false);

req.setRequestHeader(“OData-MaxVersion”, “4.0”);

req.setRequestHeader(“OData-Version”, “4.0”);

req.setRequestHeader(“Accept”, “application/json”);

req.setRequestHeader(“Content-Type”, “application/json; charset=utf-8”);

req.setRequestHeader(“Prefer”, “odata.include-annotations=\”*\””);

req.onreadystatechange = function() {

if (this.readyState === 4) {

req.onreadystatechange = null;

if (this.status === 200) {

var results = JSON.parse(this.response);

for (var i = 0; i < results.value.length; i++) {

var OptionLabel = results.value[i][“value”]; // Label

var OptionValue = results.value[i][“attributevalue”]; // Value

}

} else {

Xrm.Utility.alertDialog(this.statusText);

}

}

};

req.send();

 

  1. SSRS Report (as optionset parameter)

One more use of stringmap entity is that we can use the same fetchxml to create dataset and pass parameter of optionset in place of hard coded value.

<fetch version=’1.0′ output-format=’xml-platform’ mapping=’logical’ distinct=’false’>

<entity name=’stringmap’ >

<attribute name=’attributevalue’ />

<attribute name=’value’ />

<filter type=’and’ >

<condition attribute=’objecttypecodename’ operator=’eq’ value=‘account‘ />

<condition attribute=’attributename’ operator=’eq’ value=’customertypecode‘ />//Field logical Name

</filter>

</entity>

</fetch>

 

 

Hope this will help you 😊

Tracking Unread Email in Dynamics 365

Recently I worked in a project in which user’s requirement was to display unread emails related to cases. Due to high volume of cases, it was not possible for users to keep track of cases with pending activities (and in this case emails). So I spent some time to think over what options do we have to meet this requirement. And here are all the possible options to meet this scenario:
According to my experience the simplest and best solution is to rephrase the requirement statement and let users see the problem from a different angel. Often time users think of their problem and its solution way in advance. In user’s eyes anything except their solution is not going to work!

  1. Why not trying your negotiation skills? Basically, users want to be alerted for activities pending regarding the cases assigned to them. The easiest solution is to use Dynamics 365 for Outlook app. Once you install the app in your outlook, it links emails with CRM records. This means anytime CRM case receives an email, it first passes through the exchange and subsequently outlook. This behavior will let them read emails and see if it linked to a CRM case. With this, they are not even required to open CRM to see unread emails.
  2. Using Rollup fields. The next solution requires a bit of configuration.
    1. Create a two-option field with the name of “Unread Email” on the email entity (or any other activity you wish to track). The purpose of this field is to track if the email entity record is opened or not. This field can be set manually by user or you can use a javascript to set this field when the form is loaded.
    2. A javascript function to run on the load of Email form to set the “Unread Email” to false.
    3. A rollup field on the case entity with the name “Unread Emails”. This rollup field has the following conditions:

3. Another option is to open your visual studio and write a plugin to keep track of read or unread emails. This would be the worst idea; only because when you have a simple options as above why would you wish for costly solutions?
Let me know if you have more ways to accomplish this task?

Missing Components Error While Importing Managed Solutions

“Do the Right thing, in the First attempt”. This was advise of one my mentors which has helped me a lot to progress in my career. I always tend to follow the best practices in my work and stick to the recommended approach despite the fact that it is not always feasible. I have lost count of late sittings I have done to use “Managed Solutions” in my work (Sounds familiar? 🙂 ) and some of these nights taught me a lot.
In one of my early works, I encountered the following scenario:
  1. In my Development environment, I created a new Unmanaged Solution with a new publisher (to identify who made changes). I added some components to the solution.
  2. While adding components I received the standard warning of “Missing components” to be added to the solution which I ignored. This was an expected action because my destination UAT environment already had the missing components so I was not expecting any dependency issue.
  3. I exported my solution with the new publisher as a “Managed Solution”.
  4. When I tried to import the managed solution in the UAT environment (in which already had all missing components), I received the below error.

After a some search, I learned the following: “The import of a managed solution will FAIL due to missing dependencies if imported solution publisher is different than the publisher who owns the missing components“. So you will have two options:
  1. Either add all missing components while you export your unmanaged solution as managed solution to ensure the platform does not try to find missing components from other solutions.
  2. Change the publisher of your unmanaged solution before export as managed solution and ensure that all missing components in your solution are under the same publisher name in your new environment. 

 

5 ways to insert images in Dynamics 365 email templates

 

Disclaimer: Some of these methods are unsupported, so please check Microsoft documentation for updates.

1. The old school copy paste.

1.You need an image that is hosted on a public-facing website. Simply go to that image, right click, and select Copy Image. Works in IE, Chrome, Edge, and Firefox. The image must be rendered in browser view.

2. Open a new email template window, hit ‘Ctrl + V’ to paste the image. Your image should now be visible.

2. Upload your image in a file repository online (OneDrive/Dropbox/Google Drive)

Another secure way is to upload your image to your preferred file repository, make the file public, and embed it in your email template.

  1. Simply get the direct link to the image you have uploaded.
  2. Open the image in browser view, right click and select Copy Image.

3. Open a new email template window, hit ‘Ctrl + V’ to paste the image. Your image should now be visible.

3. Base64

If you do not want to upload your image to a site, you can encode your image using Base64.

1. Use an Image to Base64 converter. I personally use this website but it’s up to you, you can use MS Flow if you want 🙂

2. After you’ve converted the file, copy the Base64 code. Enclose it with an <img> tag. Select the text and copy and paste it to your email template.

3. When you insert a template into you email, the image should render properly.

4. Clickable images

If you want your image to point somewhere on the web, then you would want to make use of a few friendly HTML tags.

Example:

<a href=”https://dynamics.microsoft.com/en-us/”>
<img border=”0″  src=”https://mspoweruser.com/wp-content/uploads/2016/10/Microsoft-Dynamics-365-logo.jpg”></a>

  1. Just copy the snippet above and replace the href tag to whatever URL you want the image to direct to.
  2. Open a new Email Template window, paste the HTML snippet. Select Save & Close. 

3. When you try your new email template, the clickable image should work properly.

5. Image slices

This is a bit beyond this post, but this is a common issue especially if you want to send out marketing emails. I would just like to share what I know.

  1. Open your image in Photoshop, make your desired slices using the slice tool.

2. Once your slices are ready, right click on a selected slice, then select Edit Slice Options.

3. Enter URL/target depending on where you want the slice to direct to.

4. Once you’re set, select Save for Web and Devices and then select Preview.

5. Copy the generated HTML script and replace the img src tag to the direct link of the image.

6. Paste it on your new email template. Select Save & Close.

7. When you try your new email template, the image slices should be rendered properly. 🙂

MBAS H4CK4Good – Atlanta – June 2019 A First Timers Account….

MBAS H4CK4Good – Atlanta – June 2019

A First Timers Account….

Graham “show-me-the-code” Tomkins
Expectations:
(Adrenaline Level: Normal +10)

Upon signing up for my first PowerApps Hackathon, my brain ran off with dreams of sleep deprivation, Visual Studio compiler errors, night long lock-ins, pizza, tears, Coca-Cola, intravenous coffee, lengthy presentation and a serious atmosphere….

How wrong was I (in a good way it turns out)!

Prep!:
(Adrenaline Level: Increasing +20)

After being contacted by Geetha the awesome leader of TeamBlack (woo go team!) my thoughts raced on further – just how much code can we produce? What constraints will we have? Etc.  Across the week preceding the Hack, the team was stood up, got to know one another, lost members, gained members – most importantly (or so we thought) we had used the numerous evening calls to read and understand the scenarios, choose one and put a plan together to ram as much of the platform into a solution as humanly possible – by the time it came to travel – we had a plan!

An awesome Plan.

Arrival and Openings:
(Adrenaline Level: Static +20)

With the jet lag kicking in and the immense American breakfast sitting heavy, we arrived early (ish) with the like of Chris H, Will, Lucy M, Sarah A and Sarah C to find an ever growing room of helpers and equipment getting setup – also crucially, there was ample caffeine available.

Give me the Coffee and No-One Get’s Hurt

After the meet and greet with the team – plus newly assigned awesome team members – and muchos consumption of coffee and diet coke – the opening presentations occurred in all of their profanity riddled glory – whilst they were great, it dawned on us as a team that they had underlined something fundamental that was missing with our plan….. a solid and relatable problem statement!

Oh $%^&!

GO GO GO!:
(Adrenaline Level: Argh! +50)

Panic! Quick find a problem statement to fit our plan…. Or better yet – torch the original tech driven plan in favour of something with a relatable and real world problem statement (Thanks to Ghaith)!

Light fuse and stand well back

The team rallied around the real world experience in a medical disaster relief situation and we re-formed the plan into a solvable problem, the tasks were divvy’ed up and we began!

GO TEAM! YEAHH! (American Style Wooping)

 

Access Denied? Build Build!:
(Adrenaline Level: Argh^2 +60)

After the sorting of permissions and the usual environment fun and games, everyone was in and working – Josh on PowerBI, Geetha on the Canvas App, Ludovic and Ghaith on real world data and guidance of the in progress Model Driven App whilst keeping one eye on the presentation and demo.

Problem 1 occurred – Why won’t it accept the Accelerator package solution?! It turns out regional locale settings dramatically affect the result of demo data 😊 after that we were away with the usual fun.

TBH the trial environments responded pretty well throughout the barrage of changes being hurled there way by teams left right and centre.

Who the Hell Pressed Publish ALL?!

 

Is that Food I can smell?:
(Adrenaline Level: Floor +0)

People kept walking past my desk with plates of something that smelt divine – and being a professional and 110% focussed on my work – I resisted…. For about 15 minutes….

Omnomnomnomnom omnomnom

The Blackout – where did my hours go?:
(Adrenaline Level: Ceiling +70)

After the chicken, mashed potato and on-boarding of more caffeine, we hunkered down… the carnage continued and we felt on track…. That was until William (full name used for serious effect) put the count down clock upon the screen…. It’s ok…. It must be a joke!…. right?…. we must have 3 or more hours remaining….. nope…. 41 minutes 19 seconds….

 

What The Actual *&^% Happened!

.…. The time ticked away and with 9 minutes to go we had a great framework, some things were working – others were bodged or ditched completely – at this point we felt like we had left enough time for the team to focus on the presentation practise and planning….

Honest. Guv.

Stop! Demo Time:
(Adrenaline Level: Penthouse +200)

The adrenaline started to peak, did it work? Who was first? Holy Crap where did all of these people come from??

We were up 2nd, it went well – didn’t it? No-one threw food or booed too loudly, that’s a plus right?

And breathe…

As we watched and applauded some awesome teams and results – the strength of the community I was sat in became ever more apparent.

Judges Deliberation:
(Adrenaline Level: And Relax +10)

Their task was tough, the teams had produced some fantastic outputs…. And bribes…. They needed time to think…. And that left a void in the plans and presentations, which, in any other arena would have been awkward and left me feeling uneasy – not here though.  As we went around the room for introducing and applauding the team leads, individuals from all over the place starting chipping in with feedback and comments, we heard from Lucy and most of her family tree, the charities who have given up their time on a Sunday etc. it dawned on me that all of the other ‘communities’ I had been party to, in my technical career prior to this were very much forced, cold, meeting like experiences in comparison – what we had here, in all of it’s profanity riddled glory, was the complete opposite.

Woo Group Hug

 

Overall:

The winners deserved it, I loved it and will be will be doing more, everyone had a great day (or so I think 😊), next time I will focus in on a smaller problem rather than trying to solve a wide array (which we did get close to but is damned impossible to demo in 5 mins!).

I will now be doing my best to pour some of my 13 years technical CRM (!) development experience into the community – #GottaLoveTheCode

Thanks All – This was not a boring Sunday

 

Proper Beer:
(Adrenaline Level: Replaced with Endorphins and Fermented Hops -100)

Oh and not to forget the lengthy celebrations that occurred after the event with a superb turn out at the German Beer Bar

Hack4Good – My First Hackathon

Hack4Good Group Photo

TL;DR

I’ll warn you – this is a long read! To summarise though – this Community is beyond awesome and the Hack4Good event just proved that we can genuinely change the world.

The Hype

When TDG announced that there was to be a hackathon in London, with the focus of it being the Non-Profit/Charity sector, I was straight in there on the registration (after which Mrs H was then informed  that I was booked in – easier to ask forgiveness than seek permission)

This was to be my first ever hackathon, a year ago I hadn’t even HEARD of hackathons, and it ticked so many boxes for me. For those who don’t know, it’s not hacking in the sense of breaking into systems etc – this is all about using software and platforms that are at your disposal to hack together a solution to a scenario within a given time limit. The most innovative, practical, deliverable, and potential-filled solution would win the day.

When the emails started to come out Chris asked (in typical CAPS LOCK STYLE) if I would lead a team. Me being me, I jumped at the chance – in for a penny, in for a pound.

And so the excitement began. Weeks turned into days, and my poor family and friends got fed up of hearing how stoked I was. When I saw this list of other team leaders, and saw the people who were on my team, I started to question my credentials. There were so many legends of the community involved – people I look up to, and follow with eagerness and anticipation.

The Buildup

At 5:30am on Saturday 16th February, loaded with snacks and tech, I headed towards the railway station. Nerves meeting with excitement, doubts meeting determination.

Arriving just before 8am I was struck by just how, on first impressions, the Microsoft Reactor in London is a strange space. Fully stocked drinks area, with stereotypical caffeine overload available, games area, and then a large open space with tables and a large video screen. It almost seemed spartan in its simplicity.

As everyone started to arrive, and we set up our various laptops and devices, that open space suddenly became this hive of technology and potential.

Hugs and Hellos were dished out with abandon, and cries of “It’s so good to meet you at last” were deafening in their abundance. I moved from person to person and finally got to meet people who I’d talked to online or who I’d been following for ages. I was even surprised to find people who wanted to meet me!

The Morning

With typical fervour and energy the trio of Chris Huntingford, Kyle Hill and William Dorrington (who had come over for the start despite having removal lorries outside his front door!) kicked off the day.

A surprise video message from James Phillips, Corporate Vice-President of Microsoft, impressed upon all of us just how much the community is noticed by Microsoft and raised the expectations of all in the room another notch. If our dials were at 11 before that video, they were at 12 afterwards – and even Spinal Tap didn’t get to 12!

I’ll be honest at this point and admit that I can’t remember who presented exactly what and when – my mind was a maelstrom of ideas and planning.

The engaging Architect and Storyteller Alex Rijnoveanu (@WomanVsTech) from Microsoft delivered enthusiasm and encouragement.

The very funny, and trying-not-to-be-as-sweary, Sarah Critchley (@crmcat)presented in a way that only she could – with an idea about helping out stray cats using powerapps and other bits.

m-hance presented alongside Solent Mind, and that I related to what they did in a huge way because of the work I see in my day job at St. Andrew’s Healthcare. It was a sobering presentation in many ways, but also opened up our eyes as to “the art of the possible”.

Saurabh Pant and Sameer Bhangar had flown in from Microsoft (yes, all the way from Seattle) just for this event and then through away their planned roadmap presentation to give us all a major pep talk and stir us up even more. I have to say that the funniest thing was their very friendly (and also slightly sweary) rant about how much they had heard about Samit Saini in the past year! In so doing, it just served to show us all just what was possible – those who knew Samits journey smiled and laughed, and those who didn’t had their eyes opened to a new level of potential.

Quantiq presented some of the work they had done with the Leonard Cheshire charity and also give a glimpse of their toolkit for healthcare and the ideas kept flowing. As I look around at the other teams I could see people taking notes, typing away, and whispering to each other. This hackathon was going to be competitive, but boy was it going to deliver some amazing results.

I’ll apologise now to all the presenters as I haven’t done you justice in my few words, and I may have mangled your presentations up, but believe me when I say that all the presentations hit home with all of us listening. Those presentations took our plans, determination, and enthusiasm up to levels you just wouldn’t believe if you weren’t there!

Let The Hacking Commence

With a final presentation to lay down the rules of engagement, and also to make it clear that stopping for lunch was most definitely not an option, the starters gun was fired and the 4.5 hours of planning, building, and preparing began.

The buzz in the room was electric as each team discussed and planned out their scenario and then grabbing whiteboards and white space to map out what a solution could look like.

I’ll be writing more about the Team White proposal in the coming days, as there is more to come from that, but we settled on a solution that would utilise so much of the stack but would be able to be modularised and deployed as a “solution-in-a-box” approach.

With my amazing team of Penny, Josh, Denis and Raj we set about building Microsoft Forms, PowerApps, Dynamics 365 solutions, Flows, and the concept of the Hololens. Oh yes, Gadget King Raj had brought us a Hololens – and that just expanded the possibilities for us. We weren’t looking at gimmicks and tech-for-techs-sake, we were looking at a genuinely life-changing solution using some amazing software and hardware.

With a soundtrack of some amazing 80’s rock being pumped out (and yes, thanks Chris for Rickrolling us!), everyone was doing something. If you could have harnessed the energy in that room at that point you would have been able to power half of London.

Floor walkers popped by each of the teams each one listening and absorbing before offering advice, help, suggestions and more – but what was even more amazing was that the teams were all talking to each other. You read that right, the teams all talked to each other.

There was sharing of scenarios, encouragement, suggestions for improvement or additions, and helping hands. This was a competition that was like no other. This was a competition in which we ALL wanted to see every team achieve their goals. I’m a mildly (ok, seriously) competitive person at times and yet there was no sense of barging past each other to reach the finish line. This was collaboration and cooperation in competition towards a common goal.

The Winners

And with 4 and a half hours gone in the blink of an eye, the race was run. It was time to do the 5(ish) minute speed-dating presentation of the solutions.

As each team stepped up and shared I really do not know how I held it together. These were genuine scenarios, delivered with innovative solutions, and by passionate people.

Every last one.

We all watched, applauded and cheered. None of us could separate the competition. Judging was going to be tough, and so it proved.

With our hosts waffling as much as possible whilst the judges adjudicated, we all sat wondering just who it would be. We all wanted to win, but we all knew that whoever did win was fully deserving of it.

With the decision made, the announcement came that Team Grey (who had flown over from Germany to take part!) had won with an app for rounding up as you ordered food or transport and donated this to your charity of choice. Writing that makes it sound simplistic, but if you think of the implications of it you soon realise that it has massive potential.

It Is NOT Over!

The final speeches and thank you’s were made, the applause leaving hands feeling rather raw and sore, but this isn’t the end. Every proposition in the room has legs, and every person in the room knew that this couldn’t stop just because the clock had run down.

Saturday saw the start of something, the spark that starts a fire. We all felt it and reading all the posts on twitter and LinkedIn etc after the event just reaffirms that determination.

We saw not a glimpse, but rather a bright shining beacon of the power of the community. I go on and on (and on) about Community but what happened in that room on Saturday, with just a part of the enthusiastic and passionate community present, just proved what we can all achieve if we put our minds to it.

Here TDG we have the Community Collaboration Portal for working on community projects together, and there’s the Power Platform Bank for making solutions available, and then there’s all the social media channels out there as well.

Let’s turn this spark into a raging fire of change. Let’s use our collective skills to build new solutions to old problems.

Oh, and let’s do this again real soon!

 

 

 

An Event Like No Other

January 26th, 2019…. that date will be etched in my memory for a very long time. It was a momentous occasion as it was the very first Dynamics 365 Saturday event ever held in Scotland. If you haven’t been to an event like this before, and you are involved in Dynamics 365 in any capacity, it’s worth checking out (http://365saturday.com). These events are organised and presented by members of the community…. for members of the community.

The event was organised by four Dynamics rock stars – Mark Christie, Iain Connelly, Hayley Talent and Claire Carmichael. After sorting out the venue (University of Strathclyde Technology and Innovation Centre in Glasgow), the next step was to get some presenters. The line up read like a whose who in Dynamics…. There were Microsoft MVP’s, experts from partners, consultants and Microsoft representatives all there to share knowledge and experience with others willing and wanting to learn. Here is a quick look at the line up of sessions:

The welcome upon arrival was pretty impressive… we had a bagpiper guiding us through the entrance. It was something I don’t think I will ever forget. Hopefully the other attendees felt the same.

I had my own session to prep and plan for but was more excited about attending some of the others from my fellow presenters. I reviewed carefully, but no matter who I went to see, I was missing content from so many amazing people. In the end I opted to go to Ryan Maclean, Kyle Hill, Sara Lagerquist and Lucy Muscat. Each person had something different I knew I would be able to learn from. They were all amazing, as I had no doubt they would be. As a fellow speaker, I also felt a sense of pride and admiration for each person standing up and ‘doing their thing’ (not just the ones I was lucky enough to see). Anyone who has ever done this themselves will know, it takes a lot of guts to stand up in front of a room. So awesome job to each and every one of them!

The session had close to 250 in attendance. Feedback from those who had been to other D365 Saturday events is that the event in Scotland has set such a high bar, it’s the one to aspire to emulate. I am so so proud to have been a part of this experience. It was expertly planned by the organisers, but I think the speakers played a huge part in the run up to the event. We all tweeted, liked, shared, reshared and retweeted as much as we could without annoying others on social media.

I can’t wait for the next event, but it’s going to take a LONG time before I ever feel so much love, warmth and excitement being involved in this way.

IoT Button: Process automation with Microsoft Flow using NodeMCU and Arduino IDE

IoT Button: Process automation with Microsoft Flow using NodeMCU and Arduino IDE

 

In this article it will be developed an IoT button applied to the scenario of maintenance of a coffee machine using Microsoft Flow. However, it can be easily adapted to any other scenario or application.

Requirements

  • Access to Microsoft Flow or Azure Logic Apps
  • Arduino IDE
  • NodeMCU development board
  • Push Button
  • 1 x 330 Ω resistor
  • 1 x 1M Ω resistor
  • Jumpers
  • Breadboard
  • Micro USB cable

Setup Microsoft Flow  Environment

    1)    Microsoft Flow portal

Access Microsoft Flow, log in and click “My Flows”.

1.png

 

2)    Create from blank

Click “Create from blank” to create a new workflow.

2.png

 

    3)    Request/Response

Give a name to your Flow. Select the Trigger “Request/Response”.

3.png

    4)    Method GET

In “Advanced Options”, choose  “Method GET”.

4.png

 

5)    Add an action

Click “Add an action” to add a new action.

5.png

 

   6)    Send an email

Choose the action “Office 365 Outlook – Send an email”.

6.png

     7)    Create Flow

Complete all required fields (as you wish), and then click “Create Flow”.

ingles 1.png

    8)    HTTP GET URL

Then copy and save the HTTP GET URL:

https://prod-32.westus.logic.azure.com:443/workflows/<ID>/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=<ID>

8.png

 

Hardware Setup

    1)    Building a Circuit on Breadboard

Build the circuit like the one shown below.

MicrosoftFlow-LogicApps-Button-Frittzing Project_bb.png

Software

The ESP8266 NodeMcu comes with a firmware that lets you program the chip with the Lua scripting language. But if you are already familiar with the Arduino way of doing things, you can also use the Arduino IDE to progam the ESP. In this tutorial we’ll use the Arduino IDE.

 

IDE Arduino setup

    1)    Package ESP8266

Download the IDE, and install it. Open the IDE; Choose File -> Preferences, in “Additional Boards Manager URLs” insert the URL “http://arduino.esp8266.com/stable/package_esp8266com_index.json” and than click “OK”. After this steps, your download will start automatically. Once it is finished, restart the IDE.

9.png

 

    Software Setup

Download the file “MicrosoftFlow_IoT_JoaoLucindo.zip” attached and replace the values:

  • SSID by your wireless network name
  • PASSWORD by your wireless network password
  • HOST by the strings of the HTTP GET URL before 443 (in this case:  “https://prod-32.westus.logic.azure.com” )
  • URL  by the strings of the HTTP GET URL after 443 (in this case “/workflows/<ID>/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=<ID>”)

 By doing that, the final code will be:

#include <ESP8266WiFi.h>

//static const uint8_t D0   = 16;
//static const uint8_t D1   = 5;
//static const uint8_t D2   = 4;
//static const uint8_t D3   = 0;
//static const uint8_t D4   = 2;
//static const uint8_t D5   = 14;
//static const uint8_t D6   = 12;
//static const uint8_t D7   = 13;
//static const uint8_t D8   = 15;
//static const uint8_t D9   = 3;
//static const uint8_t D10  = 1;

int inPin = 16;   // pushbutton connected to digital pin 0   
int val = 0;     // variable to store the read value
//Include the SSL client
#include <WiFiClientSecure.h>

char ssid[] = "<SSID>";       // your network SSID (name)
char password[] = "<PASSWORD>";  // your network key

//Add a SSL client
WiFiClientSecure client;


void setup() {

  pinMode(inPin, INPUT);      // sets the digital pin 1 as input

   Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // Attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }


Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);

}

String MicrosoftFlow() {
 
  char host[] = "prod-37.westus.logic.azure.com";

  if (client.connect(host, 443)) {
    Serial.println("connected");

    String URL = "/workflows/<ID>/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=<ID>";

    Serial.println(URL);

    client.println("GET " + URL + " HTTP/1.1");
    client.print("Host: "); client.println(host);
    client.println("User-Agent: arduino/1.0");
    client.println("");
    }
}

void loop() {
  
  
  val = digitalRead(inPin);  // read input value
  delay(200);
  //Serial.println(val);

  if(val==HIGH){
    MicrosoftFlow();
    delay(1000);
    setup(); 
    }
  
}

 

Now you can compile and upload the code from your computer to the device. You can see the result (after press the push button) in the picture below.

12 - Copy.png

Download package for this from the Power Platform Bank – direct link here: LINK

 

 

 

 

 

 

 

 

 

 

 

Powerapps Collection to PDF

Use Case : We do not have Office 365.
1) Is there a way to send a Collection in an email using on premise exchange?
2) If not, what is the best way to download the content of a collection in a PDF?