{"id":3646,"date":"2014-03-21T22:51:00","date_gmt":"2014-03-21T21:51:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/"},"modified":"2014-03-21T22:51:00","modified_gmt":"2014-03-21T21:51:00","slug":"oracle-apex-redirect-all-pages-to-one","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/","title":{"rendered":"Oracle APEX: redirect all pages to one"},"content":{"rendered":"<p><img decoding=\"async\" class=\"blog-image aligncenter\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\" alt=\"\" \/><\/p>\n<p>This blog will explain how to proceed in order to redirect all the application pages to one single page, prior to their processing and rendering, with Oracle APEX 4.0 and above.<\/p>\n<p>In some cases, like security checks, you may want to redirect all calls of any page in your APEX application to one single page whith particular processing before the target page is rendering or even processing.<\/p>\n<p>I ran into this need again, recently while developing some application.<\/p>\n<h3>The problem to solve:<\/h3>\n<p>Application user has to change his password after first login or password reset. No other page than password change should be accessed until successful change. This page is part of standard administration, as user can also choose to change his password at any time. It therefore contains already links to navigate within the application, which needs to be prevented. In addition any page call within the application, from direct URL entry, must be prevented as well (no cheating allowed).<\/p>\n<h3>Where would you put some code, in APEX, which needs to be accessed by all pages in the application?<\/h3>\n<p>Natural answer would be Page 0, also known as Global Page.<\/p>\n<p>So what? Let&#8217;s put some branch into the &#8216;Before Header&#8217; part of the global page, which would redirect as soon as any page rendering starts, preventing the display of the current page.<\/p>\n<p>Unfortunately, this doesn&#8217;t work&#8230;<\/p>\n<p>Why? Simply because APEX doesn&#8217;t handle it. The first indicator is that you can&#8217;t access any branching in the &#8216;Before Header&#8217; section of the global page, unlike any normal page.<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/GlobalPage_NoBranch_Compare.png\" alt=\"GlobalPage_NoBranch_Compare\" width=\"683\" height=\"344\" \/><\/em><\/p>\n<p>You have to trick, using the &#8216;Create &#8211; Add a page control to this page&#8217; wizard, to add such kind of branching. So, you shouldn&#8217;t do it&#8230;<\/p>\n<h3>What else can we do?<\/h3>\n<p>APEX offers another nice feature called by any page of the application: <strong>Application Processes<\/strong>.<\/p>\n<p>And that&#8217;s the key. The branching is not happening as easy as when done declaratively in a page, but adding those few lines of PL\/SQL in the process will make it:<\/p>\n<p>htp.init;<br \/>\n<span style=\"color: #ff9900;\">\u00a0 owa_util.redirect_url(&#8216;f?p=&amp;APP_ID.:CHGPWD:&amp;SESSION.&#8217;);<\/span><br \/>\napex_application.stop_apex_engine;<span style=\"color: #ff9900;\"><span style=\"color: #000000;\"><br style=\"color: #ff9900;\" \/><\/span><\/span><\/p>\n<p>In order to work you also need to tell him when to run. In our case &#8216;On Load: Before Header (page template header)&#8217;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/ApplicationProcess_start_point.png\" alt=\"ApplicationProcess_start_point\" width=\"614\" height=\"122\" \/><\/p>\n<p>This application process will do the job and even overeager, because the target page itself will loop into death. So you need to set some condition on that process, in order to NOT call it when the current page is the target page. In my case I have also added the login page of the application as user is allowed to get back to it even though the password was not changed. In order to combine condition related to page and user state verification, execution of the application process is linked to the result of a function returning a boolean.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Condition.png\" alt=\"Condition\" width=\"678\" height=\"272\" \/><\/p>\n<p>Below the code of the function called. To make it nice and avoid having hard coded page numbers, you can use page aliases and retrieve the page number as shown:<\/p>\n<p>FUNCTION is_change_password_required<br \/>\nRETURN BOOLEAN IS<br \/>\nv_username VARCHAR2(30);<br \/>\nv_chg_pwd_required BOOLEAN;<br \/>\nv_found NUMBER;<br \/>\nBEGIN<br \/>\nv_chg_pwd_required := TRUE;<br \/>\nv_username := NVL(v(&#8216;APP_USER&#8217;), USER);<\/p>\n<p>&#8212; Check if current page is Login or change password<br \/>\n&#8212; to enforce login and avoid looping on change password<br \/>\n<span style=\"color: #ff9900;\">SELECT COUNT(*) INTO v_found<br \/>\n<span style=\"color: #ff9900;\">\u00a0\u00a0\u00a0\u00a0\u00a0 FROM apex_application_pages<br \/>\n<span style=\"color: #ff9900;\">\u00a0\u00a0\u00a0\u00a0\u00a0 WHERE application_id = v(&#8216;APP_ID&#8217;)<br \/>\n<span style=\"color: #ff9900;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AND page_id = v(&#8216;APP_PAGE_ID&#8217;)<br \/>\n<span style=\"color: #ff9900;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AND page_alias IN (&#8216;LOGIN&#8217;, &#8216;CHGPWD&#8217;);<\/span><\/span><\/span><\/span><\/span><\/p>\n<p><span style=\"color: #000000;\">IF v_found &gt; 0 THEN<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v_chg_pwd_required := FALSE;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0 ELSE<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v_chg_pwd_required := is_new_or_reset_password(v_username);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0 END IF;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0 RETURN v_chg_pwd_required;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0\u00a0\u00a0 END is_change_password_required;<\/span><\/p>\n<p>I hope you will enjoy this solution for your own password change management or other purpose.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog will explain how to proceed in order to redirect all the application pages to one single page, prior to their processing and rendering, with Oracle APEX 4.0 and above. In some cases, like security checks, you may want to redirect all calls of any page in your APEX application to one single page [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":3647,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[304,436,437,438,439],"type_dbi":[],"class_list":["post-3646","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-integration-middleware","tag-apex","tag-before","tag-global-page","tag-redirection","tag-rendering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle APEX: redirect all pages to one - dbi Blog<\/title>\n<meta name=\"description\" content=\"How to redirect all pages to one in Oracle APEX 4.0 and above\" \/>\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.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle APEX: redirect all pages to one\" \/>\n<meta property=\"og:description\" content=\"How to redirect all pages to one in Oracle APEX 4.0 and above\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-03-21T21:51:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"148\" \/>\n\t<meta property=\"og:image:height\" content=\"48\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alain Lacour\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alain Lacour\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\"},\"author\":{\"name\":\"Alain Lacour\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0\"},\"headline\":\"Oracle APEX: redirect all pages to one\",\"datePublished\":\"2014-03-21T21:51:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\"},\"wordCount\":648,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\",\"keywords\":[\"APEX\",\"before\",\"Global page\",\"redirection\",\"rendering\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\",\"name\":\"Oracle APEX: redirect all pages to one - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\",\"datePublished\":\"2014-03-21T21:51:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0\"},\"description\":\"How to redirect all pages to one in Oracle APEX 4.0 and above\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg\",\"width\":148,\"height\":48},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle APEX: redirect all pages to one\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0\",\"name\":\"Alain Lacour\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g\",\"caption\":\"Alain Lacour\"},\"description\":\"Alain Lacour has more than 15 years of experience in application development with Oracle technologies. He is specialized in APEX, Java, and PL\/SQL development. His expertise also includes middleware technologies such as Oracle Weblogic and EMC Documentum. He also has a broad experience in business analysis and architecture solutions as well as in service and project management. Prior to dbi services, Alain Lacour was Senior Consultant at IMS Health in Basel. He also worked as a Software Engineer for M&amp;H Informatics in Basel. Alain Lacour holds a Master of Science in Industrial Computing from the University of Mulhouse (F). His branch-related experience mainly covers the pharma industry, with an in-depth knowledge of the drug development process as well as drug distribution.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/alain-lacour\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle APEX: redirect all pages to one - dbi Blog","description":"How to redirect all pages to one in Oracle APEX 4.0 and above","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.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/","og_locale":"en_US","og_type":"article","og_title":"Oracle APEX: redirect all pages to one","og_description":"How to redirect all pages to one in Oracle APEX 4.0 and above","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/","og_site_name":"dbi Blog","article_published_time":"2014-03-21T21:51:00+00:00","og_image":[{"width":148,"height":48,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg","type":"image\/jpeg"}],"author":"Alain Lacour","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alain Lacour","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/"},"author":{"name":"Alain Lacour","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0"},"headline":"Oracle APEX: redirect all pages to one","datePublished":"2014-03-21T21:51:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/"},"wordCount":648,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg","keywords":["APEX","before","Global page","redirection","rendering"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/","name":"Oracle APEX: redirect all pages to one - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg","datePublished":"2014-03-21T21:51:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0"},"description":"How to redirect all pages to one in Oracle APEX 4.0 and above","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_APEX-logo.jpg","width":148,"height":48},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-apex-redirect-all-pages-to-one\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle APEX: redirect all pages to one"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/acabba2b6ca473b44b098c2de61294b0","name":"Alain Lacour","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/455c4c7743e192ae868a6f9e6ed875415c5887567577eccbbbf2d65012cd976a?s=96&d=mm&r=g","caption":"Alain Lacour"},"description":"Alain Lacour has more than 15 years of experience in application development with Oracle technologies. He is specialized in APEX, Java, and PL\/SQL development. His expertise also includes middleware technologies such as Oracle Weblogic and EMC Documentum. He also has a broad experience in business analysis and architecture solutions as well as in service and project management. Prior to dbi services, Alain Lacour was Senior Consultant at IMS Health in Basel. He also worked as a Software Engineer for M&amp;H Informatics in Basel. Alain Lacour holds a Master of Science in Industrial Computing from the University of Mulhouse (F). His branch-related experience mainly covers the pharma industry, with an in-depth knowledge of the drug development process as well as drug distribution.","url":"https:\/\/www.dbi-services.com\/blog\/author\/alain-lacour\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=3646"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3646\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/3647"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=3646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=3646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=3646"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=3646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}