cancel
Showing results for 
Search instead for 
Did you mean: 
Jcook

Grabbing Error Message From Failed Run

Summary:

We will be using the Try - Catch structure to build out this solution.

This will involved 2 Scopes - Scopes are an action in Power Automate that can hold other actions.

 

Steps:

For our 2 Scopes we will name,

Scope1 = Try

Scope2 = Catch

 

In our Try scope we put all our regular actions that we expect to run on a successful run

In our Catch scope we put what we want to execute if anything from our Try has failed.

 

This is what it should look like:

Jcook_0-1597681660745.png

 

Now we want to configure run after on the Catch scope to enable this cope to run only if Try has failed

To do this, click the 3 dots on the Catch action, and click Configure run after, and check the has failed box

Jcook_1-1597681907678.png

Click Done.

 

Now it should look like this:

Jcook_2-1597681986802.png

Notice the red arrow, this is stating there is a Configure run after enabled.

 

Now in our Catch scope add a Compose action, we will use the expression result( )

The syntax for result() is:

 

 

result('ActionName')

 

 

So my expression looks like this:

 

 

result('Scope_-_Try')

 

 

Jcook_4-1597682104304.png

**NOTE: The result expression does not show up in the list of expressions when typing out the expression**

 

Next add a Parse JSON action, and pass the Outputs from the Compose.

Jcook_5-1597682575585.png

Here is the schema:

 

 

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "name": {
                "type": "string"
            },
            "startTime": {
                "type": "string"
            },
            "endTime": {
                "type": "string"
            },
            "trackingId": {
                "type": "string"
            },
            "clientTrackingId": {
                "type": "string"
            },
            "clientKeywords": {
                "type": "array",
                "items": {
                    "type": "string"
                }
            },
            "code": {
                "type": "string"
            },
            "status": {
                "type": "string"
            },
            "error": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    }
                }
            }
        },
        "required": [
            "name",
            "startTime",
            "endTime",
            "trackingId",
            "clientTrackingId",
            "clientKeywords",
            "code",
            "status",
            "error"
        ]
    }
}

 

 

 

After the Parse JSON action, add a Select action, this action will be used to only grab the data we want.

Put the Body in the From field, and than build out what information you want to see in this message.

Jcook_6-1597682808356.png

 

Here is a sample run:

Jcook_7-1597683543397.png

 

This Select output can than be used inside a Send email action or a Teams message.

 

 

 

Thanks for reading!

Check out my blog on flowaltdelete

Comments

Hi @Jcook ,

just checking. If the try scope has several steps, won’t you get all the steps in the result? So you have 5 steps in try scope and step 4 fails.. I think the result() function will also list the succeeding steps. Correct?

@Mglat 

Yes that is correct.

 

You could use a Filter Array to only return Status = "Failed"

Hello @Jcook 

 

don't know if it is me but the JSON - Schema doesn't work for me.

 

Maybe because I'm using the Experimental Features.

 

So whatever. I have the Schema that works with it just well (Bless the Generate Schema)

 

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string"
      },
      "inputs": {
        "type": "object",
        "properties": {
          "host": {
            "type": "object",
            "properties": {
              "apiId": {
                "type": "string"
              },
              "connectionReferenceName": {
                "type": "string"
              },
              "operationId": {
                "type": "string"
              }
            }
          },
          "parameters": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              }
            }
          }
        }
      },
      "outputs": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer"
          },
          "headers": {
            "type": "object",
            "properties": {
              "Transfer-Encoding": {
                "type": "string"
              },
              "Vary": {
                "type": "string"
              },
              "Strict-Transport-Security": {
                "type": "string"
              },
              "request-id": {
                "type": "string"
              },
              "client-request-id": {
                "type": "string"
              },
              "x-ms-ags-diagnostic": {
                "type": "string"
              },
              "Timing-Allow-Origin": {
                "type": "string"
              },
              "x-ms-apihub-cached-response": {
                "type": "string"
              },
              "x-ms-apihub-obo": {
                "type": "string"
              },
              "Date": {
                "type": "string"
              },
              "Content-Type": {
                "type": "string"
              },
              "Content-Length": {
                "type": "string"
              }
            }
          },
          "body": {
            "type": "object",
            "properties": {
              "error": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "innerError": {
                    "type": "object",
                    "properties": {
                      "date": {
                        "type": "string"
                      },
                      "request-id": {
                        "type": "string"
                      },
                      "client-request-id": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "startTime": {
        "type": "string"
      },
      "endTime": {
        "type": "string"
      },
      "trackingId": {
        "type": "string"
      },
      "clientTrackingId": {
        "type": "string"
      },
      "clientKeywords": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "code": {
        "type": "string"
      },
      "status": {
        "type": "string"
      },
      "error": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      }
    },
    "required": [
      "name",
      "startTime",
      "endTime",
      "trackingId",
      "clientTrackingId",
      "clientKeywords",
      "code",
      "status"
    ]
  }
}

Hello @Jcook ,

 

I'm having some weird issues with this approach. Could you help me please?

 

My Try Scope has a 'Get Item' Action from SharePoint . I'm purposefully trying to generate an error here by fetching an item id that doesn't exist.

 

My Catch block has a compose action - result("Try") as you suggested. The problem here is that the schema of the JSON that my Compose action spits out doesn't have any error property in it and so I cant retrieve the error message or code from it. Also I do not have experimental features turned on.

 

All of this is within an instant Cloud flow with a manual trigger.Flow.png

 

{
    "type": "object",
    "properties": {
        "body": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "inputs": {
                        "type": "object",
                        "properties": {
                            "host": {
                                "type": "object",
                                "properties": {
                                    "apiId": {
                                        "type": "string"
                                    },
                                    "connectionReferenceName": {
                                        "type": "string"
                                    },
                                    "operationId": {
                                        "type": "string"
                                    }
                                }
                            },
                            "parameters": {
                                "type": "object",
                                "properties": {
                                    "dataset": {
                                        "type": "string"
                                    },
                                    "table": {
                                        "type": "string"
                                    },
                                    "id": {
                                        "type": "integer"
                                    }
                                }
                            }
                        }
                    },
                    "outputs": {
                        "type": "object",
                        "properties": {
                            "statusCode": {
                                "type": "integer"
                            },
                            "headers": {
                                "type": "object",
                                "properties": {
                                    "Vary": {
                                        "type": "string"
                                    },
                                    "X-SharePointHealthScore": {
                                        "type": "string"
                                    },
                                    "X-MS-SPConnector": {
                                        "type": "string"
                                    },
                                    "X-SP-SERVERSTATE": {
                                        "type": "string"
                                    },
                                    "DATASERVICEVERSION": {
                                        "type": "string"
                                    },
                                    "SPClientServiceRequestDuration": {
                                        "type": "string"
                                    },
                                    "X-DataBoundary": {
                                        "type": "string"
                                    },
                                    "X-1DSCollectorUrl": {
                                        "type": "string"
                                    },
                                    "X-AriaCollectorURL": {
                                        "type": "string"
                                    },
                                    "SPRequestGuid": {
                                        "type": "string"
                                    },
                                    "request-id": {
                                        "type": "string"
                                    },
                                    "MS-CV": {
                                        "type": "string"
                                    },
                                    "Strict-Transport-Security": {
                                        "type": "string"
                                    },
                                    "X-FRAME-OPTIONS": {
                                        "type": "string"
                                    },
                                    "Content-Security-Policy": {
                                        "type": "string"
                                    },
                                    "MicrosoftSharePointTeamServices": {
                                        "type": "string"
                                    },
                                    "X-Content-Type-Options": {
                                        "type": "string"
                                    },
                                    "X-MS-InvokeApp": {
                                        "type": "string"
                                    },
                                    "Timing-Allow-Origin": {
                                        "type": "string"
                                    },
                                    "x-ms-apihub-cached-response": {
                                        "type": "string"
                                    },
                                    "x-ms-apihub-obo": {
                                        "type": "string"
                                    },
                                    "Cache-Control": {
                                        "type": "string"
                                    },
                                    "Date": {
                                        "type": "string"
                                    },
                                    "P3P": {
                                        "type": "string"
                                    },
                                    "X-AspNet-Version": {
                                        "type": "string"
                                    },
                                    "X-Powered-By": {
                                        "type": "string"
                                    },
                                    "Content-Length": {
                                        "type": "string"
                                    },
                                    "Content-Type": {
                                        "type": "string"
                                    },
                                    "Expires": {
                                        "type": "string"
                                    },
                                    "Last-Modified": {
                                        "type": "string"
                                    }
                                }
                            },
                            "body": {
                                "type": "object",
                                "properties": {
                                    "status": {
                                        "type": "integer"
                                    },
                                    "message": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    },
                    "startTime": {
                        "type": "string"
                    },
                    "endTime": {
                        "type": "string"
                    },
                    "trackingId": {
                        "type": "string"
                    },
                    "clientTrackingId": {
                        "type": "string"
                    },
                    "clientKeywords": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "code": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    }
                },
                "required": [
                    "name",
                    "inputs",
                    "outputs",
                    "startTime",
                    "endTime",
                    "trackingId",
                    "clientTrackingId",
                    "clientKeywords",
                    "code",
                    "status"
                ]
            }
        }
    }
}

 

@TayM My first sugestion would be to remove the 'required' part from your the parse schema. Secondly you can try to create your own schema, by grabing the output of the Try scope and paste it in the parse step using the 'generate from sample'. Again I would recommend to remove the required part.

 

Be aware that every connector is returning the error result in a different way, so upfront it is not always clear how to handle this within the parse. Also if you have nested steps e.g. apply-to-each loop, these will create a seperate result() and it will not be presentent on the highest level (at the Try scope level)

Ah thanks @Mglat . That really helped when you said that every connector returns the error result in a different way.  I was under the impression that the schema should always have an error attribute like below but in my scenario the error message was hidden within 'outputs/body/message' and the error code in 'code'. There was no such distinct 'error' attribute in my schema which confused me. Thank you.

"error": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    }
                }
            }

 

Outputs is an array, so the schema can't be used directly without Apply to each.  Instead, I use the following as the input to Parse JSON to extract the JSON from the output:

outputs('Compose_Revert_Result')[0]
 

Hi everyone, 

 

Can someone help me?
I did this approach and everything works fine until it comes to a failed action within a condition. 

The function "result('flow')" gives me just the failed condition step and no error message:

jleystral_0-1673598889228.png

 

 

 

 

 

{
        "name": "Bedingung",
        "inputs": {
            "expressionResult": false
        },
        "startTime": "2023-01-13T07:27:01.5077518Z",
        "endTime": "2023-01-13T07:37:05.8483813Z",
        "trackingId": "9015a800-d460-4d6f-9f34-236047073bc1",
        "clientTrackingId": "08585280751417503691732659688CU137",
        "code": "ActionFailed",
        "status": "Failed",
        "error": {
            "code": "ActionFailed",
            "message": "An action failed. No dependent actions succeeded."
        }
    },
    {
        "name": "Verzögern_3",
        "inputs": {
            "interval": {
                "unit": "Minute",
                "count": 5
            }
        },
        "startTime": "2023-01-12T13:55:45.067581Z",
        "endTime": "2023-01-12T14:00:45.2238881Z",
        "trackingId": "34c2976d-182c-4ccc-b81f-f47526ef6866",
        "clientTrackingId": "08585280751417503691732659688CU137",
        "code": "OK",
        "status": "Succeeded"
    }
]

 

 

 

As you see, he even lists the first succeeded step within the "if no" part but i won't get any information about the failed step.

I need to grab the error code to forward it to the responsible person.

 

Many thanks in advance.

 

The error is there.  You need to make sure that you examine all of the keys for errors.

jiwhite_0-1673625816973.png

 

@jleystral

@jiwhite is correct. This is the detail that can be reported back to the user. 

The error that is shown on the top right of your screenshot is hard (maybe impossible) to grab during execution time. 

Thank you guys.

Since grabbing the error code (top right in screenshot) works perfectly when the failed action is not within a condition step, I was hoping there may be a trick to also get it when it's within a condition.

 

jleystral_0-1673850035797.png

 

(Here it works perfect to forward the error to the user because it's not within a condition step)

 

Now I can tell the user that it is unfortunately not possible. Thanks again.

Hi

 

I am trying function parse json in the try scope. Cannot get the result('try') as error message. It is copying again the json instead of error from the parse json output

 

do you know any solution?

 

kind regards

 

 

@VictorTek Please post a new question with an anonymized example of your code and the error.

About the Author
  • Experienced Consultant with a demonstrated history of working in the information technology and services industry. Skilled in Office 365, Azure, SharePoint Online, PowerShell, Nintex, K2, SharePoint Designer workflow automation, PowerApps, Microsoft Flow, PowerShell, Active Directory, Operating Systems, Networking, and JavaScript. Strong consulting professional with a Bachelor of Engineering (B.E.) focused in Information Technology from Mumbai University.
  • I am a Microsoft Business Applications MVP and a Senior Manager at EY. I am a technology enthusiast and problem solver. I work/speak/blog/Vlog on Microsoft technology, including Office 365, Power Apps, Power Automate, SharePoint, and Teams Etc. I am helping global clients on Power Platform adoption and empowering them with Power Platform possibilities, capabilities, and easiness. I am a leader of the Houston Power Platform User Group and Power Automate community superuser. I love traveling , exploring new places, and meeting people from different cultures.
  • Read more about me and my achievements at: https://ganeshsanapblogs.wordpress.com/about MCT | SharePoint, Microsoft 365 and Power Platform Consultant | Contributor on SharePoint StackExchange, MSFT Techcommunity
  • Encodian Owner / Founder - Ex Microsoft Consulting Services - Architect / Developer - 20 years in SharePoint - PowerPlatform Fan
  • Founder of SKILLFUL SARDINE, a company focused on productivity and the Power Platform. You can find me on LinkedIn: https://linkedin.com/in/manueltgomes and twitter http://twitter.com/manueltgomes. I also write at https://www.manueltgomes.com, so if you want some Power Automate, SharePoint or Power Apps content I'm your guy 🙂
  • I am the Owner/Principal Architect at Don't Pa..Panic Consulting. I've been working in the information technology industry for over 30 years, and have played key roles in several enterprise SharePoint architectural design review, Intranet deployment, application development, and migration projects. I've been a Microsoft Most Valuable Professional (MVP) 15 consecutive years and am also a Microsoft Certified SharePoint Masters (MCSM) since 2013.
  • Big fan of Power Platform technologies and implemented many solutions.
  • Passionate #Programmer #SharePoint #SPFx #M365 #Power Platform| Microsoft MVP | SharePoint StackOverflow, Github, PnP contributor
  • Web site – https://kamdaryash.wordpress.com Youtube channel - https://www.youtube.com/channel/UCM149rFkLNgerSvgDVeYTZQ/