{"id":10867,"date":"2017-07-23T14:47:18","date_gmt":"2017-07-23T18:47:18","guid":{"rendered":"http:\/\/www.sherweb.com\/blog\/?p=10867"},"modified":"2022-07-15T15:45:58","modified_gmt":"2022-07-15T19:45:58","slug":"exception-handling-dynamics-365-operation","status":"publish","type":"post","link":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/","title":{"rendered":"Exception Handling in Dynamics 365 for Operations"},"content":{"rendered":"<p>When we write code or make customizations to Dynamics 365 for Operation, which uses X++, we should make use of exception handling to provide some context for the message or a different, more useful message.<\/p>\n<p><strong>In this article, I will explore how to develop a uniform way to catch the multiple types of exception that can be raised in X++.<\/strong><\/p>\n<h3><a href=\"https:\/\/www.sherweb.com\/microsoft-dynamics-365\/\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more on how to manage your business with Dynamics 365<\/a><\/h3>\n<p>&nbsp;<\/p>\n<h2>Exception Type<\/h2>\n<p>There are several types of exception and the type differs, depending on what caused the error. Many exception types are determined by the kernel and are not normally thrown by application code.<\/p>\n<p><strong>All exception types, however, can be caught, and it is the developers\u2019 responsibility to decide which exceptions need to be handled.<\/strong><\/p>\n<p>The exception type is identified using the system-based enumeration called an exception. Because it is a system <b>Enum<\/b>, it <strong>cannot be modified, so users cannot add new exception types.<\/strong><\/p>\n<h5>The following table shows the exception literals that are the values of the exception enumeration.<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10871\" src=\"https:\/\/www.sherweb.com\/blog\/wp-content\/uploads\/Screen-Shot-2017-07-18-at-3.16.42-PM.png\" alt=\"Exception Type\" width=\"823\" height=\"783\" srcset=\"\/blog\/wp-content\/uploads\/Screen-Shot-2017-07-18-at-3.16.42-PM.png 823w, \/blog\/wp-content\/uploads\/Screen-Shot-2017-07-18-at-3.16.42-PM-300x285.png 300w, \/blog\/wp-content\/uploads\/Screen-Shot-2017-07-18-at-3.16.42-PM-768x731.png 768w, \/blog\/wp-content\/uploads\/Screen-Shot-2017-07-18-at-3.16.42-PM-600x571.png 600w\" sizes=\"auto, (max-width: 823px) 100vw, 823px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><a href=\"https:\/\/www.sherweb.com\/microsoft-dynamics-reseller\/\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to sign up to our partner program and start reselling Dynamics 365 in less than 10 minutes<\/a><\/h3>\n<p>&nbsp;<\/p>\n<h2>Key Commands<\/h2>\n<ul>\n<li>\n<h6>Try command<\/h6>\n<ul>\n<li><strong>signifies the start of a block of code that you want to control with the X++ exception handling system<\/strong>. Any exceptions that are thrown in that block of code can be caught and handled accordingly. The block of code inside the Try statement must be contained between brackets ( { } ).<\/li>\n<\/ul>\n<\/li>\n<li>\n<h6>Catch statements<\/h6>\n<ul>\n<li><strong>come after the block of code and define what code is executed when each exception is thrown.<\/strong> You do not have to define a Catch statement for every possible exception; however, each Try statement must have at least one Catch statement.<\/li>\n<\/ul>\n<\/li>\n<li>\n<h6>Retry command<\/h6>\n<ul>\n<li><strong>tells the system to go back to the Try statement and attempt to execute the code again.<\/strong> Any data that was loaded before the Try command will remain as it was, but any data retrieved or modified after the Try statement will be refreshed. When a deadlock exception is thrown, all locks on tables that this process holds are released, which may allow another process or processes that are also deadlocked to continue. By calling a retry, the process can attempt to update the record again and may now be able to complete. <strong>It is a best practice that a retry uses a counter so that the number of retries can be controlled and a user does not become stuck in a loop.<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>\n<h6>Final keyword<\/h6>\n<ul>\n<li>\u00a0<strong>is now available to follow the Try and Catch keywords.<\/strong>The semantics are identical to the semantics in C#. <strong>The statements provided in the final clause are executed,<\/strong> whether or not the Try block threw any exceptions.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Code Statement<\/h2>\n<h5>We will use the following example lines of code to test exception handling:<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10869\" src=\"https:\/\/www.sherweb.com\/blog\/wp-content\/uploads\/codeCustCreateCust.png\" alt=\"codeCustCreateCust\" width=\"564\" height=\"563\" srcset=\"\/blog\/wp-content\/uploads\/codeCustCreateCust.png 564w, \/blog\/wp-content\/uploads\/codeCustCreateCust-150x150.png 150w, \/blog\/wp-content\/uploads\/codeCustCreateCust-300x300.png 300w, \/blog\/wp-content\/uploads\/codeCustCreateCust-50x50.png 50w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>This code will try to create a customer after inputted value from users is revised; it will also handle errors when the user does not input enough information. <strong><i>A <\/i><i>Throw<\/i><i> statement is used to throw an error that can be caught by a Catch statement. When the system throws an exception,\u00a0<\/i><i>ttsabort<\/i><i>\u00a0is called automatically, and so does not have to be called in a Catch statement.<\/i><\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2>Optimistic Concurrency Exceptions<\/h2>\n<p>The <b>optimistic concurrency check<\/b> (OCC) <strong>is a performance-enhancing function within Microsoft Dynamics 365 for Operation.<\/strong> It presumes that any record retrieved from the database is not updated until it is proven to be updated by the database. This means that fewer locks must be placed on records in the database. This allows for faster access for other users.<\/p>\n<p>This also means that one user can update a record after another user has retrieved it from the database. This can cause data inconsistency. <strong>If the second user then also tries to update the record, an UpdateConflict exception is thrown.<\/strong><\/p>\n<p>The system does this by comparing the recVersion field on the record buffer at runtime and the actual record in the database. The recVersion field value is changed every time that an update is successfully made to a record.<\/p>\n<p>There are two main table update exceptions, UpdateConflict and DeadLock. <strong>An update con\ufb02ict occurs due to the optimistic concurrency failing, whereas a deadlock is the classic database scenario where each transaction has locked a table that the other needs.<\/strong><\/p>\n<p><b>Update con\ufb02icts<\/b> <strong>are normally handled within the insert, delete, and update methods of a table.<\/strong> The BOM table is a good example of this. It is hard to find many examples where this has been used.<\/p>\n<p>We use this pattern only if we deem it to be required. <strong>The code within the table&#8217;s update method also updates other records, so it has been written to handle update con\ufb02icts.<\/strong><\/p>\n<h5>The following code is an example of how to handle the <b>UpdateConflict<\/b> exception that might be thrown.<\/h5>\n<blockquote><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10870\" src=\"https:\/\/www.sherweb.com\/blog\/wp-content\/uploads\/CodeOCCRetry.png\" alt=\"CodeOCCRetry\" width=\"437\" height=\"486\" srcset=\"\/blog\/wp-content\/uploads\/CodeOCCRetry.png 437w, \/blog\/wp-content\/uploads\/CodeOCCRetry-270x300.png 270w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/p><\/blockquote>\n<p><strong>If a conflict due to OCC occurs, the system throws the UpdateConflict exception and it is caught by the Catch statement.<\/strong><\/p>\n<p><strong>The other new element here is ttsLevel.<\/strong> Since transactions can be nested, we do want the exception to fall through to the parent transaction, if one exists. <strong>If ttsabort is issued (directly or due to a throwing error) at any level, the whole transaction will be rolled back<\/strong>; we can&#8217;t roll back just to the level where the error is thrown.<\/p>\n<p><strong>The code checks the current TTS level. If it is not zero\u2014in other words, if it is still in a TTS transaction\u2014it throws another UpdateConflict exception to the next Catch list of the next outer Try statement in scope.<\/strong><\/p>\n<p>This continues until it is no longer inside a TTS transaction. We must make sure that, when the code is retired, all data is refreshed.<\/p>\n<p><strong>It is important that we don&#8217;t retry indefinitely<\/strong>, as this may cause the client to hang.<strong> To control this, we use <i>xSession::currentRetryCount()<\/i><\/strong> to get the number of retries and check this against the #RetryNum macro. <strong>The macro defines the standard number of retries deemed appropriate by Microsoft, which is 5.<\/strong><\/p>\n<p><strong>Then the UpdateConflictNotRecovered exception is thrown.<\/strong> <em>This means the whole transaction is aborted and stops retrying.<\/em><\/p>\n<p>&nbsp;<\/p>\n<h3><a href=\"https:\/\/info.sherweb.com\/How-to-Run-a-Successful-Business-with-Dynamics-365.html\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to download our free ebook on Dynamics 365 and get answers to your questions!<\/a><\/h3>\n<p>&nbsp;<\/p>\n<h2>Conclusion<\/h2>\n<p>We do not, in any case, want an error to be thrown that stops the form from opening. Also, if there is an error, <strong>we need to decide whether the user actually needs to know that an error occurred<\/strong>. <strong>It may be enough<\/strong> for our purposes<strong> that the fields don&#8217;t appear, and<\/strong> <strong>we can use the debugger to trace through the code to determine why.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When we write code or make customizations to Dynamics 365 for Operation, which uses X++, we shoul","protected":false},"author":177,"featured_media":10416,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[652],"tags":[404,598],"class_list":["post-10867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dynamics-365","tag-crm","tag-dynamics-365"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Must Know of Exception Handling in Dynamics 365 for Operations<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Must Know of Exception Handling in Dynamics 365 for Operations\" \/>\n<meta property=\"og:description\" content=\"When we write code or make customizations to Dynamics 365 for Operation, which uses X++, we should make use of exception handling to provide some context for the message or a different, more useful message. In this article, I will explore how to develop a uniform way to catch the multiple types of exception that can be raised in X++.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/\" \/>\n<meta property=\"og:site_name\" content=\"Sherweb\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Sherweb\" \/>\n<meta property=\"article:published_time\" content=\"2017-07-23T18:47:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-15T19:45:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sherweb.com\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"460\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"The Sherweb Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SherWeb\" \/>\n<meta name=\"twitter:site\" content=\"@SherWeb\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"The Sherweb Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/\"},\"author\":{\"name\":\"The Sherweb Team\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/#\\\/schema\\\/person\\\/42a19dccace310904575a5656cc20976\"},\"headline\":\"Exception Handling in Dynamics 365 for Operations\",\"datePublished\":\"2017-07-23T18:47:18+00:00\",\"dateModified\":\"2022-07-15T19:45:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/\"},\"wordCount\":1105,\"image\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/blog\\\/wp-content\\\/uploads\\\/How-to-Set-up-OneDrive-for-Business-Banner.png\",\"keywords\":[\"CRM\",\"Dynamics 365\"],\"articleSection\":[\"Dynamics 365\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/\",\"url\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/\",\"name\":\"Must Know of Exception Handling in Dynamics 365 for Operations\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/blog\\\/wp-content\\\/uploads\\\/How-to-Set-up-OneDrive-for-Business-Banner.png\",\"datePublished\":\"2017-07-23T18:47:18+00:00\",\"dateModified\":\"2022-07-15T19:45:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/#\\\/schema\\\/person\\\/42a19dccace310904575a5656cc20976\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#primaryimage\",\"url\":\"\\\/blog\\\/wp-content\\\/uploads\\\/How-to-Set-up-OneDrive-for-Business-Banner.png\",\"contentUrl\":\"\\\/blog\\\/wp-content\\\/uploads\\\/How-to-Set-up-OneDrive-for-Business-Banner.png\",\"width\":1540,\"height\":460,\"caption\":\"How to Set up OneDrive for Business for All Your Tenants\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/microsoft-ecosystem\\\/dynamics-365\\\/exception-handling-dynamics-365-operation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Ecosystem\",\"item\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/category\\\/microsoft-ecosystem\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dynamics 365\",\"item\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/category\\\/microsoft-ecosystem\\\/dynamics-365\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Exception Handling in Dynamics 365 for Operations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/\",\"name\":\"Sherweb\",\"description\":\"More than a cloud marketplace\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/#\\\/schema\\\/person\\\/42a19dccace310904575a5656cc20976\",\"name\":\"The Sherweb Team\",\"url\":\"https:\\\/\\\/www.sherweb.com\\\/blog\\\/author\\\/the-sherweb-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Must Know of Exception Handling in Dynamics 365 for Operations","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/","og_locale":"en_US","og_type":"article","og_title":"Must Know of Exception Handling in Dynamics 365 for Operations","og_description":"When we write code or make customizations to Dynamics 365 for Operation, which uses X++, we should make use of exception handling to provide some context for the message or a different, more useful message. In this article, I will explore how to develop a uniform way to catch the multiple types of exception that can be raised in X++.","og_url":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/","og_site_name":"Sherweb","article_publisher":"https:\/\/www.facebook.com\/Sherweb","article_published_time":"2017-07-23T18:47:18+00:00","article_modified_time":"2022-07-15T19:45:58+00:00","og_image":[{"width":1540,"height":460,"url":"https:\/\/www.sherweb.com\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png","type":"image\/png"}],"author":"The Sherweb Team","twitter_card":"summary_large_image","twitter_creator":"@SherWeb","twitter_site":"@SherWeb","twitter_misc":{"Written by":"The Sherweb Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#article","isPartOf":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/"},"author":{"name":"The Sherweb Team","@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976"},"headline":"Exception Handling in Dynamics 365 for Operations","datePublished":"2017-07-23T18:47:18+00:00","dateModified":"2022-07-15T19:45:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/"},"wordCount":1105,"image":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#primaryimage"},"thumbnailUrl":"\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png","keywords":["CRM","Dynamics 365"],"articleSection":["Dynamics 365"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/","url":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/","name":"Must Know of Exception Handling in Dynamics 365 for Operations","isPartOf":{"@id":"https:\/\/www.sherweb.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#primaryimage"},"image":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#primaryimage"},"thumbnailUrl":"\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png","datePublished":"2017-07-23T18:47:18+00:00","dateModified":"2022-07-15T19:45:58+00:00","author":{"@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976"},"breadcrumb":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#primaryimage","url":"\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png","contentUrl":"\/blog\/wp-content\/uploads\/How-to-Set-up-OneDrive-for-Business-Banner.png","width":1540,"height":460,"caption":"How to Set up OneDrive for Business for All Your Tenants"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/dynamics-365\/exception-handling-dynamics-365-operation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sherweb.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Microsoft Ecosystem","item":"https:\/\/www.sherweb.com\/blog\/category\/microsoft-ecosystem\/"},{"@type":"ListItem","position":3,"name":"Dynamics 365","item":"https:\/\/www.sherweb.com\/blog\/category\/microsoft-ecosystem\/dynamics-365\/"},{"@type":"ListItem","position":4,"name":"Exception Handling in Dynamics 365 for Operations"}]},{"@type":"WebSite","@id":"https:\/\/www.sherweb.com\/blog\/#website","url":"https:\/\/www.sherweb.com\/blog\/","name":"Sherweb","description":"More than a cloud marketplace","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sherweb.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976","name":"The Sherweb Team","url":"https:\/\/www.sherweb.com\/blog\/author\/the-sherweb-team\/"}]}},"tag_names":["CRM","Dynamics 365"],"_links":{"self":[{"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/posts\/10867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/users\/177"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/comments?post=10867"}],"version-history":[{"count":11,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/posts\/10867\/revisions"}],"predecessor-version":[{"id":19444,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/posts\/10867\/revisions\/19444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/media\/10416"}],"wp:attachment":[{"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/media?parent=10867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/categories?post=10867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sherweb.com\/blog\/wp-json\/wp\/v2\/tags?post=10867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}