This is the start of our next chapter in our Business Process Flow and asynchronous work journey. How can our team keep track of tasks we need a different department to execute? In this post I want to explore different architectural choices you can make and what considerations there are. This of course depends on a lot of variables and I will try to give you some points what to think about. In other words I try to explain my thoughts whenever I say “It depends” as an answer!
This blogpost is part of a series where I explore how to support Asynchronous Work with Business Process Flows. The Business Process Flow is an old tool in our toolbelt. But coupled with all modern Power Platform and Microsoft 365 Collaboration capabilities it helps keep track of processes. Now we are on the topic of setting out tasks and keeping track of them.
The Business Scenario
We are working in a service center at a high-end phone company. We are still working the case of the Broken screen. A loyal customer is asking us for help because they broke their screen! We can now replace their screen because our manager gave approval to do so. We will ask the logistic department to send it.
But how can we ensure the logistic team will do so? Often times an e-mail is not enough to keep track of all items that are send out. In our service center we want an overview of what the status is of our request. The logistic department wants an easy list of items to ship.
Now I believe this scenario is fairly common and applicable to a lot of business processes. There is a need to coordinate work you or your team set out to other departments. Especially when they scale in frequency or complexity! Other examples could be:
- A new employee process where HR coordinates all IT and on-boarding tasks.
- A sales request process for specific expertise to help win over a customer.
- A planning process to get input from type of work to be done from project managers
If there is a logistic app
Let me try to describe a few possible scenario’s you can use to set out tasks and keep track of them. I will focus on Microsoft 365/ Azure and mostly Power Platform technology. When designing a solution like this I always ask first: What systems are currently in place and where does the user does their work? I want to make sure the logistic employees can stay in the flow of their work and not create a separate app where they have to log-in etc.
I will write-up the integration possibilities for two answers:
- There already is a Logistic App. This app already facilitates some kind of Task based work. I want to utilize the possibilities of this application instead of creating my own.
- There currently is no Task based work in-place. The department relies on e-mails or printed work orders to ship products.
Lets dive deeper into the first option!
Pro code solutions
Virtual Tables is a perfect fit for our scenario. If we set this up right, we can Create, Read, Update and Delete (from now on: CRUD) all tasks we want to the external solution. The reason I write classify this under a pro-code solution is because it currently is fairly complex to set-up. It requires quite some technical knowledge. And we need to write C# plugins to facilitate CRUD. This also means a higher Total Cost of Ownership as deeper technical skills are needed to debug potential issues. However it integrates extremely nicely into the UX of Model-Driven Apps. We can even automate the creation of tasks against the Virtual Entity. All in all my go to option for integrating singular tables/ methods with Dataverse.
We can of course write our own Custom Integration using various pro-code options. Using Plugins or various different Azure techniques such as Azure Functions, Service Bus, Logic Apps There is also some 3th Party integration tooling available to create these. The focus of this blogpost is not an overview of custom integrations as our business scenario is only task based work. However if you want to integrate multiple tables or even multiple applications then this might be your best solutions. Downside again is that this is done with pro-code methods and thus requires these skills to build and maintain it.
Low code possibilities within the Power Platform
If you want to go the low-code route there are is a strong option in the Custom Page. This is a new page type within Model-Driven Apps. They provide the flexibility of a canvas app straight into the Model-Driven App as, for example, a full page. You can also utilize them as Dialogs or Side Panes. For our solution we can use full CRUD to the Logistic Application using a (custom) connector. Out of the box it has less options then Canvas Apps, however you can copy paste controls from Canvas Apps towards the Custom Page. Coupled with modern Fluent UI controls, this can give a seamless user experience.
The Embedded Canvas App option is available for a few years now. It provides the ability to add a Canvas App to your Model-Driven Form. I used to be a big fan of this integration, it can help guide users through their processes. With Embedded Canvas App you have all possibilities of Canvas App at your disposal, just as the Custom Page. Beware of the long loading time though, the Form will load before your Embedded Canvas App will. That does not give the best user experience. Although I strongly prefer Custom Pages now, this has the benefit that it can load right inside the Form.
Another option is to create an integration with Power Automate. You can create multiple Cloud Flows to synchronize Tasks from our Model-Driven App towards the Logistic Application. And of course vice versa, create Cloud Flows to update the Model-Driven App tasks on update of that task in the Logistic Application. Power Automate Desktop might be a necessity if the Logistic Application has no API. We can then utilize the RPA capabilities to still create an integration.
If you go with low-code I would choose a Custom Page if the user needs some form of guidance of what tasks to create. If it is fairly straightforward replication of data then Power Automate might come on top. I will no longer choose Embedded Canvas Apps. The load time simply is a deal breaker for me.
Replace that paper!
Now what if there is no task based system in place for this logistic team? How can we keep track of the progress they make on our support ticket? We do not want to e-mail, or worse call them every few hours to see how far along they are. That would not be a healthy working relation! However it can be absolutely vital to keep track of progress to keep our customer informed and happy.
Integrate with Microsoft 365 tools
Now before I start off a few disclaimers; This subject is not my area of expertise. I am no expert in the world of Microsoft 365. However I want to give you a starting point when designing your solutions. Also if you reference the Licensing Guide and read this black and white we are moving into Multiplexing territory. I advise you to keep licensing in mind when choosing your solution.
With Microsoft / SharePoint List you can organize tasks to be done. If you need you can add extra information and add a status. From within our Model-Driven App we can create tasks inside Dataverse and use a Power Automate Cloud Flow to synchronize these tasks to Microsoft Lists. The Logistic Department can then pick up these items of work to be done and if a status changes on that list item, a Cloud Flow can then update Dataverse.
Teams Integration for Collaboration
The same type of integration can be set up with Microsoft Planner. Microsoft Planner allows you to create buckets of work with different Swim Lanes for different stages. The Logistic Department has a nice overview where each work is situated. From Order Picking to Shipping, from Waiting to be Picked Up, to Send. Ideal if you have different types of stages for different people. You can integrate both Microsoft List and Microsoft Planner inside Microsoft Teams to enable close collaboration as a tab.
What you can also do with Power Automate is simply post a message to a Teams Channel. Now this might not sounds as appealing, but with Adaptive Cards for Teams you can post rich interactable cards. This message can asks the logistic team to send an item. And when they have prepared the package for shipping, they can press the button on the Adaptive Card to let us know they are ready!
I like the simplicity and the power of Adaptive Cards. But I would only choose this in our scenario for simplistic and low-volume tasks. When the tasks get more complex you can choose between List or Planner. I would choose Planner if you have a more complex process and thus want to utilize the swimming lanes. I would use Microsoft List for scenario’s in-between Adaptive Cards and Planner.
Within the Power Platform
Now we create and coordinate our work from inside a Model-Driven App. And no tool is currently in place to manage tasks for the logistic department. It makes absolute sense to create a Power App for this team! There are 2 big questions you need answering.
- Do you build it in the same environment?
- Where and on what device will the logistic employee do their work?
For the first question the decision is not as easy. If you create an app in the same environment you will not have to integrate data. You simply work on the same data source. However you should be aware of shared resources. If you are going to use the same tables and want different customization this might be challenging. Also you should not underestimate the security aspect. If one team is not allowed to view data from another team things can get tricky. With Business Units functionality this requirement can be met, and you can even share records if they are allowed to see specific records (temporarily). However it adds complexity, so sometimes it might be better to create a different environment and integrate only the Tasks in our use case.
The second question might be easier. If you work in a warehouse picking orders you probably do not work on a laptop or desktop all that much. Then I would advise against a Model-Driven App. With a Canvas App on a tables you can support their processes end-to-end without all that extra functionality a Model-Driven App brings.
It is the UX that matters!
I hope this helps for you as it did for me. Gathering my thoughts and going slightly deeper on challenges I’m facing is the reason I blog. I have only slightly touched topics around governance (who maintains the application) and costs of ownership. Those are also important factors to consider.
However for this blog I wanted to focus on the User Experience. For adoption purposes you should create tasks where the user spend most of their time. Be it on their mobile device or on a desktop. Inside Microsoft Teams or in their own Logistic Application. Creating multiple different places for users to do their work will not help them get the job done fast.
I am really curious if you have any other design considerations. What do you agree with, or what do you disagree with? Please let me know in the comments!