{"id":89809,"date":"2021-02-02T22:25:13","date_gmt":"2021-02-02T22:25:13","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=89809"},"modified":"2021-02-02T22:25:13","modified_gmt":"2021-02-02T22:25:13","slug":"extend-oracle-erp-to-preview-report-output-and-enable-email","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/blogs\/extend-oracle-erp-to-preview-report-output-and-enable-email\/","title":{"rendered":"Extend Oracle ERP to Preview Report Output and enable Email"},"content":{"rendered":"<p>Oracle ERP is the largest selling suite of applications across north America and it is well Integrated with other corporate applications. Often a times, there is a business requirement to Preview report outputs (in browser) and then email directly from Oracle to the end customers. In this Article, we will use RMA Label (developed using XML Publisher report) as an example to display embedded PDF in browser window on a button click in ERP. We will also, see that same label can be sent via email by adding another button.<\/p>\n<p>This topic outlines the steps to extend Oracle ERP applications in OA framework to add Preview and Email capability for a return Label using Oracle provided standards, so you are still Oracle compliant and do not get impacted by any patches released by oracle. This topic can be used as a reference to implement other features within Oracle applications using OA framework as well.<\/p>\n<h2>Here are the high-level steps for implementation:<\/h2>\n<ol>\n<li>Designing a Label in XML Publisher with client specific format<\/li>\n<li>Upload the XML publisher template in Oracle Repository and Register as a concurrent program<\/li>\n<li>Create new pages using OA framework and JDeveloper to trigger XML Publisher label for preview and email.<\/li>\n<li>Add buttons on existing Business function (such as RMA Label Screen) using Personalization to call newly Developed pages<\/li>\n<\/ol>\n<h2>Pre-requisites<\/h2>\n<p>I\u2019m using the following for my setup:<\/p>\n<ul>\n<li>Oracle EBS 12.2.8 release<\/li>\n<li>Setup Oracle JDeveloper with OAF Extension (10.1.3.4) project and workspace<\/li>\n<li>Putty and FileZilla FTP tool<\/li>\n<li>Design Label using XML Publisher<\/li>\n<\/ul>\n<p>I won\u2019t be going through the setup of these pre-requisites \u2013 setting up JDeveloper and Designing Labels is reasonably straightforward. Please get in touch in case you need any help regarding Pre-requisites.<\/p>\n<h2>Designing Label and Register Concurrent Program<\/h2>\n<p>Labels are designed using XML Publisher report template and uploaded in XML Publisher Administrator repository as below:<\/p>\n<ul>\n<li>Login to Oracle EBS and navigate to XML Publisher Administrator -&gt; Home -&gt; Templates. Create a new Template as below and upload the RTF template<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1296\" height=\"620\" class=\"wp-image-89810\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-53.png\" \/><\/p>\n<ul>\n<li>Login to Application Developer and Create a new Concurrent Program as below.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"743\" height=\"618\" class=\"wp-image-89811\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-54.png\" \/><\/p>\n<p>Please note that concurrent Program Executable is \u201cJava Concurrent Program\u201d.<\/p>\n<ul>\n<li>Login to System Administrator-&gt; Responsibility-&gt; Request to assign the concurrent program (created in previous step) to Application Developer Responsibility.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"816\" height=\"321\" class=\"wp-image-89812\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-55.png\" \/><\/p>\n<ul>\n<li>Test Concurrent Program by submitting manually and Review the output. Make sure, your output is displayed in PDF format as desired.<\/li>\n<\/ul>\n<h2>Develop Oracle Application Framework Page to Preview the PDF output embedded in screen.<\/h2>\n<ul>\n<li>Launch JDeveloper and create new page by going to OA Components-&gt; Page<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"539\" class=\"wp-image-89813\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-56.png\" \/><\/p>\n<ul>\n<li>Give a name (something like ReturnLabelViewPG) and package name (xx.oracle.apps.csd.returns.webui) and click OK<\/li>\n<li>Under the Page Layout Region, add a Single column Layout Region as below.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"385\" class=\"wp-image-89814\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-57.png\" \/><\/p>\n<ul>\n<li>Extend this region to \u201c\/oracle\/apps\/xdo\/oa\/common\/webui\/DocumentViewerRn.MainRegion\u201d <img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"462\" class=\"wp-image-89815\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-58.png\" \/><\/li>\n<li>Right click \u201cPageLayoutRN\u201d and set a new Controller as below.\n<ul>\n<li>Package Name \u2013 xx.oracle.apps.csd.returns.webui<\/li>\n<li>Class Name &#8211; ReturnLabelViewCO<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"851\" height=\"187\" class=\"wp-image-89816\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-59.png\" \/><\/p>\n<ul>\n<li>Add a new Method \u201cPrintReport\u201d in your Controller as below. Pasting the code as well:<\/li>\n<\/ul>\n<pre class=\"lang:c# theme:vs2012\">   public void printReport(OAPageContext pageContext, OAWebBean webBean , String orderId)\r\n   {\r\n         OAApplicationModule oaAM = pageContext.getApplicationModule(webBean);\r\n         pageContext.putParameter(\"p_DataSource\",DocumentHelper.DATA_SOURCE_TYPE_BLOB);\r\n       pageContext.putParameter(\"p_DataSourceCode\",\"XX_DEPOT_RMA\");\/\/ Data Definition Short Name\r\n       pageContext.putParameter(\"p_DataSourceAppsShortName\",\"XX\");\/\/ Data Definition Registered Application Short Name\r\n       pageContext.putParameter(\"p_TemplateCode\",\"XX_DEPOT_RMA\");\/\/XML Report Template Short Code\r\n       pageContext.putParameter(\"p_TemplateAppsShortName\",\"XX\");\/\/XML Report Template Application Short Name\r\n       pageContext.putParameter(\"p_Locale\",\"English:United States\");\/\/XML Report Template Language and Territory\r\n       pageContext.putParameter(\"p_OutputType\",\"PDF\");\/\/Desired XML Report Output\r\n       pageContext.putParameter(\"p_XDORegionHeight\",\"200%\");\/\/Desired XML output frame size       \r\n       Serializable[] oaParams = {orderId}; \/\/Parameter passed to the report\r\n       BlobDomain result = (BlobDomain)oaAM.invokeMethod(\"submitReport\",oaParams);\r\n       pageContext.putSessionValueDirect(\"XML_DATA_BLOB\", result);\r\n   }<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"832\" height=\"354\" class=\"wp-image-89817\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-60.png\" \/><\/p>\n<ul>\n<li>Update ProcessRequest Method in Controller as below to call \u201cprintReport\u201d method coded in previous step.<\/li>\n<\/ul>\n<pre class=\"lang:c# theme:vs2012\">   public void processRequest(OAPageContext pageContext, OAWebBean webBean)\r\n   {\r\n     super.processRequest(pageContext, webBean);\r\n       String strOrderId = pageContext.getParameter(\"OrderId\");\/\/Get this value from calling Page\r\n       printReport(pageContext, webBean, strOrderId);\r\n    }<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"206\" class=\"wp-image-89818\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-61.png\" \/><\/p>\n<ul>\n<li>Create a new Application Module by doing right click on project and click, new Application Module.\n<ul>\n<li>Package name \u2013 xx.oracle.apps.csd.returns.server<\/li>\n<li>Name \u2013 ReturnLabelAM<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"524\" class=\"wp-image-89819\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-62.png\" \/><\/p>\n<ul>\n<li>One the Application Module is created, add a new method \u201csubmitReport\u201d as below. I have pasted the contents as well. This method is called from Controller (previous step) to trigger the label report by passing orderID as input parameter.<\/li>\n<\/ul>\n<pre class=\"lang:c# theme:vs2012\">    public BlobDomain submitReport (String strOrderId)\r\n        {\r\n            BlobDomain blobDomain = new BlobDomain();\r\n            try \r\n            {\r\n                DataTemplate datatemplate = new DataTemplate(((OADBTransactionImpl)getOADBTransaction()).getAppsContext(), \"XX\", \"XX_DEPORT_RMA\");\r\n                Hashtable parameters = new Hashtable();\r\n                parameters.put(\"P_ORDER_ID\",strOrderId);\r\n                datatemplate.setParameters(parameters);\r\n                datatemplate.setOutput(blobDomain.getBinaryOutputStream());\r\n                datatemplate.processData();\r\n            }\r\n            catch(SQLException e)\r\n            {\r\n                throw new OAException(\"SQL Error=\" + e.getMessage(),OAException.ERROR);\r\n            }\r\n            catch (OAException e)\r\n                    {\r\n                        throw new OAException(\"XDOException\" + e.getMessage(),OAException.ERROR);\r\n                    }\r\n           \r\n            catch(Exception e)\r\n            {\r\n                throw new OAException(\"Exception\" + e.getMessage(),OAException.ERROR);\r\n            }\r\n            return blobDomain; \r\n        }\r\n}<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"501\" class=\"wp-image-89820\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-63.png\" \/><\/p>\n<ul>\n<li>Associate the Controller and Application Module to developed OAF page as below. When this page is rendered, it will use Controller and Application Module specified below for execution.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1580\" height=\"523\" class=\"wp-image-89821\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-64.png\" \/><\/p>\n<h2>Develop Oracle Application Framework Page to Email the PDF output based on an Email Address captured in screen.<\/h2>\n<ul>\n<li>Launch JDeveloper and create new page by going to OA Components-&gt; Page. Use the Application Module (ReturnLabelAM) created previously.\n<ul>\n<li>Package Name \u2013 xx.oracle.apps.csd.returns.webui<\/li>\n<li>Class Name &#8211; ReturnLabelEmailCO<\/li>\n<li>Page Name \u2013 ReturnLabelEmailPG<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"869\" height=\"533\" class=\"wp-image-89822\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-65.png\" \/><\/p>\n<ul>\n<li>In Oracle Database, create a new Procedure to submit concurrent program (created in previous steps) with email address provided in delivery options. Here is the code:<\/li>\n<\/ul>\n<pre class=\"lang:tsql theme:ssms2012-simple-talk\">CREATE OR REPLACE PROCEDURE xx_submit_rma_email(\r\np_order_id      IN VARCHAR2,\r\np_email         IN VARCHAR2,\r\nx_request_id    OUT NUMBER)\r\nAS\r\n   l_request_id   NUMBER;\r\n   l_add_delivery BOOLEAN;\r\n   l_add_layout   BOOLEAN;\r\nBEGIN\r\n   fnd_global.apps_initialize (user_id=&gt; fnd_global.user_id\r\n                              ,resp_id=&gt;fnd_global.RESP_ID\r\n                              ,resp_appl_id=&gt;fnd_global.RESP_APPL_ID);\r\n \r\n   l_add_layout:= fnd_request.add_layout (template_appl_name   =&gt; 'XX',\r\n                                             template_code        =&gt; 'XX_DEPOT_RMA',\r\n                                             template_language    =&gt; 'en', --Use language from                   template definition\r\n                                             template_territory   =&gt; 'US', --Use territory from template definition\r\n                                             output_format        =&gt; 'PDF' --Use output format from template definition\r\n                                            );\r\n   l_add_delivery := fnd_request.add_delivery_option (TYPE             =&gt; 'E', \r\n                                                      p_argument1      =&gt; 'Return Material Authorization (RMA) for order#'||p_order_id, -- Email Subject\r\n                                                      p_argument2      =&gt; 'admin@red-gate.com', -- From Address\r\n                                                      p_argument3      =&gt; p_email,   -- To Address\r\n                                                      p_argument4      =&gt; null    -- CC email address\r\n                                                     );\t\t\t\r\n   l_request_id := fnd_request.submit_request ( application =&gt; 'XX'\r\n                                              , program =&gt; 'XX_DEPOT_RMA'\u2014Concurrent Program short Name\r\n                                              , description =&gt; XX Depot Repair RMA Email'\r\n                                              , start_time =&gt; SYSDATE\r\n                                              , sub_request =&gt; FALSE\r\n                                              , argument1 =&gt; p_order_id\r\n                                              );\r\n   COMMIT;    \r\n   IF l_request_id = 0 THEN\r\n      dbms_output.put_line('Request error during submission '|| fnd_message.get);\r\n   ELSE\r\n      dbms_output.put_line('Request is submitted successfully with request id ' || l_request_id);\r\n   END IF;\r\n      x_request_id:= l_request_id;\r\nEXCEPTION\r\n   WHEN OTHERS THEN\r\n     dbms_output.put_line('Unexpected error has occurred during program submission ' || SQLERRM);   \r\nEND xx_submit_rma_email;\r\n\/<\/pre>\n<ul>\n<li>Create a method in Application Module(as below) to call the PLSQL function created above and call this method from the EmailController file.<\/li>\n<\/ul>\n<pre class=\"lang:c# theme:vs2012\">        public String emailLabel(String orderNumber, String xxemail)   \r\n     {   \r\n          OracleCallableStatement callableStatement = null;   \r\n          String requestIdStr =\"\";\r\n          try   \r\n          {   \r\n               String callProc = \" BEGIN xx_submit_rma_email \"+   \r\n                                             \"(p_order_id =&gt; :1, p_email =&gt; :2, x_request_id =&gt; :3);\"+   \r\n                                        \" END; \";   \r\n               callableStatement = (OracleCallableStatement)getOADBTransaction().createCallableStatement(callProc,1);   \r\n               callableStatement.setString(1, orderNumber);  \r\n              callableStatement.setString(2, xxemail); \r\n              callableStatement.registerOutParameter(3,OracleTypes.NUMBER,255);     \r\n               callableStatement.execute();   \r\n               NUMBER requestID = callableStatement.getNUMBER(3);\r\n              requestIdStr = requestID.stringValue();\r\n          }   \r\n          catch(Exception e)             {   \r\n               e.printStackTrace();   \r\n               throw new OAException(e.toString(),OAException.ERROR);   \r\n          }   \r\n          finally             {   \r\n               try   \r\n               {   \r\n                    callableStatement.close();   \r\n               }   \r\n               catch(Exception exception2)   \r\n               {   \r\n                    throw OAException.wrapperException(exception2);   \r\n               }   \r\n          }             return requestIdStr+\"\";\r\n     }    <\/pre>\n<p>Next steps will be to deploy your locally developed Java components\/ OAF page to Application server server.<\/p>\n<ul>\n<li>Login to Unix box on the server using putty and go to $JAVA_TOP<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"469\" class=\"wp-image-89823\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-66.png\" \/><\/p>\n<ul>\n<li>Create new Directories (same as your package structure in jDeveloper)\n<ul>\n<li>mkdir -p xx\/oracle\/apps\/csd\/returns\/server #directory to hold server components<\/li>\n<li>mkdir -p xx\/oracle\/apps\/csd\/returns\/webui #directory to hold webui components<\/li>\n<li>chmod 777 xx\/oracle\/apps\/csd\/returns\/server #set permission to read\/write\/exec<\/li>\n<li>chmod 777 xx\/oracle\/apps\/csd\/returns\/webui #set permission to read\/write\/exec<\/li>\n<\/ul>\n<\/li>\n<li>Login to FileZilla and move the files to locations above<\/li>\n<li>Review the files as below for xx\/oracle\/apps\/csd\/returns\/webui<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"131\" class=\"wp-image-89824\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-67.png\" \/><\/p>\n<ul>\n<li>Review the files as below for xx\/oracle\/apps\/csd\/returns\/webui<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"120\" class=\"wp-image-89825\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-68.png\" \/><\/p>\n<ul>\n<li>Login to putty and go to $JAVA_TOP, run below command to generate customall.jar file. Take backup of existing customall.jar file present on this location\n<ul>\n<li>adgcnjar<\/li>\n<li>it prompts for you to enter APPS (database user name) and password. Once entered, it will generate a customall.jar file on the server.<\/li>\n<\/ul>\n<\/li>\n<li>Import the OAF page into oracle Repository using below command from putty, while connecting to Middle tier<\/li>\n<\/ul>\n<pre class=\"lang:c# theme:vs2012\">$JAVA_TOP\/xx\/oracle\/apps\/csd\/returns\/webui\/ReturnLabelViewPG.xml -username apps -password &lt;apps_password&gt; -dbconnection \"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= &lt;host_name&gt; )(PORT=&lt;host_port&gt;))(CONNECT_DATA=(SID=&lt;host_SID&gt;)))\" -rootdir $JAVA_TOP\r\n$JAVA_TOP\/xx\/oracle\/apps\/csd\/returns\/webui\/ReturnLabelEmailPG.xml -username apps -password &lt;apps_password&gt; -dbconnection \"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= &lt;host_name&gt; )(PORT=&lt;host_port&gt;))(CONNECT_DATA=(SID=&lt;host_SID&gt;)))\" -rootdir $JAVA_TOP<\/pre>\n<ul>\n<li>Bounce application services on middle tier of EBS, so Oracle can pick customall.jar file on run time execution.<\/li>\n<\/ul>\n<h2>Personalize Oracle Application Screen to add Preview and Email Button<\/h2>\n<ul>\n<li>Add a button to the screen in EBS where you want to see the preview output. For demonstration purposes, Depot Repair screen has been used. Use Personalization feature to add Preview button and set the properties as below. Note the Destination URL, which calls the custom page developed.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"643\" height=\"529\" class=\"wp-image-89826\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-69.png\" \/><\/p>\n<ul>\n<li>Add a button to the screen where you want to trigger the email. For demonstration purposes, Depot Repair screen has been used. Use Personalization feature to add Email button and set the properties as below. Note the Destination URL, which calls the custom page developed.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"498\" class=\"wp-image-89827\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-70.png\" \/><\/p>\n<ul>\n<li>As you can see below, RMA Preview and RMA Email button are displayed now.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1482\" height=\"244\" class=\"wp-image-89828\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-71.png\" \/><\/p>\n<h2>Test RMA Preview changes<\/h2>\n<ul>\n<li>Click RMA Preview button. Clicking this button calls, the XML publisher template and embeds the output in frame as below.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1195\" height=\"512\" class=\"wp-image-89829\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/02\/word-image-72.png\" \/><\/p>\n<ul>\n<li>Click RMA Email button. Clicking this button calls, the XML publisher Concurrent Program (XX_DEPOT_RMA) and sends an email.<\/li>\n<\/ul>\n<h2>Conclusion:<\/h2>\n<p>In this Article, we learnt about extending Oracle Applications to add Preview and Email functionality using oracle standards. You can use the same approach and extend any Oracle provided screen to add more functionality. I hope you find this article useful for your business requirements.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oracle ERP is the largest selling suite of applications across north America and it is well Integrated with other corporate applications. Often a times, there is a business requirement to Preview report outputs (in browser) and then email directly from Oracle to the end customers. In this Article, we will use RMA Label (developed using&#8230;&hellip;<\/p>\n","protected":false},"author":335680,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"coauthors":[136361],"class_list":["post-89809","post","type-post","status-publish","format-standard","hentry","category-blogs"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/89809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/335680"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=89809"}],"version-history":[{"count":2,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/89809\/revisions"}],"predecessor-version":[{"id":89831,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/89809\/revisions\/89831"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=89809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=89809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=89809"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=89809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}