{"id":1414,"date":"2015-05-31T15:59:16","date_gmt":"2015-05-31T14:59:16","guid":{"rendered":"http:\/\/oprsteny.cz\/?p=1414"},"modified":"2015-06-03T08:16:16","modified_gmt":"2015-06-03T07:16:16","slug":"abap-local-exception-classes","status":"publish","type":"post","link":"https:\/\/oprsteny.cz\/?p=1414","title":{"rendered":"ABAP &#8211; Local exception classes"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"358\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=358\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/SAP.jpg\" data-orig-size=\"44,50\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Picasa&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1365690880&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"SAP\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/SAP.jpg\" class=\" size-full wp-image-358 alignleft\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/SAP.jpg\" alt=\"SAP\" width=\"44\" height=\"50\" \/>In this article I&#8217;d like to present a solution how to implement a <strong>global class<\/strong> where all <em>internal<\/em> <em>exceptions<\/em> (exceptions raised by private methods only\u00a0\u21d2 always catched within the class itself) will be handled with its <strong>local exception class<\/strong>. <!--more--><\/p>\n<p>It is generally possible (and recommended) to use global exception classes but sometimes you\u00a0can find a local exception class be more practical (no DDIC entries, no heavy coding\/maintenance, &#8230;).<\/p>\n<p>I wanted a simple solution supporting WHERE-USED functionality for all messages defined in SE91 which can be generated in my program&#8217;s exceptions.<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1423\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1423\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg.jpg\" data-orig-size=\"424,213\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Exception messages in SE91\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg.jpg\" class=\"alignnone size-medium wp-image-1423\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg-300x151.jpg\" alt=\"Exception messages in SE91\" width=\"300\" height=\"151\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg-300x151.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_01.jpg.jpg 424w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Sadly it is not possible to create a local exception class in a global class&#8217;s &#8220;local definitions&#8221; section AND use it in the global class method&#8217;s EXCEPTIONS section (<em>by default<\/em>). This is because the class editor&#8217;s compiler does NOT see this local exception class as will be demonstrated in the following few steps.<\/p>\n<p>You maybe noticed the<em> &#8220;by default&#8221;<\/em> note in the previous paragraph &#8211; this will be explained in the following paragraphs&#8230;<\/p>\n<p>Navigation to the global class&#8217;s local definitions &amp; implementations:<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1419\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1419\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02.jpg\" data-orig-size=\"631,319\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Navigation to class&amp;#8217;s local definitions &amp;#038; implementations\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02.jpg\" class=\"alignnone size-medium wp-image-1419\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02-300x152.jpg\" alt=\"Navigation to class's local definitions &amp; implementations\" width=\"300\" height=\"152\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02-300x152.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02-500x253.jpg 500w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_02.jpg 631w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Here follows our local exception class definition which I entered in the &#8220;Local Class Definitions\/Types&#8221; section<\/p>\n<pre lang=\"abap\">CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check.\r\n  PUBLIC SECTION.\r\n    METHODS:\r\n      constructor,\r\n      get_text REDEFINITION.\r\n    CLASS-DATA:\r\n*     Statically accessible variable - the reason will be shown later\r\n      message TYPE bapiret2-message.\r\n  PRIVATE SECTION.\r\n    DATA:\r\n      mv_message TYPE bapiret2-message.\r\nENDCLASS.<\/pre>\n<p>I keep the local exception class implementation very simple:<\/p>\n<pre lang=\"abap\">CLASS lcx_exception IMPLEMENTATION.\r\n  METHOD constructor.\r\n    super-&gt;constructor( ).\r\n*   Save the static variable to instance variable\r\n    me-&gt;mv_message = lcx_exception=&gt;message.\r\n  ENDMETHOD.                   \r\n\r\n  METHOD get_text.\r\n*   Return message from the instance variable\r\n    result = me-&gt;mv_message.\r\n  ENDMETHOD.                   \r\nENDCLASS.<\/pre>\n<p>Now I&#8217;m trying to create new class method (called e.g. <em>TEST_METHOD<\/em>), which would like to raise exceptions of type LCX_EXCEPTION &#8211; you can see the system reacts with popup message saying that such exception class is NOT KNOWN!!!<\/p>\n<p>&#8230;so the system offers to create a new GLOBAL exception class &#8211; but this is not what we wanted.<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1420\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1420\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03.jpg\" data-orig-size=\"549,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Local exceptions are not known\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03.jpg\" class=\"alignnone size-medium wp-image-1420\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03-300x197.jpg\" alt=\"Local exceptions are not known\" width=\"300\" height=\"197\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03-300x197.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03-458x300.jpg 458w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_03.jpg 549w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Therefore the class method <strong>must<\/strong> raise a generic exception (e.g. CX_STATIC_CHECK) or a global exception from which your local exception class is inheriting from (<em>by default<\/em>).<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1421\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1421\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04.jpg\" data-orig-size=\"577,229\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Raising CX_STATIC_CHECK exception\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04.jpg\" class=\"alignnone size-medium wp-image-1421\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04-300x119.jpg\" alt=\"Raising CX_STATIC_CHECK exception\" width=\"300\" height=\"119\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04-300x119.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04-500x198.jpg 500w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_04.jpg 577w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Did you notice the &#8220;<em>by default<\/em>&#8221; note again in paragraph above?<br \/>\nIt is a <em>&#8220;dark corner&#8221;<\/em> of the <em>&#8220;Form-based&#8221;<\/em> class editor. This means that the <em>form-based<\/em> editor can be very nice, intuitive, easy to navigate, &#8230; BUT&#8230;<\/p>\n<p>It is apparently missing some functionalities offered in the &#8220;<em>Source code-based<\/em>&#8221; editor.<\/p>\n<p>Just try switching to the <em>source-based<\/em> editor in SE24, put your local exception class (not the CX_STATIC_CHECK) in the RAISING section of the class-method and try to compile your code.<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1431\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1431\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.png\" data-orig-size=\"631,445\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Method raising local exception\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.png\" class=\"alignnone size-medium wp-image-1431\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-300x212.png\" alt=\"Method raising local exception\" width=\"300\" height=\"212\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-300x212.png 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-425x300.png 425w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.png 631w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>WHAT, IT WORKS???!!!<\/p>\n<p>Now with equanimity you can switch back to the form-based editor and continue working as you were used to &#8211; the compiler won&#8217;t scream again unless you modify the EXCEPTIONS section of the class-method raising the <em>local exception<\/em>.<br \/>\nBut in such case you can re-do this <em>&#8220;source-editor trick&#8221;<\/em> againg of course.<\/p>\n<p>In the caller method (called e.g. RUN_TEST) you handle the exception occurrence like it was of you local exception class type.<\/p>\n<p><em>Note:<\/em> For testing purpose I created method RUN_TEST as <em>Instance &amp; Public<\/em> so I can execute it directly with F8.<\/p>\n<pre lang=\"abap\">METHOD run_test.\r\n  DATA:\r\n    lr_my_exception     TYPE REF TO lcx_exception,\r\n    lr_static_exception TYPE REF TO cx_static_check,\r\n    lv_message          TYPE bapiret2-message.\r\n\r\n  TRY.\r\n    \r\n      me-&gt;test_method( ).\r\n    \r\n*   Catch my locally defined exception      \r\n    CATCH lcx_exception INTO lr_my_exception.\r\n      lv_message = lr_my_exception-&gt;get_text( ).\r\n      WRITE lv_message.\r\n      \r\n*   Catch any other exception of type CX_STATIC_CHECK \r\n    CATCH cx_static_check INTO lr_static_exception.\r\n      lv_message = lr_static_exception-&gt;get_text( ).\r\n      WRITE lv_message.\r\n  ENDTRY.\r\nENDMETHOD.<\/pre>\n<p>The code of the TEST_METHOD would be like this:<\/p>\n<pre lang=\"abap\">METHOD test_method.\r\n  MESSAGE e001(ztest)\r\n    WITH 'ZCL_EXCEPTION_DEMO-TEST_METHOD'\r\n    INTO lcx_exception=&gt;message.\r\n\r\n  RAISE EXCEPTION TYPE lcx_exception.\r\nENDMETHOD.<\/pre>\n<p><em><strong>Important note<\/strong>:<\/em> In the above code please note the MESSAGE command. Thanks to this command the SAP system is able to find usage of the applied message with the WHERE-USED functionality from SE91<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1424\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1424\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.jpg\" data-orig-size=\"616,214\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Message WHERE-USED\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.jpg\" class=\"alignnone size-medium wp-image-1424\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-300x104.jpg\" alt=\"Message WHERE-USED\" width=\"300\" height=\"104\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-300x104.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06-500x174.jpg 500w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_06.jpg 616w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>For testing purposes I prepared a simple program that tests our solution:<\/p>\n<pre lang=\"abap\">REPORT  zr_test_local_exceptions.\r\nDATA:\r\n  lr_demo TYPE REF TO zcl_exception_demo.\r\n\r\nSTART-OF-SELECTION.\r\n  CREATE OBJECT lr_demo.\r\n  lr_demo-&gt;run_test( ).<\/pre>\n<p>&#8230;and here comes the output:<\/p>\n<p><a href=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1422\" data-permalink=\"https:\/\/oprsteny.cz\/?attachment_id=1422\" data-orig-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05.jpg\" data-orig-size=\"346,115\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Exception output\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05.jpg\" class=\"alignnone size-medium wp-image-1422\" src=\"http:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05-300x100.jpg\" alt=\"Exception output\" width=\"300\" height=\"100\" srcset=\"https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05-300x100.jpg 300w, https:\/\/oprsteny.cz\/wp-content\/uploads\/LOCAL_EXCEPTION_CLASS_05.jpg 346w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article I&#8217;d like to present a solution how to implement a global class where all internal exceptions (exceptions raised by private methods only\u00a0\u21d2 always catched within the class itself) will be handled with its local exception class.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"ABAP - Local exception classes http:\/\/wp.me\/p3nYbe-mO","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[16,15,9],"tags":[433,153],"class_list":["post-1414","post","type-post","status-publish","format-standard","hentry","category-abap","category-algorithms","category-development","tag-cx_static_check","tag-exception"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3nYbe-mO","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/1414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1414"}],"version-history":[{"count":7,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions"}],"predecessor-version":[{"id":1432,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions\/1432"}],"wp:attachment":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}