Azure Policy Violation Alert using Logic apps

Azure Policy Violation Alert using Logic apps

This article is contributed. See the original author and article here.

For Azure log alert notification action using logic app, we have read numerous articles.  But I notice that most of them are either very brief or don’t go into great detail about all the nuances, tips, or tricks.  I therefore wanted to write one with as much detail as I could and some fresh additional strategies.  I hope this aids in developing the logic and putting it into practise.


 


So let’s get going.   We already know that creating the Alert rule and choosing the logic app as the action are necessary.  Additionally, the Logic app’s alert notification trigger for when an HTTP request is received.  So let’s construct one.


 


Vineeth_Marar_0-1683951928868.png


 


We can use the below sample schema for the above trigger task


 


 


{


    “type”: “object”,


    “properties”: {


        “schemaId”: {


            “type”: “string”


        },


        “data”: {


            “type”: “object”,


            “properties”: {


                “essentials”: {


                    “type”: “object”,


                    “properties”: {


                        “alertId”: {


                            “type”: “string”


                        },


                        “alertRule”: {


                            “type”: “string”


                        },


                        “severity”: {


                            “type”: “string”


                        },


                        “signalType”: {


                            “type”: “string”


                        },


                        “monitorCondition”: {


                            “type”: “string”


                        },


                        “monitoringService”: {


                            “type”: “string”


                        },


                        “alertTargetIDs”: {


                            “type”: “array”,


                            “items”: {


                                “type”: “string”


                            }


                        },


                        “configurationItems”: {


                            “type”: “array”,


                            “items”: {


                                “type”: “string”


                            }


                        },


                        “originAlertId”: {


                            “type”: “string”


                        },


                        “firedDateTime”: {


                            “type”: “string”


                        },


                        “description”: {


                            “type”: “string”


                        },


                        “essentialsVersion”: {


                            “type”: “string”


                        },


                        “alertContextVersion”: {


                            “type”: “string”


                        }


                    }


                },


                “alertContext”: {


                    “type”: “object”,


                    “properties”: {


                        “properties”: {},


                        “conditionType”: {


                            “type”: “string”


                        },


                        “condition”: {


                            “type”: “object”,


                            “properties”: {


                                “windowSize”: {


                                    “type”: “string”


                                },


                                “allOf”: {


                                    “type”: “array”,


                                    “items”: {


                                        “type”: “object”,


                                        “properties”: {


                                            “searchQuery”: {


                                                “type”: “string”


                                            },


                                            “metricMeasureColumn”: {},


                                            “targetResourceTypes”: {


                                                “type”: “string”


                                            },


                                            “operator”: {


                                                “type”: “string”


                                            },


                                            “threshold”: {


                                                “type”: “string”


                                            },


                                            “timeAggregation”: {


                                                “type”: “string”


                                            },


                                            “dimensions”: {


                                                “type”: “array”


                                            },


                                            “metricValue”: {


                                                “type”: “integer”


                                            },


                                            “failingPeriods”: {


                                                “type”: “object”,


                                                “properties”: {


                                                    “numberOfEvaluationPeriods”: {


                                                        “type”: “integer”


                                                    },


                                                    “minFailingPeriodsToAlert”: {


                                                        “type”: “integer”


                                                    }


                                                }


                                            },


                                            “linkToSearchResultsUI”: {


                                                “type”: “string”


                                            },


                                            “linkToFilteredSearchResultsUI”: {


                                                “type”: “string”


                                            },


                                            “linkToSearchResultsAPI”: {


                                                “type”: “string”


                                            },


                                            “linkToFilteredSearchResultsAPI”: {


                                                “type”: “string”


                                            }


                                        },


                                        “required”: [


                                            “searchQuery”,


                                            “metricMeasureColumn”,


                                            “targetResourceTypes”,


                                            “operator”,


                                            “threshold”,


                                            “timeAggregation”,


                                            “dimensions”,


                                            “metricValue”,


                                            “failingPeriods”,


                                            “linkToSearchResultsUI”,


                                            “linkToFilteredSearchResultsUI”,


                                            “linkToSearchResultsAPI”,


                                            “linkToFilteredSearchResultsAPI”


                                        ]


                                    }


                                },


                                “windowStartTime”: {


                                    “type”: “string”


                                },


                                “windowEndTime”: {


                                    “type”: “string”


                                }


                            }


                        }


                    }


                },


                “customProperties”: {}


            }


        }


    }


}


 


 


However, as can be seen, the output above is insufficient to provide a thorough error message for the notification.  In order to receive the message, we must perform additional tasks.  


 


The same query that was used in the Alert rule can be run again with additional filtering options to produce the error code and message shown below.


 


Vineeth_Marar_1-1683951928872.png


 


 


 


The aforementioned query serves as an example of how to extract the error message using multiple iterations from the Properties field.


 


Now, initialise the variables as shown below.


 


Vineeth_Marar_2-1683951928875.png


 


By choosing type as “String,” we must create 4 “Initialise Variable” tasks for “Runquery,” “Owner,” “HTMLtable,” and “Authorise.”


 


Also keep in mind that the List query result may contain multiple logs.  Therefore, we will use a foreach loop to go through each error log one at a time and send notifications for each one.  Let’s create the following foreach task to accomplish that.


 


Vineeth_Marar_3-1683951928877.png


 


The result of the “Run query and list result” task is the value.


 


The next step is to retrieve the current Log from a variable we previously initialised.  Let’s now set the value for that variable using the current item from the Foreach task.


 


Vineeth_Marar_4-1683951928879.png


 


The value is the output of the “Run query and list result” task.


 


The next step is to get the most recent Log from a variable that was initialised earlier.  Using the current item from the Foreach task, let’s now set the value for that variable.


 


So that we can obtain the field values in subsequent tasks, parse this variable into JSON.   You can simply run the Logicapp to obtain the output for the aforementioned variable in order to obtain the schema for this task.  Next, duplicate that output and paste it into the sample payload link for the task below.


 


Vineeth_Marar_5-1683951928881.png


 


 


Our actual strategy is to e-mail or notify each error log.  In this instance, the owner of the subscription will receive the email containing the reported error or violation.


 


We must make sure the logs are captured, which is done in the Alert rule window itself, because the query will be run once more after the alert.  So let’s add a requirement to only gather those logs.  


 


In order to ensure that the TimeGenerated field is between the Alert rule (trigger task), we will create a Condition task and choose it from the aforementioned “Parse JSON task.” Windows commencement and termination


 


Vineeth_Marar_6-1683951928884.png


 


Now If it is accurate, we can move on to obtaining the owner user or users’ information.  However, let’s use HTTP action for API GET call if you have numerous subscriptions and want to display Subscription Name in your Notification as well.   Use the API link as shown below and the SubscriptionID from the Current query Parse JSON task.


 


Vineeth_Marar_7-1683951928887.png


 


You can choose Managed Identity (of Logicapp) as your authentication type.  You can choose Identity from the main menu list in the Logicapp, enable Managed Identity, and grant Reader permission for each subscription before setting this task.


 


Run the logicapp now to obtain the results of the aforementioned API request.  To have the attributes of a subscription, copy the output and paste it into the sample payload for the subsequent Parse JSON task.


 


Vineeth_Marar_8-1683951928890.png


 


 


The Owners must now be filtered by the Subscription Users.  Let’s make another HTTP action for the API GET task to accomplish that.


 


Vineeth_Marar_9-1683951928893.png


 


 


Let’s run the logicapp once more to obtain the results of this API task, then copy and paste them into the sample payload for the subsequent Parse JSON task in order to obtain the schema.   Make sure the Content you choose is the API task’s body from above.


 


Vineeth_Marar_10-1683951928896.png


 


 


We currently have access to every subscription for the current log.   To send the notification, however, we only need the Owner user.  Therefore, we must use the Foreach task once more to filter each user and find the Owner user.   The output of the previous parse JSON task serves as the Value for this.


 


Vineeth_Marar_11-1683951928898.png


 


Let’s now enter the details of the current user into a variable.  Keep in mind that we previously initialised the variable “owner.”  To set the value for it, create a Set Variable task now.   Make sure the value represents the result of the previous foreach task.


 


Vineeth_Marar_12-1683951928900.png


 


To get the attribute values of the current user for later use, we must now parse the Variable into JSON.


 


Vineeth_Marar_13-1683951928902.png


 


 


To obtain the output of the aforementioned variable and obtain the schema, we must once again run the logicapp and copy/paste the results to the sample payload link above.


 


To identify the Owner user, we must now obtain the Owner’s Role AssignmentID (which is common in Azure).  To obtain the Role Assignment ID, go to your subscription’s IAM (Access Control), click Role Assignments, then select any Owner and the JSON tab.   However, you can also use PowerShell/CLI.   Alternately, you can use the logicapp to validate the owner’s role assignment ID after receiving the output of the aforementioned “Parse JSON for Users” task.  For future use, copy that.


 


Vineeth_Marar_14-1683951928904.png


 


 


Vineeth_Marar_15-1683951928906.png


 


 


The ID guid value can also be copied from the ID value.


 


To select only the Owner user for subsequent tasks, we must now create a Condition task to filter the users.   The ID field from the task “Parse JSON for current user” should be used as the condition field.


 


Vineeth_Marar_16-1683951928908.png


 


 


The most crucial thing to keep in mind right now is that we must run a Graph API query in order to obtain user attributes like email and UPN, etc.  For obtaining those attributes, the results of the current API queries are insufficient.   But we need the following permission in the AAD in order to access those users’ attributes.  The SPN (app registration) must be created, the following API permissions must be provided, and admin consent must be granted.


 


















































Permission



Type



Directory.AccessAsUser.All



Delegated



Directory.ReadWrite.All



Delegated



Directory.ReadWrite.All



Application



Group.ReadWrite.All



Delegated



Group.ReadWrite.All



Application



User.Read



Delegated



User.Read.All



Delegated



User.Read.All



Application



User.ReadWrite.All



Delegated



User.ReadWrite.All



Application



 


Additionally, duplicate the App ID and Tenant ID, make a secret, and copy the Secret key for the subsequent task.


 


To run a Graph API query, we must now execute the following HTTP action for API task.  To obtain information about the current user, use the ‘Parse Json for current user’s principalID’ command.


 


Vineeth_Marar_17-1683951928910.png


 


 


Choose the Authentication parameter and enter the SPN-copied Tenant ID, App ID (Client ID), and Secret.


 


For the output from the aforementioned API, create a new “Parse JSON” task.  To obtain the output of the aforementioned task’s sample payload to paste into the parse json task’s payload to obtain the schema, we can run the logicapp once more.


 


Vineeth_Marar_18-1683951928913.png


 


 


We should now have a good format for the notification to appear in the email.  We’ll use an HTML table for that, filled with information from the query above (such as the error code, error message, severity, and subname).  Although you are free to use your own format, you can use the sample provided by this github link (attached below) as a guide.  You must choose the HTML table (the initialise variable we created earlier) and use the ‘Set Variable’ task to paste the value from the example HTML code I’ve attached below.


 


<>


 


Vineeth_Marar_19-1683951928915.png


 


 


 


Update the fields/values as indicated below in the code at the appropriate lines/locations.


 


Vineeth_Marar_20-1683951928917.png


 


 


 


 


After that, a task called Send email V2 can be created in Outlook 365 to send the notification.


 


Vineeth_Marar_21-1683951928919.png


 


 


 


You will receive an email as below.


 


Vineeth_Marar_22-1683951928939.png


 


 


Before we go any further, make sure your Alert rule in Azure Monitor has been created and the aforementioned logicapp has been selected as the action. Make sure the error/administration diagnostic logs are enabled to send to the Log analytics workspace for all subscriptions.   If you want to set up separate alert rules for “Error” and “Critical,” create them separately and choose the same logicapp as the action.  Here is just a sample.


 


Vineeth_Marar_23-1683951928942.png


 


 


And the Condition query should be as below (you can modify as per your requirement)


 


Vineeth_Marar_24-1683951928945.png


 


 


 


The evaluation of the log analytics workspace (activity logs) will be performed every 5 minutes, and if any policy violation errors are discovered, an alert will be sent.  The Logic app will be activated as soon as the Alert is fired, and the Owner of the resource subscription will receive a notification email in the format shown above with all necessary information.


 


Hope you had a great reading and happy learning. 

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 1  

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 1  

This article is contributed. See the original author and article here.

One aspect of Dynamics 365 Field Service’s adaptability lies in the flexibility of its ‘status’ functionality, driving a meaningful work order lifecycle tailored to each organization. Field Service helps manage work orders and bookings across diverse use cases. This blog series explores critical status concepts: 

  • System Status and Substatus for Work Orders 
  • Booking Status and Field Service Status for Bookings 
  • Booking Status Impact on Work Orders Across Single and Multi-Booking Scenarios 

Grasping these concepts allows organizations to leverage the solution’s functionality, optimize field service processes, and ultimately provide better customer service. 

This blog will expand upon many of the concepts discussed in the existing work order and booking status documentation: Work order life cycle and statuses – Dynamics 365 Field Service | Microsoft Learn 

Work Order Status Concepts: System Status and Substatus 

System Status 

Work orders in Dynamics 365 Field Service have a column called System Status which helps organizations manage their field service processes efficiently. There are six values available for System Status: 

  • Unscheduled: Work order has been created, but resources have not been assigned. 
  • Scheduled: Work order has resources assigned and is ready for execution. 
  • In Progress: Work order is currently being executed by the assigned resources. 
  • Completed: Work order has been executed and finished. 
  • Posted: Work order has been invoiced and is now closed. 
  • Cancelled: Work order has been cancelled and will not be executed. 

As the documentation highlights, an organization must use this field as is because these values allow the FS solution to interpret the current state of the work order record and apply appropriate behaviors and validations. If this list is changed, it could cause many issues both immediately and unanticipated, down the line. New values in this list would not be interpretable by the solution. However, the Field Service solution has a powerful related concept that provides infinite flexibility which can be mapped directly to these System Status values. 

Substatus 

In Dynamics 365 Field Service, the Substatus table plays a crucial role in providing organizations with the ability to create meaningful states that are mapped to System Statuses. One noteworthy feature of the Substatus table is the option to define a “Default” Substatus for each mapped System Status. This default Substatus will be automatically applied when a work order transitions into the corresponding System Status through the out-of-the-box (OOTB) logic.  

The Default Substatus feature within the Substatus table allows organizations to streamline their work order management process by automatically applying a predefined Substatus when a work order moves into a particular System Status using the out-of-the-box logic. This helps ensure consistency across work orders while still allowing for customization and adaptability when needed.

For example, if your organization has a default Substatus of “Pending Customer Confirmation” for the System Status “Scheduled,” any work order that moves into the “Scheduled” System Status due to the standard logic will automatically be assigned the “Pending Customer Confirmation” Substatus. This helps maintain consistency and simplify the management of work orders, especially when dealing with a high volume of work orders. 

It’s important to note that if a work order already has a different Substatus applied within the same System Status, the default Substatus will not be applied. This means that, if an organization adds custom logic to set a substatus, the default logic will not override it. The existing Substatus will remain in place, allowing organizations to maintain flexibility and customization for specific work order situations. It is also worth noting that any custom logic is still subject the allowed System Status validations (for example: the Work Order cannot be forced into a Scheduled System Status if there are no bookings). 

Further, direct updates to the Substatus field will drive updates to the work order’s System Status, within the allowable System Status changes. For example, using some of the Substatus records proposed below, if a work order is in the “Technician Assignment Pending” Substatus, which maps to the Unscheduled System Status, a user could change the Substatus directly to “Customer Canceled” which will immediately move the System Status of the work order to Canceled. It is worth noting that the default form UI should filter the available Substatus values to allowed changes, based on the current state of the work order and the mapped System Status of the Substatus. In this example, none of the Subtatuses which mapped to the Scheduled or In Progress System Statuses would have shown up in the UI. They would have been dynamically filtered out so that a user couldn’t make a choice that wouldn’t have been allowed. 

Example: Substatus Records with Mapped System Status 

The following are an example set of possible meaningful Work Order Substatuses. These Substatuses will be mapped to the appropriate System Status to help drive actions and behaviors in the system while communicating meaningful information to anyone who looks at the work order in Dynamics 365 Field Service. 

Substatus  Mapped System Status  Default Substatus  What it communicates to the user who glances at the work order 
Technician Assignment Pending  Unscheduled  Yes  The work order has been created, but no technician has been assigned yet. 
Awaiting Parts  Unscheduled  No  The work order requires special parts which are on order and the required parts are pending delivery to the job site or warehouse. 
Pending Customer Confirmation  Scheduled  Yes  The work order has been tentatively scheduled and the booking is awaiting confirmation from the customer regarding their preferred appointment time or other necessary details. 
Appointment Confirmed  Scheduled  No  The work order has been scheduled and the customer has confirmed the appointment time. Every reasonable effort should be made to meet the commitment made with the customer. 
Remote Support Scheduled  Scheduled  No  What is communicates to the user who glances at the work order: The work order has been scheduled for remote support, such as a software installation or configuration. 
Service In Progress  In Progress  Yes  The technician is performing the service. 
Work Order Completed Successful  Completed  Yes  The work order has been successfully completed, and the scope of the work order has been resolved. 
Work Order Unresolved  Completed  No  The bookings have been completed, but the scope of the work order has not be resolved. Additional action may be required, such as escalating the issue to a higher-level technician or recommending alternative solutions to the customer. 
Work Order Invoiced  Posted  Yes  The work order has been invoiced, and the billing process is complete. 
Customer Cancelled  Cancelled  Yes  The work order has been cancelled by the customer. 
Resolved Remotely  Cancelled  No  The work order has been cancelled because the issue was able to be resolved remotely by customer service. 

Conclusion

While these are examples of Substatuses which may be valuable, each organization can create their own, set the defaults that make sense, and map them to relevant System Status values. 

Next up in the blog series –

Part 2 – Booking Status Concepts: Booking Status and Field Service Status
Part 3 – Booking status impact on work orders across single and multi-booking scenarios 

The post Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 1   appeared first on Microsoft Dynamics 365 Blog.

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 2  

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 2  

This article is contributed. See the original author and article here.

Continuing our 3-part series exploring Dynamics 365 Field Service’s adaptability using critical status concepts. We have viewed the following concept Work Order Status Concepts: System Status and Substatus  in our last blog.

This blog explores the concept of:

  • Booking Status and Field Service Status for Bookings 

Grasping these concepts allows organizations to leverage the solution’s functionality, optimize field service processes, and ultimately provide better customer service. 

Booking Status Concepts: Booking Status and Field Service Status 

Before delving into the concepts of Booking Status and Field Service Status, it is important to understand the distinction between a work order and a booking in Dynamics 365 Field Service.  

A work order represents a scope of work to be performed for a customer. It includes the required services, the location of the work, type of resources, and other relevant information to complete the job. It also serves as a document which tracks how the scope of work is closed including what products and services were required, what tasks were completed, and other relevant information which someone may want to know about the work. Work orders are essential for organizing and managing service delivery, and their status changes as they progress through various stages, from creation to completion. 

On the other hand, a booking is a scheduled appointment or time slot that is associated with a work order. It is an essential component of the scheduling process, as it assigns a specific technician or resource to perform the services outlined in the work order. While work orders focus on the overall service request, bookings represent the individual appointments which are intersection of the specific time and duration of individual appointments and the assigned resource needed to fulfill the request. Each work order can have multiple bookings, allowing for more complex jobs to be split across multiple appointments or technicians. 

Booking Status 

Bookings for work orders in Dynamics 365 Field Service also have two critical status concepts. The first is Booking Status, which is a record that allows organizations to define their own meaningful statuses for bookings. By customizing Booking Status, organizations can better reflect their specific field service workflows and processes. 

Field Service Status 

The second critical concept for bookings is the Field Service Status value on Booking Status records. This status allows organizations to map their custom meaningful statuses to one of the six key values that the Field Service solution can interpret while driving important solution logic.  

SubStatus - Onsite bookings

These six key values are: 

  • Scheduled: The booking has been scheduled, and the resources are assigned. 
  • Traveling: The field service resources are en route to the job site. 
  • In Progress: The booking is currently being executed by the assigned resources. 
  • On Break: The field service resources are taking a break during the booking. 
  • Completed: The booking has been successfully executed and finished. 
  • Cancelled: The booking has been cancelled and will not be executed. 

By mapping their custom Booking Status values to the Field Service Status values, organizations ensure seamless integration between their unique processes and the overall Field Service solution. 

Example: Booking Status Records with Mapped Field Service Status 

For a Booking Status to be usable on a Booking which is related to a Work Order, the system expects the Booking Status to have a Field Service Status value. The following are an example set of meaningful Booking Status records. These Booking Statuses will be mapped to the appropriate Field Service Status to help drive actions and behaviors in the system while communicating meaningful information to anyone who looks at the booking in Dynamics 365 Field Service. 

Booking Status  Mapped Field Service Status  What it communicates to the user who glances at the booking 
Proposed Time  Scheduled  A proposed appointment time has been suggested for the booking, but it may still be subject to change or require further confirmation from the customer or technician. 
Confirmed with Customer  Scheduled  The appointment time has been confirmed with the customer, and the booking is set to proceed as planned. 
En Route  Traveling  The assigned technician is currently traveling to the job site or customer location to begin work on the booking. 
Lunch  On Break  The assigned technician is currently taking a lunch break or a short pause during their work schedule. 
On Site  In Progress  The assigned technician has arrived at the job site or customer location and has started working on the booking. 
Work Completed  Completed  The assigned technician has successfully finished the work on the booking. 
Finished – Parts Required  Completed  The technician is leaving but the work is partially complete and additional parts are needed to finish the job. 
Finished Helper Needed  Completed  The work is partially complete and the technician requires assistance from another team member to finish the job. 
Cancelled by Customer  Cancelled  The customer has cancelled the booking. 
Cancelled by Tech  Cancelled  The technician has cancelled the booking, possibly due to unforeseen circumstances or scheduling conflicts. 

This blog expands upon many of the concepts discussed in the existing work order and booking status documentation: Work order life cycle and statuses – Dynamics 365 Field Service | Microsoft Learn 

Next up in the blog series –

Part 3 – Booking status impact on work orders across single and multi-booking scenarios 

The post Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 2   appeared first on Microsoft Dynamics 365 Blog.

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 3  

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 3  

This article is contributed. See the original author and article here.

Completing our 3-part series exploring Dynamics 365 Field Service’s adaptability using critical status concepts. We have viewed the following concepts of Work Order Status Concepts: System Status and Substatus  and Booking Status Concepts: Booking Status and Field Service Status

This blog explores the concept of:

  • Booking status impact on work orders across single and multi-booking scenarios 

Grasping these concepts allows organizations to leverage the solution’s functionality, optimize field service processes, and ultimately provide better customer service. 

Booking Status Impact on Work Order System Status 

In addition to the status concepts explained earlier, it is essential to understand how the status of a booking, defined by Booking Status and interpreted by the Booking Status’ Field Service Status, drives the status of a work order, which can have more than one booking. This relationship plays a critical role in the efficient management of work orders and bookings in Dynamics 365 Field Service. 

Single Booking Impact on Work Order System Status 

When there is only one booking present: 

  1. If the booking is created and its Booking Status maps to the Field Service Status of Scheduled, the work order automatically moves to the System Status of Scheduled. 
  1. When the booking is updated to a Booking Status mapping to the Field Service Status of Traveling, In Progress, or On Break, the work order automatically moves to the System Status of In Progress. 
  1. When the booking is updated to a Booking Status mapping to the Field Service Status of Completed, the work order automatically moves to the System Status of Completed. 
  1. If the booking is updated to a Booking Status mapping to the Field Service Status of Cancelled, the work order automatically moves back to the System Status of Unscheduled. 

Multiple Bookings Impact on Work Order System Status 

When there is more than one booking present, the work order expresses the System Status related to the most active Booking Status (as interpreted by its set Field Service Status). The priorities for determining the Work Order System Status are as follows: 

  1. Highest Priority: Field Service Statuses that put a Work Order into the System Status of In Progress (Traveling, In Progress, and On Break). If any of the bookings are in these statuses, the Work Order will be in the System Status of In Progress. 
  1. Second Priority: Field Service Status that puts a Work Order into the System Status of Scheduled (Scheduled). If none of the bookings are in the highest priority statuses, but at least one is in the Scheduled status, the Work Order will be in the System Status of Scheduled. 
  1. Third Priority: Field Service Status that puts a Work Order into the System Status of Completed (Completed). If none of the bookings are in higher priority statuses and at least one is in the Completed status, the Work Order will be in the System Status of Completed. 
  1. Lowest Priority: The Field Service Status of Cancelled does not drive the Work Order into any System Status. Bookings in this state are effectively ignored as if they don’t exist from a Work Order System Status perspective. 

By understanding and managing the relationship between Booking Status and Work Order System Status, organizations can effectively coordinate their field service resources and ensure that work orders are updated accurately and efficiently. This knowledge allows for better decision-making, improved workflows, and ultimately a higher level of service for customers. Embrace the power of Dynamics 365 Field Service’s flexible status functionality and take your organization’s work order and booking management to new heights. 

Use Case 1: Single Booking Work Order 

Contoso Services, a field service company, receives a work order to repair a customer’s air conditioning unit.  

  • When the work order is initially created, it has a System Status of Unscheduled.  
  • Once a technician is booked to the work order, their Booking is created with a Booking Status of “Proposed Time” which maps to the Field Service Status of Scheduled. Consequently, the work order automatically moves to the System Status of Scheduled. 
  • As the technician begins traveling to the job site, the booking is updated to the Booking Status of “En Route” which maps to the Field Service Status of Traveling. This update causes the work order to move to the System Status of In Progress.  
  • As the technician moves the booking into the Booking Status of “Onsite” which maps to the Field Service Status of In Progress, the Work Order’s System Status doesn’t change, staying in In Progress.  
  • Of note, while this doesn’t have an impact on the Work Order’s System Status, if updated to this status from the mobile device, it does automatically update the Booking’s “Actual Arrival Time” and the Work Order’s “First Arrived On” values. 
  • Eventually, the technician completes the repair, and the booking is updated to the Booking Status of “Work Completed” which maps to the Field Service Status of Completed. This change results in the work order moving to the System Status of Completed. 
  • This will also update the Booking’s “End Time” and the Work Orders “Completed On” values. 

Use Case 2: Multiple Booking Work Order 

If a customer requests a two-stage service from Contoso Services, which requires different technicians for each stage. The work order now has two separate bookings.  

  • Initially, both bookings are in the Booking Status of “Confirmed with Customer” which maps to the Field Service Status of Scheduled, and the work order is in the System Status of Scheduled. 
  • When the first technician starts traveling, their booking’s status updates to “En Route” which is mapped to the Field Service Status of Traveling, so the work order’s System Status changes to In Progress.  
  • After the first technician completes their work, their booking status is changed to “Work Completed.” 
  •  However, the second booking is still in the “Confirmed with Customer” booking status which maps to the Field Service Status of Scheduled, so the work order reverts back to the System Status of Scheduled, as Scheduled has a higher priority than Completed so the remaining Scheduled booking is what will be expressed on the Work Order. 
  • Once the second technician starts traveling to the job site, their booking status changes to Traveling, and the work order updates to the System Status of In Progress.  
  • When the second technician finishes their work, their booking status is updated to Work Completed. Now, since both bookings are set to a booking status that has the Field Service Status of Completed, the work order moves to the System Status of Completed. 

Conclusion 

Understanding and leveraging the power of status functionality in Dynamics 365 Field Service, including System Status and Substatus on Work Orders and Booking Status and Field Service Status on Bookings, is crucial for organizations looking to optimize their field service processes. By understanding how they work and customizing these statuses to suit their specific needs, organizations can streamline their workflows, increase efficiency, and ultimately deliver better service to their customers.  

Start harnessing the power of Dynamics 365 Field Service’s adaptable status functionality today to unlock your organization’s full potential in managing work orders and bookings.

Read previous blogs from this series.

Part 1 – Work Order Status Concepts: System Status and Substatus
Part 2 – Booking Status Concepts: Booking Status and Field Service Status

The post Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 3   appeared first on Microsoft Dynamics 365 Blog.

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.

Status-Driven Success: Managing Your Work Order Lifecycle through Statuses – Part 3  

Printing Labels Using External Service with Dynamics 365 – Warehouse Management

This article is contributed. See the original author and article here.

Live in Dynamics 365 Supply Chain Management


Introduction

Barcodes and shipping labels are essential components in the supply chain landscape. They play a vital role in ensuring accurate inventory management, product tracking, and streamlining processes. Shipping labels are particularly important for navigating shipments complex global supply chains while maintaining end-to-end traceability. QR codes have also become a valuable tool for companies to engage customers and track their products worldwide.

With the 10.0.34 release, Supply Chain Management (SCM) has become even more robust, offering seamless integrations with third-party labelling solutions out-of-the-box.

Microsoft has partnered with Seagull Scientific BarTender and Loftware NiceLabel to enhance core Dynamics 365 SCM labeling capabilities and alleviate common pain points faced by many organizations. 

This enhancement further strengthens the capabilities of SCM in managing barcodes and shipping labels effectively.

This feature enables direct interaction between Microsoft Dynamics 365 Supply Chain Management and third-party solutions by providing a framework for communicating via HTTP APIs, without requiring the Document Routing Agent (DRA).

What capabilities does this unlock? 

Integrating third-party labelling solutions is important for several reasons:

  • Label design: It provides user-friendly interfaces for designing custom labels, allowing businesses to create labels that meet their specific requirements and comply with industry standards. It includes possibilities to design labels with barcode or QR codes.
  • Printer compatibility: These labelling solutions support a wide range of printers, enabling businesses to print labels on various devices without compatibility issues. This flexibility ensures that labels can be printed efficiently and accurately, regardless of the printer being used.
  • Automation: It offers automation capabilities, allowing businesses to streamline their labelling processes and reduce manual intervention. By integrating with Dynamics 365 SCM, businesses can automate label printing based on specific triggers or events within the SCM system.
  • Centralized management: It provides centralized management tools that enable businesses to control and monitor their entire labelling process from a single location. Integration with Dynamics 365 SCM ensures that businesses can manage their supply chain and labelling operations cohesively.
  • RFID technology support: It support RFID encoding for various RFID tag types and frequencies, ensuring compatibility with a wide range of RFID systems as well as management of RFID-enabled labels for enhanced tracking and data management

In conclusion, Microsoft Dynamics 365 SCM now provides a quick and simple method for linking Dynamics 365 SCM to many of the most popular enterprise labeling platforms. With Microsoft Dynamics 365 SCM’s seamless integration and flexible configuration options, implementation is a pain-free and rapid. It allows for a a seamless flow of communication and transactions to optimize your printing workflow.


Learn more

Print labels using an external service – Supply Chain Management | Dynamics 365 | Microsoft Learn

Print labels using the Loftware NiceLabel label service solution – Supply Chain Management | Dynamics 365 | Microsoft Learn

Print labels using the Seagull Scientific BarTender label service solution – Supply Chain Management | Dynamics 365 | Microsoft Learn

Not yet a Supply Chain Management customer? Take a guided tour.

The post Printing Labels Using External Service with Dynamics 365 – Warehouse Management appeared first on Microsoft Dynamics 365 Blog.

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.