Uncategorized

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?

Making PowerApps accessible

One item I have seen overlooked in PowerApps is the functionality around the “App Checker” ….”But William I use the App checker”…. I do not mean the formula app checker I am referring the “Accessibility” checker shown in the image below:

 

It is prodigiously important when creating apps, well anything actually, that it is made available for ALL people – this includes those that may have issues with hearing, sight and other impairments. Jenny Lay-Furie provided us with an absolutely phenomenal presentation on accessibility and how Microsoft have helped, and continue to help, many people from all walks of life live well their life!

PowerApps has an accessibility checker (shown in the image above) which I implore you to monitor when creating apps as this will help you fine tune object for accessibility that you may not have thought of such things like ‘Tab Stops’ – those who have to interact with your app using a keyboard will need this functionality to be set up.

The following items are crucial for accessibility:

  • Layout and Colour
  • Keyboard Support
  • Screen Reader Support
  • Multimedia captions

Now due to time I do not have time to write out my guide to improving accessibility but fortunately I do not have too as Microsoft have provided us with a brilliant PowerApps focused guide which I have copied below or you can find the link here


Layout and color

Common sense and uncomplicated design helps apps be more accessible to all users. When doing heavy customization of apps take note of the below suggestions. PowerApps themes are by default accessible.

  • Ensure all elements are clearly visible and text is of sufficient size. All content must be easily read and understood by the naked eye.
  • Avoid using the visibility property of items to bring an element into view. If you need to show something conditionally, create the content in a new screen and navigate to it and back.
  • Ensure input elements are labeled on the screen. AccessibilityLabel property defines what the screen reader will announce.
  • If customizing colors, ensure the contrast of text:background is 4.5:1 or greater. Software tools that assist this process are readily available.
  • Ensure layout follows a logical flow when read top-bottom, left to right.

Keyboard support

When testing your app’s accessibility, ensure the app can be used with the keyboard only, the accessibility modes on iOS and Android, as well as navigated successfully with the screen reader enabled.

For keyboard navigation (with or without the screen reader) ensure that a logical order is followed when using the TAB key to navigate to input fields by setting each control’s TabIndex property:

  • Label, Image, Icon, Shape contols – if they represent interactive elements (i.e.buttons) set TabIndex to 0; if they are decorative elements or text, set TabIndex to -1.
  • Avoid setting tab index higher than zero.

Screen reader support

The following software combinations are the supported recommendations for consuming PowerApps with a screen reader:

  • Windows: Edge / Narrator
  • macOS: Safari / VoiceOver
  • Android: PowerApps app / Talkback
  • iOS: PowerApps app / VoiceOver

To ensure a satisfying experience with the screen reader it is recommended to:

  • Ensure all input controls have the AccessibilityLabel property set.
  • For images set AccessibilityLabel to an appropriate description.
    • If a picture is not used as a button or a link (i.e. icon is there just for the decoration) and should not be read by the screen reader, make sure the AccessibilityLabel is empty or not set.
    • If a picture or an icon is used as a button, then set TabIndex to 0 and AccessibilityLabel to the link description.

Multimedia

Ensure all videos are captioned and a transcript of all audio recordings is available to the user. Video control suppports closed captions in WebVTT format via the ClosedCaptionsUrl property.

Note that with the screen reader enabled, Timer does not announce button text, but how much time has passed. Announcements can’t be turned off, even if timer is hidden with low opacity.

Working with signatures

If you have a signature field that uses the PenInput control you need to enable an alternative method of signature input. The recommended way is to show a TextInput control where a user can type their name. Ensure the signing instructions are placed in the AccessibilityLabel property and the control is placed close to the Pen input – to the right or immediately below.

Related:

 

Pancake & Milkshake – inspired by the Wreck It Ralph 2 trailer

Pancake & Milkshake – The rules are simple:  The kitty gets the milkshake…the bunny gets the pancake!

Here you can download the PowerApps solution I create in this video, where I use PowerApps to create a game inspired by the Wreck It Ralph 2 trailer. (check it out, it’s hilarious)

Fortunately, someone already created the art and sounds that are the stars of the show.  Mothman64 built a very elaborate Flash based version (complete with Easter Eggs), and generously allowed me to use his work for this PowerApp.   Check out his Mothman64’s art here:   https://www.deviantart.com/mothman64.   Those images remain his property.

 

To see a short demo of the app check here.

Where does CE PSA fit if I have Finance and Operations?

Updated last: 23/12/2018

This is a live blog post that will be updated with changes that are applied to the application – I’ll also update it with input from the community too. 

Right, I thought it’d be best to write a quick post on this topic as it is a question I receive quite regularly which is along the lines of…. “Hey Will, I see you’ve been working on Customer Engagement PSA – I don’t really understands how that would fit in with an organisation that has Finance and Operations system or at all”.  Then I take a deep breath and I say something along these lines…

(There are a few version of this response depending on what the business does)

PSA flow:

What we must remember is PSA is there to ultimately help the prospect to cash process, but hey we hear and read “Prospect to Cash” thrown around a lot and it doesn’t help explain anything, what I mean with this is as follows;

  1. the ability to turn someone you may have been in contact with to a Lead
  2. then qualify said Lead to an Opportunity
    1. During the opportunity process you will start, hopefully, creating a proposal and to really provide a precise as can be quote it is best to create a project with a thorough work break-down structure along with associated costs (expenses, role costs etc.) then to import this structure along with associated costs into the contract to provide a quote.
  3. Submit the quote to the customer and hopefully mark it as won – or maybe you may have to create another until you ultimately, hopefully, win
  4. The quote then turns into an Order/Contract with an associated project and all this richness can then be synced across to Finance and Operations – the contract will be pulled across along with the associated project details; project name, project contract associated, actual start date, work breakdown structure (if you’ve assigned resources then these can be brought across too) etc.

Where to place your personnel in a PSA & FinOps stack implementation:

Now the more interesting piece is where do you ask your employees to enter their Time and Expenses, where do you ask the Project Manager to carry out their tasks and where do you ask the Resourcing Manager to sit?

Now we must remember PSA – IS NOT A FINANCE SYSTEM, IT IS NOT TRYING TO BE A FINANCE SYSTEM, IT’S PURPOSE IS NOT TO DEAL WITH ANYTHING RELATED TO ACCOUNTING AND FINANCE, the purpose is to provide a buffer between account management and back office tasks such as the accounts department and to provide more granularity to items such as quoting (remember this is from a perspective when Finance & Operations exists as part of the implementation).

However, what it does do well is to provide the ability to price up quotes thoroughly thanks to this project creation functionality and it also performs some project processes well that can then be handed over for further processing.

Now let’s take a quick dive into where to place the Project Managers, Employees and Resourcing Managers.

Employees– now, personally, as an employee I prefer the user interface in CE  for entering Timesheets and Expenses rather than Finance and Operations – it is more aesthetically pleasing. However, there are limitations around expenses – there are no expense policies out of the box so this would need to be provided via customisation.

Along with other workflow requirements, and let’s face it expense workflows (from my experience implementing systems, especially in global systems) can be incredibly complex which will also be better suited for Finance and Operations as PSA only allows one level approval when in reality multi-level and conditions are required.

PSA does have the ability to bring in the hours you entered last week, or the appointments/projects you’ve been assigned in the resource scheduler but Finance and Operations allows this too.

What I’m getting at here is it is best to stick with Finance and Operations and if you wish to make the user interface more kinder on the eyes then use the mobile application functionality or throw together a PowerApp.

Resourcing Manager– now this is where I lean towards PSA, as long as you sync proficiency models, skills, characteristics, roles, cost prices, sales prices etc. between Finance and Operations and CE PSA (or if you’re company is using talent then have a network of the three Talent>PSA>FinOps) then I much prefer the Scheduling board within PSA and the way you submit requests to be fulfilled. Look at the screenshot below and how glorious it is, colours, pictures, charts – PSA has it all (you can even use the map functionality- living the dream)!

Project Manager– now this depends on the organisation, PSA allows the PM to manage their project team, monitor cost absorption (effort tracking as well), look at project estimates, submit resourcing requests (all this also exists within Finance and Operations)- but if you want your PM to also invoice clients, perform a more advanced level of WIP adjustments then this role will suit Finance and Operations.

Also the dashboards are not that brilliant in PSA – yes you can use PowerBI embedded functionality but Finance and Operations has brilliant out of the box reports, as well as enhanced areas such as the Project Manager Workspace (provides an overview of their project related activities as well as allows them to initiate their most frequent tasks) as well as PowerBI integration – soooooo…..

General Finance points related to PSA functionality: PSA does let you push through flexible journals, you can export actuals (or integrate them), you can adjust actuals (as well as few adjustment histories) and you can invoice through funding sources and billing rules (not as advanced as Finance and Operations) set out on the project contract.

Important to note that there is no out of the box functionality to tie Purchase Orders to projects, thus this is not wrapped up and summed into items such as const consumption etc. a journal can be used for this in the mean time but creating the PO in FinOps and then pushing that across as a journal to keep track in PSA may be one route (dependant on if your PMs sit there if not it really does not matter). Furthermore to this there is no commitment or encumbrance accounting to keep track of the financial health of a project with regards to Purchase Orders.

Another key part of project management is budget control. Unfortunately there is no budget control that sits within PSA only a cost consumption meter so this will have to be validated/tracked through Finance & Operations but the validation will only occur post transaction if you choose to leave T&E within PSA (not a wise move).

Conclusion:

So let’s conclude – PSA DOES HAVE A FIT within the full suite of Dynamics 365 and for organisations that uses both CE and Finance and Operations if it is used for it’s intended purpose which in my eyes is to assist with quoting proposals and assisting with some of the non-accounting project processes to allow that smooth transition from sales to delivery.

And one more thing….. if the company DOES NOT have finance and operations but another Accounting system that does not include project management and they also require a sales system then PSA is a great fit!!!!