{"id":485,"date":"2019-05-13T20:50:35","date_gmt":"2019-05-13T20:50:35","guid":{"rendered":"https:\/\/ricardomoinhos.com\/?p=485"},"modified":"2019-06-21T22:02:08","modified_gmt":"2019-06-21T22:02:08","slug":"events-stack-logging","status":"publish","type":"post","link":"https:\/\/ricardomoinhos.com\/pt\/events-stack-logging\/","title":{"rendered":"Dynamics NAV\/BC &#8211; Events Stack Logging"},"content":{"rendered":"\n\n<p>This post shows you how I created a logging system to know when, from where and by whom an event was called.<\/p>\n<p>The following solution can be used in Dynamics NAV 2017 or later because it uses TryFunctions and the GETLASTERRORCALLSTACK command.<\/p>\n<p>(In Dynamics NAV 2016 TryFunction is available but I&#8217;m not sure if GETLASTERRORCALLSTACK is).<\/p>\n<p>I&#8217;ve created a new table with the following structure to keep the logging information:<\/p>\n<p id=\"cziNseH\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"270\" class=\"alignnone size-full wp-image-486 \" src=\"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d205c83a7.png\" alt=\"\" srcset=\"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d205c83a7.png 606w, https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d205c83a7-300x134.png 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/p>\n<p><b>Table Key<\/b>: Stack Entry No.,Line No.<\/p>\n<p>To populate this table I&#8217;ve created a new codeunit. I could\/should have two codeunits (one with the subscribers and the other one with the logging functionality) but this is just for demo purposes.<\/p>\n<p>The codeunit has three methods plus as many subscribers as you want to log:<\/p>\n<p><b>InsertStackLogging()\u00a0<\/b>-&gt; To add a new stack logging record to the logging table;<\/p>\n<p><b>[TryFunction] ErrorTryFunction()\u00a0<\/b>-&gt; Local. A TryFunction to raise an error that will be used to get the error call stack. It is inside a <em>try<\/em> so it won&#8217;t stop the running transaction;<\/p>\n<p><b>SplitLine()\u00a0<\/b>-&gt; Local. Used by the InsertStackLogging to split the result from the GETLASTERRORCALLSTACK command in more that one stack field;<\/p>\n<p>Then you may have as many subscribers as you want to log. You only need to have a single line in the subscriber method:<\/p>\n<p><b>InsertStackLogging;<\/b><\/p>\n<p>For testing purposes I&#8217;ve subscribed the OnBeforeInsertEvent in SalesShipmentHeader and I&#8217;ve posted a sales order ship.<\/p>\n<p>Here&#8217;s the output:<\/p>\n<p id=\"NKwXvRK\"><img loading=\"lazy\" decoding=\"async\" width=\"1659\" height=\"504\" class=\"alignnone size-full wp-image-487 \" src=\"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d2e4b20a4.png\" alt=\"\" srcset=\"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d2e4b20a4.png 1659w, https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d2e4b20a4-300x91.png 300w, https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d2e4b20a4-768x233.png 768w, https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2019\/05\/img_5cd9d2e4b20a4-1024x311.png 1024w\" sizes=\"auto, (max-width: 1659px) 100vw, 1659px\" \/><\/p>\n<p>Please let me know if you have any doubts.<\/p>\n<p>Below the objects:<\/p>\n<pre>OBJECT Table 50000 Stack Logging<br \/>{<br \/>  OBJECT-PROPERTIES<br \/>  {<br \/>    Date=13\/05\/19;<br \/>    Time=17:57:12;<br \/>    Modified=Yes;<br \/>    Version List=RPM;<br \/>  }<br \/>  PROPERTIES<br \/>  {<br \/>  }<br \/>  FIELDS<br \/>  {<br \/>    { 1   ;   ;Stack Entry No.     ;Integer       ;DataClassification=ToBeClassified }<br \/>    { 2   ;   ;User ID             ;Code50        ;TableRelation=User.\"User Name\";<br \/>                                                   OnLookup=VAR<br \/>                                                              UserMgt@1000 : Codeunit 418;<br \/>                                                            BEGIN<br \/>                                                              UserMgt.LookupUserID(\"User ID\");<br \/>                                                            END;<br \/> <br \/>                                                   TestTableRelation=No;<br \/>                                                   DataClassification=EndUserIdentifiableInformation;<br \/>                                                   CaptionML=ENU=User ID }<br \/>    { 3   ;   ;Stack 1             ;Text250       ;DataClassification=ToBeClassified }<br \/>    { 4   ;   ;Stack 2             ;Text250       ;DataClassification=ToBeClassified }<br \/>    { 5   ;   ;Stack 3             ;Text250       ;DataClassification=ToBeClassified }<br \/>    { 6   ;   ;Stack 4             ;Text250       ;DataClassification=ToBeClassified }<br \/>    { 7   ;   ;Log Date            ;Date          ;DataClassification=ToBeClassified }<br \/>    { 8   ;   ;Log Time            ;Time          ;DataClassification=ToBeClassified }<br \/>    { 9   ;   ;Line No.            ;Integer       ;DataClassification=ToBeClassified }<br \/>  }<br \/>  KEYS<br \/>  {<br \/>    {    ;Stack Entry No.,Line No.                ;Clustered=Yes }<br \/>  }<br \/>  FIELDGROUPS<br \/>  {<br \/>  }<br \/>  CODE<br \/>  {<br \/> <br \/>    BEGIN<br \/>    END.<br \/>  }<br \/>}<br \/><br \/><\/pre>\n<p>\u00a0<\/p>\n<pre data-tadv-p=\"keep\">OBJECT Codeunit 50000 Logging Codeunit<br \/>{<br \/>  OBJECT-PROPERTIES<br \/>  {<br \/>    Date=13\/05\/19;<br \/>    Time=17:57:19;<br \/>    Modified=Yes;<br \/>    Version List=RPM;<br \/>  }<br \/>  PROPERTIES<br \/>  {<br \/>    OnRun=BEGIN<br \/>          END;<br \/>  }<br \/>  CODE<br \/>  {<br \/>    LOCAL PROCEDURE InsertStackLogging@1();<br \/>    VAR<br \/>      StackLogging@1001 : Record 50000;<br \/>      LastCallStack@1000 : Text;<br \/>      SplittedStack@1002 : Text[1024];<br \/>      NextLineNo@1003 : Integer;<br \/>      NextStackEntryNo@1004 : Integer;<br \/>    BEGIN<br \/>      CLEARLASTERROR;<br \/>      IF NOT ErrorTryFunction THEN BEGIN<br \/> <br \/>        WITH StackLogging DO BEGIN<br \/>          RESET;<br \/>          NextStackEntryNo := 1;<br \/>          IF FINDLAST THEN<br \/>            NextStackEntryNo := \"Stack Entry No.\" + 1;<br \/>        END;<br \/> <br \/>        NextLineNo := 10000;<br \/> <br \/>        LastCallStack := GETLASTERRORCALLSTACK;<br \/> <br \/>        REPEAT<br \/> <br \/>          SplittedStack := SplitLine(LastCallStack,'\\');<br \/> <br \/>          WITH StackLogging DO BEGIN<br \/>            INIT;<br \/>            \"Stack Entry No.\" := NextStackEntryNo;<br \/>            \"Line No.\" := NextLineNo;<br \/>            NextLineNo += 10000;<br \/> <br \/>            \"Stack 1\" := COPYSTR(SplittedStack,1,250);<br \/>            \"Stack 2\" := COPYSTR(SplittedStack,251,250);<br \/>            \"Stack 3\" := COPYSTR(SplittedStack,501,250);<br \/>            \"Stack 4\" := COPYSTR(SplittedStack,751,250);<br \/> <br \/>            \"User ID\" := USERID;<br \/>            \"Log Date\" := TODAY;<br \/>            \"Log Time\" := TIME;<br \/>            INSERT;<br \/>          END;<br \/>        UNTIL LastCallStack = '';<br \/>      END;<br \/>    END;<br \/> <br \/>    [TryFunction]<br \/>    LOCAL PROCEDURE ErrorTryFunction@3();<br \/>    BEGIN<br \/>      ERROR('');<br \/>    END;<br \/> <br \/>    LOCAL PROCEDURE SplitLine@4(VAR Text@1000 : Text[1024];Separator@1002 : Text[1]) Token : Text[1024];<br \/>    VAR<br \/>      Pos@1003 : Integer;<br \/>    BEGIN<br \/>      Pos := STRPOS(Text,Separator);<br \/>      IF Pos &gt; 0 THEN BEGIN<br \/>        Token := COPYSTR(Text,1,Pos-1);<br \/>        IF Pos+1 &lt;= STRLEN(Text) THEN<br \/>          Text := COPYSTR(Text,Pos+1)<br \/>        ELSE<br \/>          Text := '';<br \/>      END ELSE BEGIN<br \/>        Token := Text;<br \/>        Text := '';<br \/>      END;<br \/>    END;<br \/> <br \/>    LOCAL PROCEDURE \"-- Subscribers\"@5();<br \/>    BEGIN<br \/>    END;<br \/> <br \/>    [EventSubscriber(Table,110,OnBeforeInsertEvent)]<br \/>    LOCAL PROCEDURE LogStack_OnBeforeInsertEvent_SalesShipmentHeader@2(VAR Rec@1000 : Record 110;RunTrigger@1001 : Boolean);<br \/>    BEGIN<br \/>      InsertStackLogging;<br \/>    END;<br \/> <br \/>    BEGIN<br \/>    END.<br \/>  }<br \/>}<br \/><br \/><br \/>Feel free to leave your comments or ask me questions.<\/pre>","protected":false},"excerpt":{"rendered":"<p>This post shows you how I created a logging system to know when, from where and by whom an event was called. The following solution can be used in Dynamics NAV 2017 or later because it uses TryFunctions and the GETLASTERRORCALLSTACK command. (In Dynamics NAV 2016 TryFunction is available but I&#8217;m not sure if GETLASTERRORCALLSTACK [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":138,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4],"tags":[6,57],"class_list":{"0":"post-485","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-dynamics365bc","8":"tag-dynamicsnav-2","9":"tag-events","11":"post-with-thumbnail","12":"post-with-thumbnail-icon"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dynamics NAV\/BC - Events Stack Logging - Ricardo Paiva Moinhos<\/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:\/\/ricardomoinhos.com\/events-stack-logging\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamics NAV\/BC - Events Stack Logging - Ricardo Paiva Moinhos\" \/>\n<meta property=\"og:description\" content=\"This post shows you how I created a logging system to know when, from where and by whom an event was called. The following solution can be used in Dynamics NAV 2017 or later because it uses TryFunctions and the GETLASTERRORCALLSTACK command. (In Dynamics NAV 2016 TryFunction is available but I&#8217;m not sure if GETLASTERRORCALLSTACK [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ricardomoinhos.com\/events-stack-logging\/\" \/>\n<meta property=\"og:site_name\" content=\"Ricardo Paiva Moinhos\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-13T20:50:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-21T22:02:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png\" \/>\n\t<meta property=\"og:image:width\" content=\"375\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ricardo Paiva Moinhos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ricardo Paiva Moinhos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/\"},\"author\":{\"name\":\"Ricardo Paiva Moinhos\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/#\\\/schema\\\/person\\\/16dcfdd54ec1c46bd1941659739de4cc\"},\"headline\":\"Dynamics NAV\\\/BC &#8211; Events Stack Logging\",\"datePublished\":\"2019-05-13T20:50:35+00:00\",\"dateModified\":\"2019-06-21T22:02:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/\"},\"wordCount\":255,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ricardomoinhos.com\\\/wp-content\\\/uploads\\\/2014\\\/06\\\/PT_c_Dyn-NAV-2013.png\",\"keywords\":[\"dynamicsnav\",\"events\"],\"articleSection\":[\"Dynamics NAV\\\/365 BC\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/\",\"url\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/\",\"name\":\"Dynamics NAV\\\/BC - Events Stack Logging - Ricardo Paiva Moinhos\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ricardomoinhos.com\\\/wp-content\\\/uploads\\\/2014\\\/06\\\/PT_c_Dyn-NAV-2013.png\",\"datePublished\":\"2019-05-13T20:50:35+00:00\",\"dateModified\":\"2019-06-21T22:02:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/#\\\/schema\\\/person\\\/16dcfdd54ec1c46bd1941659739de4cc\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ricardomoinhos.com\\\/wp-content\\\/uploads\\\/2014\\\/06\\\/PT_c_Dyn-NAV-2013.png\",\"contentUrl\":\"https:\\\/\\\/ricardomoinhos.com\\\/wp-content\\\/uploads\\\/2014\\\/06\\\/PT_c_Dyn-NAV-2013.png\",\"width\":375,\"height\":375},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/events-stack-logging\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ricardomoinhos.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamics NAV\\\/BC &#8211; Events Stack Logging\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/#website\",\"url\":\"https:\\\/\\\/ricardomoinhos.com\\\/\",\"name\":\"Ricardo Paiva Moinhos\",\"description\":\"Welcome\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ricardomoinhos.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ricardomoinhos.com\\\/#\\\/schema\\\/person\\\/16dcfdd54ec1c46bd1941659739de4cc\",\"name\":\"Ricardo Paiva Moinhos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g\",\"caption\":\"Ricardo Paiva Moinhos\"},\"url\":\"https:\\\/\\\/ricardomoinhos.com\\\/pt\\\/author\\\/ricardopaiva\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dynamics NAV\/BC - Events Stack Logging - Ricardo Paiva Moinhos","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:\/\/ricardomoinhos.com\/events-stack-logging\/","og_locale":"pt_PT","og_type":"article","og_title":"Dynamics NAV\/BC - Events Stack Logging - Ricardo Paiva Moinhos","og_description":"This post shows you how I created a logging system to know when, from where and by whom an event was called. The following solution can be used in Dynamics NAV 2017 or later because it uses TryFunctions and the GETLASTERRORCALLSTACK command. (In Dynamics NAV 2016 TryFunction is available but I&#8217;m not sure if GETLASTERRORCALLSTACK [&hellip;]","og_url":"https:\/\/ricardomoinhos.com\/events-stack-logging\/","og_site_name":"Ricardo Paiva Moinhos","article_published_time":"2019-05-13T20:50:35+00:00","article_modified_time":"2019-06-21T22:02:08+00:00","og_image":[{"width":375,"height":375,"url":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","type":"image\/png"}],"author":"Ricardo Paiva Moinhos","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Ricardo Paiva Moinhos","Tempo estimado de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#article","isPartOf":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/"},"author":{"name":"Ricardo Paiva Moinhos","@id":"https:\/\/ricardomoinhos.com\/#\/schema\/person\/16dcfdd54ec1c46bd1941659739de4cc"},"headline":"Dynamics NAV\/BC &#8211; Events Stack Logging","datePublished":"2019-05-13T20:50:35+00:00","dateModified":"2019-06-21T22:02:08+00:00","mainEntityOfPage":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/"},"wordCount":255,"commentCount":0,"image":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#primaryimage"},"thumbnailUrl":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","keywords":["dynamicsnav","events"],"articleSection":["Dynamics NAV\/365 BC"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ricardomoinhos.com\/events-stack-logging\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/","url":"https:\/\/ricardomoinhos.com\/events-stack-logging\/","name":"Dynamics NAV\/BC - Events Stack Logging - Ricardo Paiva Moinhos","isPartOf":{"@id":"https:\/\/ricardomoinhos.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#primaryimage"},"image":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#primaryimage"},"thumbnailUrl":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","datePublished":"2019-05-13T20:50:35+00:00","dateModified":"2019-06-21T22:02:08+00:00","author":{"@id":"https:\/\/ricardomoinhos.com\/#\/schema\/person\/16dcfdd54ec1c46bd1941659739de4cc"},"breadcrumb":{"@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ricardomoinhos.com\/events-stack-logging\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#primaryimage","url":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","contentUrl":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","width":375,"height":375},{"@type":"BreadcrumbList","@id":"https:\/\/ricardomoinhos.com\/events-stack-logging\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ricardomoinhos.com\/"},{"@type":"ListItem","position":2,"name":"Dynamics NAV\/BC &#8211; Events Stack Logging"}]},{"@type":"WebSite","@id":"https:\/\/ricardomoinhos.com\/#website","url":"https:\/\/ricardomoinhos.com\/","name":"Ricardo Paiva Moinhos","description":"Welcome","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ricardomoinhos.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Person","@id":"https:\/\/ricardomoinhos.com\/#\/schema\/person\/16dcfdd54ec1c46bd1941659739de4cc","name":"Ricardo Paiva Moinhos","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/secure.gravatar.com\/avatar\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/248366f4e615e182964f85f799c6e33cbd541a6f4ca7ee948fc16d1c14030c76?s=96&d=mm&r=g","caption":"Ricardo Paiva Moinhos"},"url":"https:\/\/ricardomoinhos.com\/pt\/author\/ricardopaiva\/"}]}},"jetpack_featured_media_url":"https:\/\/ricardomoinhos.com\/wp-content\/uploads\/2014\/06\/PT_c_Dyn-NAV-2013.png","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/comments?post=485"}],"version-history":[{"count":21,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":736,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/posts\/485\/revisions\/736"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/media\/138"}],"wp:attachment":[{"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/media?parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/categories?post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ricardomoinhos.com\/pt\/wp-json\/wp\/v2\/tags?post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}