tag:blogger.com,1999:blog-15005822915147863802024-03-13T11:48:02.177+01:00Holgers Weblog - Oracle Forms, APEX, Docker and beyondIn diesem Weblog geht es um Erfahrungen mit Oracle Forms, einem 4GL Entwicklungswerkzeug der Firma Oracle für die Programmierung von interaktiven Dialogmasken und Applikationen, angereichert mit SQL, PL/SQL und Java. Neu sein werden bald Berichte zu APEX. Oracle Application Express (APEX) ist eine Low-Code-Entwicklungsplattform für Web-Applikationen. Und alles was dazu noch in den Bereich Programmierung, Docker, Virtualisierung, Agile Entwicklung, Kanban und Scrum fällt.
Have fun.Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.comBlogger56125tag:blogger.com,1999:blog-1500582291514786380.post-68218734249986516002021-11-26T13:15:00.000+01:002021-11-26T13:15:36.899+01:00APEX 21.2 new declarative way for confirmation dialog settings without javascript<p>Yesterday my colleague Maik Michel posted a screenshot on Twitter with a new feature of APEX 21.2, a new declarative way for confirmation dialog settings without javascript.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuHhQA7lhyphenhyphenHol6pmWBgExW7o8pAAuknkhphT29ASBKpsyPRhmnYAAtQW0eElaG5sLntajntGOAnt0Pk444mTQ7_CJ20L_XjjmT3tvbp3A3o40CHxJldq-6lpF7FbgPnDRLFxa28MjWquiI/s2048/FFCwuV2XsBEQafX+%25281%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1731" data-original-width="2048" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuHhQA7lhyphenhyphenHol6pmWBgExW7o8pAAuknkhphT29ASBKpsyPRhmnYAAtQW0eElaG5sLntajntGOAnt0Pk444mTQ7_CJ20L_XjjmT3tvbp3A3o40CHxJldq-6lpF7FbgPnDRLFxa28MjWquiI/w400-h338/FFCwuV2XsBEQafX+%25281%2529.jpg" width="400" /></a></div><br /><p>Now in the new release you don't need javascript to show the confirmation dialog if you are deleting a project, person or whatever you want to delete.I have created several screenshots to demonstate the old and new settings.</p><p>First usage of javascript < APEX.21.2</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZTZvsRTzaC3_eMYGAiCjCc_pkha9ID26CwA-DNwmYpdVv4U8GLvzTUJSZfDNAkHq21b3VSd_dvDqysUuEQ3sHiEr_2jzbUncUbNIBsWz_zA_YdfpLdgmsslKIO6jijPHvMzGdwvgTHVXR/s294/Screenshot+2021-11-26+125309.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="294" data-original-width="234" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZTZvsRTzaC3_eMYGAiCjCc_pkha9ID26CwA-DNwmYpdVv4U8GLvzTUJSZfDNAkHq21b3VSd_dvDqysUuEQ3sHiEr_2jzbUncUbNIBsWz_zA_YdfpLdgmsslKIO6jijPHvMzGdwvgTHVXR/w318-h400/Screenshot+2021-11-26+125309.png" width="318" /></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW2VuxGvtVHpRjMsdIbPRkiEBSPw3MnWKuXkZ7Timxnv9n3_BY8LfnR2yXBk_tT7Y9jxgIPw1AAytn1PD1D8unyHdsWs5x8aUCuap0M6p2UUB7m9uJGu01K8CoHGow_V0c6dtbCuaXUqtE/s640/Screenshot+2021-11-26+125345.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="640" height="269" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW2VuxGvtVHpRjMsdIbPRkiEBSPw3MnWKuXkZ7Timxnv9n3_BY8LfnR2yXBk_tT7Y9jxgIPw1AAytn1PD1D8unyHdsWs5x8aUCuap0M6p2UUB7m9uJGu01K8CoHGow_V0c6dtbCuaXUqtE/w400-h269/Screenshot+2021-11-26+125345.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">With APEX 21.2 everything can be done in the App Builder.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHf-dwqa49ci9DokxiW0Y2YCIehe0II3cPWgNk-VNi89bnGZlaFUI47oUlw0-sz59sKHCGwfZAB-0OfoBghyphenhyphenGTQnbPOiGy5qG1eZvOjwWq9pkGGvj8OWCPwMy4nR4IHYljW2oFDkKRSAFR/s414/Screenshot+2021-11-26+125455.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="414" data-original-width="259" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHf-dwqa49ci9DokxiW0Y2YCIehe0II3cPWgNk-VNi89bnGZlaFUI47oUlw0-sz59sKHCGwfZAB-0OfoBghyphenhyphenGTQnbPOiGy5qG1eZvOjwWq9pkGGvj8OWCPwMy4nR4IHYljW2oFDkKRSAFR/w250-h400/Screenshot+2021-11-26+125455.png" width="250" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqnbhyLg05u3NPibSpH-IJoTpjUPaQ0admFgkFwsul_V7MKdjew61MXtNXFn_7kSxJ2IRpZ8GsVN5yVVDCc5anUZ5IykGhqPITsy19EnJ1VKwQD0UFKsA-vv5MzgihdsEvmnZTGsT7tqY9/s642/Screenshot+2021-11-26+125539.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="434" data-original-width="642" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqnbhyLg05u3NPibSpH-IJoTpjUPaQ0admFgkFwsul_V7MKdjew61MXtNXFn_7kSxJ2IRpZ8GsVN5yVVDCc5anUZ5IykGhqPITsy19EnJ1VKwQD0UFKsA-vv5MzgihdsEvmnZTGsT7tqY9/w400-h270/Screenshot+2021-11-26+125539.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3pNITdd7h720d312CAg-dZiXWT73XOhyphenhyphenM9-Fx8Hhtq0X-hM_eBOBFfrMvSGWKaoIwvOBNokLhVmuu2Upxu_0kjficEfGDIkWqajShLzH5P67dnlyL1gdIyv_lsKrylIfUFabL6wxsORfA/s643/Screenshot+2021-11-26+125634.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="428" data-original-width="643" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3pNITdd7h720d312CAg-dZiXWT73XOhyphenhyphenM9-Fx8Hhtq0X-hM_eBOBFfrMvSGWKaoIwvOBNokLhVmuu2Upxu_0kjficEfGDIkWqajShLzH5P67dnlyL1gdIyv_lsKrylIfUFabL6wxsORfA/w400-h266/Screenshot+2021-11-26+125634.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>What do you think? Things have become pretty easy :-)<br /><div class="separator" style="clear: both; text-align: left;"><br /></div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-65912103911619699272021-05-17T09:44:00.001+02:002021-05-17T09:44:48.017+02:00Running APEX 21.1 in Docker<p>Last week I posted a screenshot of the new Oracle APEX 21.1 running in my docker environment on Ubuntu Linux and I was asked to give a futher view of installing the new version. Here it comes right now 😀</p><p>To make things easier I searched the internet for a template of a docker project and I found the git repository from fuzzlebrain <a href="https://github.com/fuzziebrain/docker-apex-stack">fuzziebrain/docker-apex-stack: Utility scripts for creating an Oracle Application Express stack as a Docker container. (github.com)</a>.</p><p>In general the process clones the official Oracle docker images and installs the needed software that is configured in a configuration file.</p><p><b>Step 1</b> is cloning the git repository to my local file system:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDWCuIbrPUhpPIedf4w1VQzzMNlYhia8WokxrWUHstqmmaQotUfT_TLac2luMo1s3NysY1QiNdImY_S2gLQxKwM9iSgqRu-gIXz2wTKeyaUbecby6fjEqBOhlJkj2XDd5YCV3pf4hedFWT/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="95" data-original-width="832" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDWCuIbrPUhpPIedf4w1VQzzMNlYhia8WokxrWUHstqmmaQotUfT_TLac2luMo1s3NysY1QiNdImY_S2gLQxKwM9iSgqRu-gIXz2wTKeyaUbecby6fjEqBOhlJkj2XDd5YCV3pf4hedFWT/w640-h74/image.png" width="640" /></a></div><br /><p></p><p>Prerequisites of software packages:<br /><span> </span>Install the following things in your host:<br /></p><ul style="text-align: left;"><li><span> </span>Git</li><li><span> </span>Curl</li><li><span> </span>Docker (of course)</li></ul><p></p><p><b>Step 2 </b>is getting the required the installer files and placing them in the subfolder <files></p><p></p><ul style="text-align: left;"><li>Oracle Database 18c XE or any of the required installation files from OTN (supports versions up to 19.3 as of April 25, 2019)</li><li>Oracle Application Express (supports versions up 21.1 as of May 12, 2021)</li><li>Oracle REST Data Services (supports versions up to 20.4.3 as of May 12, 2021) or ords-21.1.1.116.2032.zip</li><li>Java Development Kit SE 8 (IMPORTANT: Please download the tarball, e.g. jdk-8u291-linux-x64.tar.gz.)</li></ul><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvDIkOxZhlOhWMwrWl5Jsk0N_IDYb902TU9EWt3owp6TSXVavZhyphenhyphenqqABMeyggJ7EG1WnD0g-Nayy2nspjzX3aGgrFNl0Gooz2k5zgWeFokVuhHpx4kQgRy2BUjgJG-Rr57S78L3SSxDOGq/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="307" data-original-width="875" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvDIkOxZhlOhWMwrWl5Jsk0N_IDYb902TU9EWt3owp6TSXVavZhyphenhyphenqqABMeyggJ7EG1WnD0g-Nayy2nspjzX3aGgrFNl0Gooz2k5zgWeFokVuhHpx4kQgRy2BUjgJG-Rr57S78L3SSxDOGq/w640-h224/image.png" width="640" /></a></div><br />You can even try to build your docker images with different versions of ORDS or APEX. <br />After executing the first step for several times I changed the first script 01-build.sh a little bit and removed the line where the official docker images are pulled. Why ? Because they are placed in the folder dockerfiles after the first run and pulled every time the process is started.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU4FgY-ePGvCx011azAPVuiHy6h-HSK2rdTYWfar7LqqshyLWEKYTzrijqFmpVpgg_rHJAzBIiaY8wmcVKmfTABqbZYxOt9sFGiV-FHzjAg99HAtSTC5Mynd88Ssx0IXEL4-H46a9j-_R2/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="42" data-original-width="667" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU4FgY-ePGvCx011azAPVuiHy6h-HSK2rdTYWfar7LqqshyLWEKYTzrijqFmpVpgg_rHJAzBIiaY8wmcVKmfTABqbZYxOt9sFGiV-FHzjAg99HAtSTC5Mynd88Ssx0IXEL4-H46a9j-_R2/w640-h40/image.png" width="640" /></a></div><br />The second "issue" I modified is in the used 18c XE database Dockerfile as the install file is downloaded every time docker creation runs, But it should use the rpm file from the files folder.</div><div><br /></div><p></p><div>old: INSTALL_FILE_1="https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm" \</div><div><div><br /></div><div>new: INSTALL_FILE_1="oracle-database-xe-18c-1.0-1.x86_64.rpm" \</div></div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvx29-Zy55j7bVND2pZr0REuNms7cilAZcALQ1jDtqb5CeRseqbRbp12s8G2lkkCwikvkb9MYJRbp68jIK-8K3QkdMdI9oniT2tYGIemmNiMQm-EPgbleYKKZRNbakq9xRoTvNvxLV0ecd/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="293" data-original-width="1807" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvx29-Zy55j7bVND2pZr0REuNms7cilAZcALQ1jDtqb5CeRseqbRbp12s8G2lkkCwikvkb9MYJRbp68jIK-8K3QkdMdI9oniT2tYGIemmNiMQm-EPgbleYKKZRNbakq9xRoTvNvxLV0ecd/w640-h104/image.png" width="640" /></a></div><div><br /></div><b>Step 3</b> is to configure my settings for the creation process in the file mysettings.env.</div><div>Make a copy of settings.env.sample, e.g. mysettings.env, and modify as desired. <br /><br /></div><div>mysettings.env should contain the following variables:</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh500NbGInHRUJtjjzO8POIBW_HXX49JTaSiFGaHlp6LlJ8ElHDmgi2xeQF4CzOH8vFlOcq-T01YOjcN8C_muAv1mpJZgmu0JIkA5wQsgbKJo04JfTCRFmLzWKsDcd5uYSqVHybESbbDVIU/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="541" data-original-width="492" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh500NbGInHRUJtjjzO8POIBW_HXX49JTaSiFGaHlp6LlJ8ElHDmgi2xeQF4CzOH8vFlOcq-T01YOjcN8C_muAv1mpJZgmu0JIkA5wQsgbKJo04JfTCRFmLzWKsDcd5uYSqVHybESbbDVIU/w363-h400/image.png" width="363" /></a></div><br /> You can change many parameters in there e.g. the oracle SID, the versions, the ports and the passwords for Oracle, APEX and ORDS. When you are done the DB creation process can be started.</div><div><br /></div><div><b>Step 4 </b>is to run the first script to grab the latest Docker images from Oracle and build the Oracle Database image. The script takes one parameter, the environment filename (mysettings.env).</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivnVuNG-tKs2yf-_3vPGvmHFCAeh_pWxdZMnmdokM60mRId3Bh5DNgsNEcNo0pY44vVSDeSnhLdMobiQzz4ISvbeGGCBvqqwY4oYDUs8bB4sGKK7qRoU75EQieYgFETseWFcVeBJv_eL5N/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="59" data-original-width="317" height="60" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivnVuNG-tKs2yf-_3vPGvmHFCAeh_pWxdZMnmdokM60mRId3Bh5DNgsNEcNo0pY44vVSDeSnhLdMobiQzz4ISvbeGGCBvqqwY4oYDUs8bB4sGKK7qRoU75EQieYgFETseWFcVeBJv_eL5N/" width="320" /></a></div><br /><b>Step 5 </b>is to run the final script to create and run the container, where the container name is of your choice e.g. das.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPezpRgNRmpsvC-l4BDjJFtn5XcZbv0DxGpvq5n71XPW8_GlLXvYZqEZUEKdMVKI78gG5_oRoczayqqhSgRFZVq58zKDWpxR4j6MRy6qDTJmkpXCMxiQtBC9PEapG0gh5i4rFbv-wH7rVL/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="47" data-original-width="323" height="47" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPezpRgNRmpsvC-l4BDjJFtn5XcZbv0DxGpvq5n71XPW8_GlLXvYZqEZUEKdMVKI78gG5_oRoczayqqhSgRFZVq58zKDWpxR4j6MRy6qDTJmkpXCMxiQtBC9PEapG0gh5i4rFbv-wH7rVL/" width="320" /></a></div><br />When the script is ready or when I start my previous container again I can login to the APEX internal workspace http://localhost:50080/ </div><div><br /></div><div>the initital password for the ADMIN user can be retrieved from mysettings.env</div><div><br /></div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipSmBLeDUKSOIW74Kx8JtSnvTCVjQ2s36OsWQJgsNBYzEMLR3j816jLaS9rlTwhvNb2Um-QryffCT7MWOPWj6U_jEQKvI35COeeBdfsCnwFMLS-H_kborP8h8nJgGNnVEajPcINTDVkjvz/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="510" data-original-width="461" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipSmBLeDUKSOIW74Kx8JtSnvTCVjQ2s36OsWQJgsNBYzEMLR3j816jLaS9rlTwhvNb2Um-QryffCT7MWOPWj6U_jEQKvI35COeeBdfsCnwFMLS-H_kborP8h8nJgGNnVEajPcINTDVkjvz/w362-h400/image.png" width="362" /></a></div><br /><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoXK5HlK1UlWr00OrxR04WoBBU5U6EMDfNGJgleVG20z4lim3B-qyztXb4hpJvFTJtunYt5SF7WskI-yjBop0HdsvvVeylYBMFyLtLV1zM6pVx2C1vGzzu5d6slmZO72BxXora9Uda3o5W/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="317" data-original-width="1643" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoXK5HlK1UlWr00OrxR04WoBBU5U6EMDfNGJgleVG20z4lim3B-qyztXb4hpJvFTJtunYt5SF7WskI-yjBop0HdsvvVeylYBMFyLtLV1zM6pVx2C1vGzzu5d6slmZO72BxXora9Uda3o5W/w640-h125/image.png" width="640" /></a></div><br />After login ypu are able to create other workspaces in APEX or applications if you like.</div><div><br /></div><div>That is pretty easy to use and play with APEX in Docker.</div><div><br /></div><div>Cheers</div><div>Holger</div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-41483127630599921202021-05-07T16:19:00.003+02:002021-05-07T16:19:31.773+02:00APEX: Vergrößern der Navigationsbar bei einem Seitenmenü per Javascript<p>Moin allerseits,</p><p>heute wieder ein kurzer Beitrag zu Oracle APEX. Was will ich machen? Das seitliche Navigationsmenü soll verbreitert werden. Die übliche Option ist natürlich über den Theme Roller.</p><p>Das ging in unserem Projekt nicht, denn das Universal Theme war noch bei einer älteren Version und sollte auch dabei bleiben.</p><p>Wir hatten ein paar längere Menüeinträge, daher sollte das Menü breiter werden.</p><p>Funktioniert hat dieser Wunsch mit dem Einsatz von Javascript auf der Page 0, der Global Page - Desktop mit einer Dynamic Action beim Page Load.</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKga3p-_hTOZCLTh6HRnbvPw7ssMTiCIU25lQY74XgGDog8inpJz-6w_ASf5E2eOV2TygTrTdPmPU4fzX1G6z3R4jDNWp9a3hZuXOS27Uq5NZwQg9Hj1vzFs2tA-j9vtflP1-5bIRS0exq/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="123" data-original-width="291" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKga3p-_hTOZCLTh6HRnbvPw7ssMTiCIU25lQY74XgGDog8inpJz-6w_ASf5E2eOV2TygTrTdPmPU4fzX1G6z3R4jDNWp9a3hZuXOS27Uq5NZwQg9Hj1vzFs2tA-j9vtflP1-5bIRS0exq/" width="320" /></a></div><br /><br /></div><p></p><p>Javascript Source: Link zum <a href="https://github.com/hollipolli2904/mine/blob/main/apex_nav_bar.js" target="_blank">File </a>auf Github.</p><p>Screenshot vom eingeklappten Menü:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgsAhuoIa8UhDisCbcAA1m08N_x5FJYSSfAY_gOboYo6uTi2NlUb6a4yJ9XeiISxaBBK21ywpstc6l4Jo_dTG0WQdPAVL4kIn_VRnz2Sa51GiAFzqJzYDdbZReTipsSgcHlpVuh8MHFZ_A/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="96" data-original-width="202" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgsAhuoIa8UhDisCbcAA1m08N_x5FJYSSfAY_gOboYo6uTi2NlUb6a4yJ9XeiISxaBBK21ywpstc6l4Jo_dTG0WQdPAVL4kIn_VRnz2Sa51GiAFzqJzYDdbZReTipsSgcHlpVuh8MHFZ_A/" width="320" /></a></div><br /><br /><p></p><p>Screenshot vom ausgeklappten Menü:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAd0ZcK0dW6Ohb5jMgwKKhrDZjNsb-ZGGftonl0VJGM5A4l_vyDcU0AM9qG51Rc1Cob4oUReFZz9I9cPaEeefuNptLR1GalBXG_QNrss4eTDdBsGAbJio03gDx_oA_ulKhn6s0qIXel_gK/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="58" data-original-width="469" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAd0ZcK0dW6Ohb5jMgwKKhrDZjNsb-ZGGftonl0VJGM5A4l_vyDcU0AM9qG51Rc1Cob4oUReFZz9I9cPaEeefuNptLR1GalBXG_QNrss4eTDdBsGAbJio03gDx_oA_ulKhn6s0qIXel_gK/w400-h50/image.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Die Herausforderung bestand darin, dass manchmal nicht alle Menüs und Pages korrekt dargestellt wurden, sondern so ein Zwitter entstand. Dann haben auch die Abstände nicht gestimmt.<p></p><p>Wir haben in dem Javascript File ein Initial Setting bei Applikationsstart sowie weitere Zweige, wenn des Menü auf expanded bzw. collapsed geht oder auf einen Navigationseintrag geklickt wird.</p><p>Viel Spass beim Ausprobieren wünscht Holger.</p>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-33236871179457003532021-03-16T12:14:00.000+01:002021-03-16T12:14:52.623+01:00Ausgabe der Daten eines Classic Report oder Interactive Report mit Filtern aus APEX in APEX Office Print (AOP)<p>Heute möchte ich wieder die Lösung einer kleinen APEX Aufgabe in meinem Blog Post beschreiben.</p><p>Die Situation bisher war so, dass nur die Inhalte eines Classic bzw. Interactive Report in Tools wie Microsoft Excel oder Word per APEX Office Print (AOP) ausgegeben werden. Aber auf der APEX Seite gibt es dafür auch noch einige vordefinierte Filtermöglichkeiten, die der Kunde nun auch noch in der Druckausgabe sehen wollte.</p><p>Ich habe das Szenario für die Demo mit Objekten aus dem Data Dictionary nachgebaut, indem ich Objekte von Benutzern aus der Datenbank filtern und ausgeben kann.</p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6w00ahp5xcZ9S2NLmprc8HdSstB-0kJK0ikWuFqgsNENF9hmLDab5ySXrLjn5ykRXZXfw-JERNRj3j6g9tR9XFlfQ0HeBT52W4ZVZDq6_kc2sHS-XZxP5YGElH7bb64n6cJMZRcvv-YEl/" style="margin-left: auto; margin-right: auto;"><img data-original-height="428" data-original-width="1296" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6w00ahp5xcZ9S2NLmprc8HdSstB-0kJK0ikWuFqgsNENF9hmLDab5ySXrLjn5ykRXZXfw-JERNRj3j6g9tR9XFlfQ0HeBT52W4ZVZDq6_kc2sHS-XZxP5YGElH7bb64n6cJMZRcvv-YEl/w640-h211/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">APEX Seite mit einem Interactive Report mit Filtern<br /></td></tr></tbody></table></p><p><br /></p><p>Die Ausgabe im Word Dokument sieht so aus:</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBgHEqbsBZtPGKkEyLX0ZLOQlCJMd6nJwZoN2n5GMDTcgRIa_0Io5zlqF7qWCrZ_9GEDGAdCzDdx8xfTaNyd4UebYGNQaLD7O1Z5S8O7seGWStnZ89hNxGkNLsVXYThbGUy7xwXrjlZWZj/" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="338" data-original-width="750" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBgHEqbsBZtPGKkEyLX0ZLOQlCJMd6nJwZoN2n5GMDTcgRIa_0Io5zlqF7qWCrZ_9GEDGAdCzDdx8xfTaNyd4UebYGNQaLD7O1Z5S8O7seGWStnZ89hNxGkNLsVXYThbGUy7xwXrjlZWZj/w640-h288/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Druckausgabe in Word per AOP</td></tr></tbody></table><div><br /></div>Die Tabelle der Benutzer und Tabellen wird von APEX vom Interactive Report mit einer Static Id übergeben. Für die Filter habe ich 2 unsichtbare Classic Reports erstellt und auch mit einer Static Id versehen, damit ich die Filterinhalte auch recht einfach an AOP übergeben kann.<p></p><p><br /></p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYM63kM8UEw_WZDzJzdmU7fnlA8co84z-0Tq_PekrhT8G8pwjAKfIZjLD5u1D5hyA7zQOwBJzC7GHbcCe4JSQ7Tqz35bgDXXH9ucUaPDx8qteTZlXhylIbmk6_2V2l7RuOKVv_kKZpY-J9/" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="74" data-original-width="366" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYM63kM8UEw_WZDzJzdmU7fnlA8co84z-0Tq_PekrhT8G8pwjAKfIZjLD5u1D5hyA7zQOwBJzC7GHbcCe4JSQ7Tqz35bgDXXH9ucUaPDx8qteTZlXhylIbmk6_2V2l7RuOKVv_kKZpY-J9/w400-h81/image.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Angabe mehrerer Static Ids für AOP</td></tr></tbody></table><p><br /></p>Das Word Template für die Druckausgabe schaut dann so aus:<p></p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6KTI6sXnLDyT3SUssn7M8ad_NvUj681ype5jVYVp7dAjiD6Xp00Hl_HMyS7xanzujiicYvSKkuLhDPKtVlviOc6RAQcrDCuGkfOa09TZs6rHHPHb0GOZiTNrvLR_h6KR2ChZ6m4bhU-q/" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="128" data-original-width="755" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6KTI6sXnLDyT3SUssn7M8ad_NvUj681ype5jVYVp7dAjiD6Xp00Hl_HMyS7xanzujiicYvSKkuLhDPKtVlviOc6RAQcrDCuGkfOa09TZs6rHHPHb0GOZiTNrvLR_h6KR2ChZ6m4bhU-q/w640-h109/image.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Word Template des AOP Dokumentes</td></tr></tbody></table><div><br /></div>Zu beachten ist: Vorher hieß das Tag in meinem Word Template nur {&interactive}. Nach dem Hinzufügen der 2 weiteren Static Ids für die Filter Classic Report mußte ich das Tag in {&interactive_1} ändern, weil eine Fehlermeldung kam.<br /><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIhTbAkreojQXoMXvMH35lraFs4wQ_6gaIcyd13tw8AdiV7bFr5P1S7fGFFdPRsLnEpdmfc7w0njoQwa1dHLzAQ7uhQxxqsgsYbkt_1S5k26KTS9ic8rWrHZLvff48pPBbNulg9wR29bUl/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="26" data-original-width="950" height="18" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIhTbAkreojQXoMXvMH35lraFs4wQ_6gaIcyd13tw8AdiV7bFr5P1S7fGFFdPRsLnEpdmfc7w0njoQwa1dHLzAQ7uhQxxqsgsYbkt_1S5k26KTS9ic8rWrHZLvff48pPBbNulg9wR29bUl/w640-h18/image.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div>Das Ganze funktioniert sehr ähnlich für Excel.<div><br /></div><div>Wenn man keine Lizenz für APEX Office Print besitzt, kann man sich AOP auch in einem Container in einer Always Free Instanz bzw. VM in der Oracle Cloud installieren.</div><div>Link: <a href="https://dgielis.blogspot.com/2019/09/free-oracle-cloud-8-setup-apex-office.html">https://dgielis.blogspot.com/2019/09/free-oracle-cloud-8-setup-apex-office.html</a></div><div><br /><p></p></div><div>Viel Spaß beim Ausprobieren von APEX Office Print...</div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-53311125329882094082021-02-11T15:11:00.000+01:002021-02-11T15:11:12.945+01:00Submit einer Custom APEX Login Page mit der Enter Taste<p>Hier kommt der nächste neue APEX Post von mir. Thema heute: Submit einer Custom APEX Login Page mit der Enter Taste.</p><p>Der Login Screen ist nicht der Standard APEX Login Screen, sondern eine selbst entwickelte Page.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqS-ChVeG3Yc6l_UFJiiAdse-q0epSqY-yt8vIeqGvUccRKFhBgD1NOG5EdzqQ9RVYMn9-d3i_2wxd9crHnMG3wtBSEXaRqVNjANjSf5L1zoRQps1EIC3x2z7IxuM-TO_RjNe1m6GY1yLo/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="189" data-original-width="386" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqS-ChVeG3Yc6l_UFJiiAdse-q0epSqY-yt8vIeqGvUccRKFhBgD1NOG5EdzqQ9RVYMn9-d3i_2wxd9crHnMG3wtBSEXaRqVNjANjSf5L1zoRQps1EIC3x2z7IxuM-TO_RjNe1m6GY1yLo/w400-h196/image.png" width="400" /></a></div><br /><br /><p></p><p>Der Login mit der Maus geht hervorragend, aber es soll auch ein Login mit der Enter Taste möglich sein, wenn man im Item "password" ist.</p><p>Ein einfaches Submit when Enter pressed </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttbxlxaJs8lq2cmGm0IgrfbeVI3vcG_J3wn7f3qTTM_bim-rwe-R9w2eO003GfKBMwhgQmuJvspbc1peD_rE9d-3uMCKu27c_XBgSm7oi6-c4_c2cmTVgYI9IJONtyvHEcd1GK6uxXCqQ/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="93" data-original-width="177" height="105" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttbxlxaJs8lq2cmGm0IgrfbeVI3vcG_J3wn7f3qTTM_bim-rwe-R9w2eO003GfKBMwhgQmuJvspbc1peD_rE9d-3uMCKu27c_XBgSm7oi6-c4_c2cmTVgYI9IJONtyvHEcd1GK6uxXCqQ/w200-h105/image.png" width="200" /></a></div><br /><p></p><p>reicht leider nicht, da die Login Logik hinter dem Button "Log In" liegt.</p><p>Also wird eine neue Dynamic Action auf dem Item "password" angelegt und mit etwas JavaScript gefüttert.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTo1ny_VBEHQAsb0MsK0gEV4NdX87tf13rLVGw9D4NKxvOvmDA8LeDNIdm4zmN4GWk7UU95Mo1SYR-IY5EAF5ZcAP_gVRhxUfIciwH-QcFUOHgPUAQohKjYWY0C8Nyom_Z3P6hmIum-iMQ/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="268" data-original-width="359" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTo1ny_VBEHQAsb0MsK0gEV4NdX87tf13rLVGw9D4NKxvOvmDA8LeDNIdm4zmN4GWk7UU95Mo1SYR-IY5EAF5ZcAP_gVRhxUfIciwH-QcFUOHgPUAQohKjYWY0C8Nyom_Z3P6hmIum-iMQ/w400-h299/image.png" width="400" /></a></div><p><br /></p>Hier kommt der JavaScript Code für die True-Action.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih4hV6Y5cXe_FCItVM6dE8ss2rN7RM-8GsJmtD39zkrhPAyDdtQ0GiV0mkOqhNr6MJwCcTe3liAdQKERrzHGbP7cveEAqs_0Jmabv6HYEfxrKwL74LqYlpc96B-tYox7t5Y4voEsHOKnLK/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="226" data-original-width="317" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih4hV6Y5cXe_FCItVM6dE8ss2rN7RM-8GsJmtD39zkrhPAyDdtQ0GiV0mkOqhNr6MJwCcTe3liAdQKERrzHGbP7cveEAqs_0Jmabv6HYEfxrKwL74LqYlpc96B-tYox7t5Y4voEsHOKnLK/w400-h285/image.png" width="400" /></a></div>Und schon führt die Betätigung der Enter Taste die Login-Prozedur aus.<p></p><p><br /></p><p>Cheers,</p><p>Holger</p><p><br /><br /></p>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-23920619104676846642021-02-02T16:07:00.002+01:002021-02-03T14:02:34.852+01:00Einen modalen Dialog in APEX nach dem Login Vorgang anzeigen<p>Hallo allerseits,</p><p>heute kommt mein 1. Post zum Thema Oracle APEX, mit dem ich nun auch unterwegs bin.</p><p>Meine Aufgabe war es, einen modalen Dialog in APEX nach dem Login anzeigen, natürlich nur unter gewissen Bedingungen.</p><p>Die PageId des modalen Dialog ist 340.</p><p>Zuerst habe ich versucht das Ganze mit einem Branch und einem Page Redirect anzuzeigen.</p><p></p><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;"><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDmF9stI79N2yljRFKxapeYSReQm0_TurL7pHTCWj5ZJiwZLut9LYxNmXuA_NWHRORVnJQdPJ0zSRjaNhByON8DQS1zgTZVN8cTgumJXJmllXr5WJLXslQXLdCpAGBBeASAOJp3VOIwK-g/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="159" data-original-width="166" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDmF9stI79N2yljRFKxapeYSReQm0_TurL7pHTCWj5ZJiwZLut9LYxNmXuA_NWHRORVnJQdPJ0zSRjaNhByON8DQS1zgTZVN8cTgumJXJmllXr5WJLXslQXLdCpAGBBeASAOJp3VOIwK-g/" width="251" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrUSdnwyX4cZOp8v2aNWa79DrjGIlvObIUMCyC1QQrReajzLj377_PvqpaxczUB_e7fZ_-ABykj9qHBmnguYfL59Sxnym64tRX5FIQvwduxeDztFEU0ES5eXr03WeYetyjfNSyxDuiQMlE/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="202" data-original-width="360" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrUSdnwyX4cZOp8v2aNWa79DrjGIlvObIUMCyC1QQrReajzLj377_PvqpaxczUB_e7fZ_-ABykj9qHBmnguYfL59Sxnym64tRX5FIQvwduxeDztFEU0ES5eXr03WeYetyjfNSyxDuiQMlE/" width="320" /></a></div></div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDmF9stI79N2yljRFKxapeYSReQm0_TurL7pHTCWj5ZJiwZLut9LYxNmXuA_NWHRORVnJQdPJ0zSRjaNhByON8DQS1zgTZVN8cTgumJXJmllXr5WJLXslQXLdCpAGBBeASAOJp3VOIwK-g/" style="margin-left: 1em; margin-right: 1em;"><br /></a></div><br /><br /><p></p><p>Aber da das Ganze ja ein modaler Dialog ist, ist nichts passiert. Dann ein wenig im Internet gesucht und die Lösung mit JavaScript gefunden.</p><p>Ich habe dazu ein Item PX_URL und eine Dynamic Action beim Page Load angelegt.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7utSdyVuTXZPscHA0SeQLLg8cQnGVm0mKP4_7LTTxR0eKdJGnHqy2qT77-nac6Frt4pQ4hZNIg_l1IFVTCRJPf0ZQqXVkxfhmwtfMUAZdcdVzygm-c6E6FwiKb4jBwH5teaNl7AYVtJ3M/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="169" data-original-width="300" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7utSdyVuTXZPscHA0SeQLLg8cQnGVm0mKP4_7LTTxR0eKdJGnHqy2qT77-nac6Frt4pQ4hZNIg_l1IFVTCRJPf0ZQqXVkxfhmwtfMUAZdcdVzygm-c6E6FwiKb4jBwH5teaNl7AYVtJ3M/" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Bei Set Value wird die URL für den modalen Dialog zusammengebaut.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lIzU9H11ryY_gFPhGAdInNHF7U2yFbETQXmtQSwgXM3dafQVd2ctsYP31AJtB_hqTN0AyWQ7_GQGFcx83DeO3YY7_OPiuVz9nsYxlUAHhl7h7JLMFukO1XoT4y74tuTU4bcRAH7eBf0f/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="512" data-original-width="311" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lIzU9H11ryY_gFPhGAdInNHF7U2yFbETQXmtQSwgXM3dafQVd2ctsYP31AJtB_hqTN0AyWQ7_GQGFcx83DeO3YY7_OPiuVz9nsYxlUAHhl7h7JLMFukO1XoT4y74tuTU4bcRAH7eBf0f/w390-h640/image.png" width="390" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Zum Start des Dialoges wird JavaScript aufgerufen.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVYB_lvwj1a4P3pmxAAgX8XDq4Xhx7qErowYUED7LA1cH6bddvXgp4xu6ECxjjOL8SSOy-sh01fvwf6vRtYD0-47VkEcw324YmpKC48g4UedHNZ2Xb0bohH1t1NTVQP5blyINVaYJKs77p/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="204" data-original-width="337" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVYB_lvwj1a4P3pmxAAgX8XDq4Xhx7qErowYUED7LA1cH6bddvXgp4xu6ECxjjOL8SSOy-sh01fvwf6vRtYD0-47VkEcw324YmpKC48g4UedHNZ2Xb0bohH1t1NTVQP5blyINVaYJKs77p/w400-h243/image.png" width="400" /></a></div><br /><br /></div><br />Und die gesamte Dynamic Action hat noch eine Prüfung in der Datenbank, ob der Dialog angezeigt werden soll.</div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyToGc263VmOGrOdHed9boQGboJRzj-D8cGo68Dfm7cbCxeNHLWVvL9hO0qY6HL9jc-enCbuMfMY5VxuwfvUusJcPegNJK5tVPaEhNr1cwmecr8xypONuoSzTFzc0Krl8-jj-7j5_msaL7/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="85" data-original-width="311" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyToGc263VmOGrOdHed9boQGboJRzj-D8cGo68Dfm7cbCxeNHLWVvL9hO0qY6HL9jc-enCbuMfMY5VxuwfvUusJcPegNJK5tVPaEhNr1cwmecr8xypONuoSzTFzc0Krl8-jj-7j5_msaL7/" width="320" /></a></div><br /><br /></div>Nun wird nach einem Login unter gewissen Rollenbedingungen dieser modale Dialog angezeigt.<p></p><p><br /></p><p>Viel Spaß damit,</p><p>Holger</p><p><br /></p><p>Update einen Tag später nach einem Hinweis von einem Kollegen: eval ist bdeneklich wegen Sicherheitsbedenken und Malicious Code.</p><p>Die Lösung besser apex.navigation.redirect verwenden:</p><p>apex.navigation.redirect(apex.item('MY_ITEM').getValue());</p><p>Man lernt so viel als #orclapex APEX Rookie :-)</p><p> </p>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-15371081214981658172020-08-12T15:32:00.001+02:002020-08-12T15:32:41.381+02:00komische Zeichen in einem Bericht bei Reports 12c<p>Hallo,</p><p>mir ist wieder etwas Komisches passiert. Dabei habe ich nur einfache Änderungen an einem bestehenden Report eines Bestandskunden gemacht. Das Ergebnis war nicht gut und ist hier als Vorher und Nachher-Bild zu sehen.</p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU0YeWHN0Wba2DiwhuXELn2Ac-fxiFqPYpX5iVMp3cpQ_yvPx106pZxwfNhvk3jxuQFimgh7arkMlMRGvGKHR_jDjG1vFWJTzLBcz2gaxxEQHKnR3L4l-PRoiYFT3a2N4szjae70vvJExO/s119/MicrosoftTeams-image+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="28" data-original-width="119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU0YeWHN0Wba2DiwhuXELn2Ac-fxiFqPYpX5iVMp3cpQ_yvPx106pZxwfNhvk3jxuQFimgh7arkMlMRGvGKHR_jDjG1vFWJTzLBcz2gaxxEQHKnR3L4l-PRoiYFT3a2N4szjae70vvJExO/s0/MicrosoftTeams-image+%25281%2529.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gE0fEh0XK5gtLVtTPaQ0bKeupqtTG9YLV41FRLoy43YNAYKMTN9u-_lnG4-rkxV85CCUtnAYLbDo-uPoF2IjNAK-5b3j_zs3NpiQRDnwNtHJTIytKEjP86vJ6X1E6L6QeoUNvyrX5uri/s132/MicrosoftTeams-image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="27" data-original-width="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gE0fEh0XK5gtLVtTPaQ0bKeupqtTG9YLV41FRLoy43YNAYKMTN9u-_lnG4-rkxV85CCUtnAYLbDo-uPoF2IjNAK-5b3j_zs3NpiQRDnwNtHJTIytKEjP86vJ6X1E6L6QeoUNvyrX5uri/s0/MicrosoftTeams-image.png" /></a></div><p><br /></p><p>Die Rahmenbedingungen bei dem Setup sind:</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>Entwicklungsplattform ist Windows</li><li>Zielsystem ist Linux</li><li>Reports Version ist 12.2.1.2.0</li><li>Zeichensatz ist ein GERMAN_GERMANY.WE8MSWIN1252</li></ul><div>Noch etwas zum Schmunzeln: Wenn man diesen Report auf einem Windows-System aufruft, wird alles korrekt dargestellt.</div><div><br /></div><div>Öffnet man die PDF-Ausgabe von dem Bericht, sieht man, dass sich dort eine Schriftart Symbol eingenistet hat. Dabei soll die alleinige Schrift Times New Roman sein.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGzISH4WRWHUq2-qrLzb7NhL2gN6mGu1_wPlYm-etT8Xr5wjY-nO4R1q9oBeXsdglcRWlVY_fJewn6NgIPXwqO5Wr2xYao85QXY28RCBYc8EiBub9s07N-iw_oiz1RxK7Y22LXp7m2ssee/s497/MicrosoftTeams-image+%25282%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="399" data-original-width="497" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGzISH4WRWHUq2-qrLzb7NhL2gN6mGu1_wPlYm-etT8Xr5wjY-nO4R1q9oBeXsdglcRWlVY_fJewn6NgIPXwqO5Wr2xYao85QXY28RCBYc8EiBub9s07N-iw_oiz1RxK7Y22LXp7m2ssee/s0/MicrosoftTeams-image+%25282%2529.png" /></a></div><div><br /></div><div>Nach einer Suche im MyOracleSupport habe ich die passende Notiz dazu gefunden, DocID 300416.1: Symbol Characters ("Greek") Instead Of Expected Characters Are Displayed in Reports or Reports Parameter Form (Doc ID 300416.1). Grund dafür ist ein Bug: <a href="https://support.oracle.com/epmos/faces/BugDisplay?parent=DOCUMENT&sourceId=300416.1&id=2906401">Bug 2906401</a> FONT ALIASING NOT WORKING FOR ALL FIELDS WITH WE8ISO8859P15 CHARACTERSET</div><div><br /></div><div>Die empfohlenen Lösungen sind mit einer kompletten Umkonfiguration der Fonts in Reports verbunden.</div><div><br /></div><div>Das ging aus diversen Gründen im Moment bei dem Kunden nicht und wir haben eine andere Lösung gefunden.</div><div><br /></div><div>Die Reports werden in das Textformat konvertiert und in dem Text werden alle Textstellen mit charset =178 nach charset =31 geändert und das File wieder in das RDF-Format zurück konvertiert. Das hilft auch, ist aber natürlich im Prinzip bei jeder Anpassung nun zu tun.</div><div><br /></div><div>Vielleicht kann das ja hier nun jemand noch gebrauchen und sucht dann nicht so lange.</div><div><br /></div><div>Ciao</div><div>Holger</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><p></p>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0Gummersbach, Deutschland51.0266668 7.569283-6.0373390882682969 -62.737691649429323 90 77.87625764942932tag:blogger.com,1999:blog-1500582291514786380.post-43121894367255897312020-07-06T11:18:00.003+02:002020-07-06T11:51:10.347+02:00Suche nach Select * im FormsAPI MasterHeute morgen erhielt ich eine Anfrage vom Service Manager eins Projektes, welches wir in unserem Kontext in der Wartung haben. Themen sind Oracle Forms, Reports, APEX, SQL, PL/SQL und die Datenbank. Die konkrete Bitte lautete: Suche mal nach "SELECT *" in allen Forms- und Reports-Modulen.<div><br /></div><div>Das kann ja nicht so schwer sein dachte ich mir. Aber der FormsAPI Master als Analysetool behandelt das Zeichen * unter anderem als Wildcard. Also kam ich mit der einfachen Suche in dem Tool nicht ans Ziel.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOSnzJDTBboC0Z3FfRAtLcwUqB5xyLgV5KXUhKVdcarvfmtnGsj3NnN-_TtXtBNmBmZoBbi2_FNVhHp-2avsj5N2emDkLZRjqto-nGZqSaAMEKmURdCej95Blz1HseimjkKN8hVpQqSVs/s1453/Anmerkung+2020-07-06+110705.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="1453" height="79" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOSnzJDTBboC0Z3FfRAtLcwUqB5xyLgV5KXUhKVdcarvfmtnGsj3NnN-_TtXtBNmBmZoBbi2_FNVhHp-2avsj5N2emDkLZRjqto-nGZqSaAMEKmURdCej95Blz1HseimjkKN8hVpQqSVs/w624-h79/Anmerkung+2020-07-06+110705.png" width="624" /></a></div><div><br /></div><div>Auch die kurze Suche in den weiten Welten des WWW brachte mir keine Lösung hervor. Eine zielführende Idee ist die Suche mit einem regulären Ausdruck in der "PowerSearch".</div><div><br /></div><div>Der reguläre Ausdruck könnte dann so sein z.B.:</div><div>\s*select\s*[*]</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjxVscBdy5fUxkUPe8up_qCKxkeKcITIiiQCc04DQ_RVndvN17f7rAOG_xIM92-GFR24sMqYVPV3UyJkfhRN1O-Rn4dS1bOpYiuhIoLD_F32WGMaXMV22lZn2pqTgFCHnU-L0-6qmqgR-s/s1461/Anmerkundg+2020-07-06+110705.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="1461" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjxVscBdy5fUxkUPe8up_qCKxkeKcITIiiQCc04DQ_RVndvN17f7rAOG_xIM92-GFR24sMqYVPV3UyJkfhRN1O-Rn4dS1bOpYiuhIoLD_F32WGMaXMV22lZn2pqTgFCHnU-L0-6qmqgR-s/w624-h88/Anmerkundg+2020-07-06+110705.png" width="624" /></a></div><div><br /></div><div><br /></div><div>Hier z.B. ein Treffer im Datenmodell eines Reports.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ysVXJzKMZX5BTSPSaR9-2NpZvymdb4ArDxuCYCk-ho8_ySSO76boRbj4jVGiIGOyWRLQW7yy40ulLUBKTkr-WE8Ey2VTl2oGl5YyWkBbCGyXhcxwlFCjdWYr3dzzegYKfxo5af9jHAhW/s851/Anmerkcundg+2020-07-06+110705.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="111" data-original-width="851" height="83" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ysVXJzKMZX5BTSPSaR9-2NpZvymdb4ArDxuCYCk-ho8_ySSO76boRbj4jVGiIGOyWRLQW7yy40ulLUBKTkr-WE8Ey2VTl2oGl5YyWkBbCGyXhcxwlFCjdWYr3dzzegYKfxo5af9jHAhW/w624-h83/Anmerkcundg+2020-07-06+110705.png" width="624" /></a></div><div><br /></div><div>Test bestanden im FormsAPI Master. Hier lassen sich also mächtige Suchen im Quellcode von ganzen Anwendungen absetzen. Wen die Treffermenge noch interessiert: 262 Suchergebnisse gefunden in 481 Source-Objekten. Also knapp bei der Hälfte sind im Datenmodell von Reports, PL/SQL-Code von Objekten solche Suchkriterien gefunden worden.</div><div><br /></div><div>Happy Searching.</div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-81541415337011018382020-06-18T13:16:00.000+02:002020-06-18T13:16:21.663+02:00Forms-Applikation via Webstart bzw. JNLP im Microsoft Edge Browser direkt startenHeute habe ich eine sehr interessante Frage im Oracle-Forms Forum gesehen. Jemand wollte seine Forms-Applikation im Microsoft Edge-Browser direkt aufrufen.<div><br /></div><div>Bisher dachte ich, so nicht möglich, weil das eigentlich nicht gehen sollte. Applets werden von den neueren Browsern sowieso geblockt. Der Ersteller wollte die Applikation auch nicht per FSAL starten, sondern Webstart und JNLP verwenden.</div><div><br /></div><div>Mit Webstart und HTTP-Protokoll geht das nur mit einem Zwischenschritt, indem mal das JNLP-File auf dem Client abspeichern und dann per Doppelklick starten kann.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzyQIv13ulTcBN1IZ8qAlu_mdvH-4nf2HZfFDXx02YFU594Nl32SdXCV5hBtNpwJ5enOBOlxik7otyJaC8QplEEmJ6rsgB2TybY_i5pBRdnF0P0ZLm4G6GTNUBDGhyphenhyphen6L-UTrMb5VYPoC-v/s433/Unbenannt0.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="48" data-original-width="433" height="44" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzyQIv13ulTcBN1IZ8qAlu_mdvH-4nf2HZfFDXx02YFU594Nl32SdXCV5hBtNpwJ5enOBOlxik7otyJaC8QplEEmJ6rsgB2TybY_i5pBRdnF0P0ZLm4G6GTNUBDGhyphenhyphen6L-UTrMb5VYPoC-v/w400-h44/Unbenannt0.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8y0MYH1QXqThcsuSeP3zAe-bEWHJYnNqyjoVUSUQrMgbprR8Xze3ixP3hMX399Ji7MWDZOliHRh78S7K1m4iRVUIMOZQQBhNmO8S-iHELLcZ-lttNSh3IHp4-JE1inSHo_pqWFh9Ne-j3/s247/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="247" height="118" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8y0MYH1QXqThcsuSeP3zAe-bEWHJYnNqyjoVUSUQrMgbprR8Xze3ixP3hMX399Ji7MWDZOliHRh78S7K1m4iRVUIMOZQQBhNmO8S-iHELLcZ-lttNSh3IHp4-JE1inSHo_pqWFh9Ne-j3/w308-h118/Unbenannt.PNG" width="308" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCqbWMdQk4VPAKqBvSjGuPNbDXaf7Eiv7j0gd74r4PSuvZvVE97w1flIjd6qhm0vxzqIz4XubCaJSXYUM7nC396BgRh2DaKN690xW-Z3Y3D_uBNn_3yZD87_Y-JGi8yalS-xxFEcPVjEEh/s162/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="162" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCqbWMdQk4VPAKqBvSjGuPNbDXaf7Eiv7j0gd74r4PSuvZvVE97w1flIjd6qhm0vxzqIz4XubCaJSXYUM7nC396BgRh2DaKN690xW-Z3Y3D_uBNn_3yZD87_Y-JGi8yalS-xxFEcPVjEEh/w203-h133/Unbenannt.PNG" width="203" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYxFgLpi6a1d4PV9v6GOvkyFqEvvCKzddr1EtgEuFSmpmZkKlOqeFp8-9mj4ObLCg43Yq9_ySXXP7flBHyqekTXkown-CPVD-Sv0sh6wmUp2kqmlWa9WAbsCJVmD6OdUo-I7c7JzQ1X4vl/s754/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="475" data-original-width="754" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYxFgLpi6a1d4PV9v6GOvkyFqEvvCKzddr1EtgEuFSmpmZkKlOqeFp8-9mj4ObLCg43Yq9_ySXXP7flBHyqekTXkown-CPVD-Sv0sh6wmUp2kqmlWa9WAbsCJVmD6OdUo-I7c7JzQ1X4vl/w400-h253/Unbenannt.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Ein Schritt zuviel dachte der Anwender zu Recht. Die Lösung fand derjenige selbst, indem man einfach das Aufrufprotokoll im Browser ändert. Von HTTP zu JNLP und nach einem Klick auf Öffnen wird die Applikation direkt gestartet. Es kann aber gut sein, dass dann auf dem Client die Dateiendung JNLP mit dem Programm Java Web Launcher verknüpft sein muss.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBxjpEX2f5YldK8D01NCAs4a7TakLuR1auuD8HOQd4NE715ZqcZ1mSppLsKdTEqf4fGqfnYqRQjEQ7fPUVR2doHxVIYjfYyb1sWrKx4KVpmsC3UTclsfyE0okl7oFGRaNlbgmbhyC7YA1/s458/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="47" data-original-width="458" height="41" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBxjpEX2f5YldK8D01NCAs4a7TakLuR1auuD8HOQd4NE715ZqcZ1mSppLsKdTEqf4fGqfnYqRQjEQ7fPUVR2doHxVIYjfYyb1sWrKx4KVpmsC3UTclsfyE0okl7oFGRaNlbgmbhyC7YA1/w400-h41/Unbenannt.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsbPB-EJ7n9zRRwQiplYiPBMl2eRT3YnECXIhr3zU8UgPvNz65XVX27l-jLFBrNcoYeLjsX0MD0EgqYKfk3rtwIphjrSg1C93dGIL77FxMk1-NxI4SMvbLaHnGdOgt6YEQqE3YgE7Ffq9N/s496/Unbenannt0.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="178" data-original-width="496" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsbPB-EJ7n9zRRwQiplYiPBMl2eRT3YnECXIhr3zU8UgPvNz65XVX27l-jLFBrNcoYeLjsX0MD0EgqYKfk3rtwIphjrSg1C93dGIL77FxMk1-NxI4SMvbLaHnGdOgt6YEQqE3YgE7Ffq9N/w400-h143/Unbenannt0.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_0qatKj_-nYk8bB74XU9vpVec0Z6C-a49dKOl4YalPqeoFN3U257dqeXgQcctva4X16AETUJz5F0w4JQOiYdIkP-72ePoP4Hn_8fsf2-i79IHGBg8WCBf1OzsPIhzuJ2NKeavQAtrGwlN/s759/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="421" data-original-width="759" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_0qatKj_-nYk8bB74XU9vpVec0Z6C-a49dKOl4YalPqeoFN3U257dqeXgQcctva4X16AETUJz5F0w4JQOiYdIkP-72ePoP4Hn_8fsf2-i79IHGBg8WCBf1OzsPIhzuJ2NKeavQAtrGwlN/w400-h221/Unbenannt.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Ich nehme stark an, dass das mit neueren JDK Versionen nicht mehr funktionieren wird. Bereits in JDK 11 ist Java Web Start nicht mehr enthalten. Also sicher ein Wechsel zu FSAL nötig. Das wird meiner Meinung nach auch die bislang einzige supportete Aufrufmöglichkeit werden.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Das Verfahren mit JNLP als Protokoll im Aufruf klappt übrigens auch in Google Chrome und Internet Explorer.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Cheers</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div><br /></div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-23390141625235843692020-06-08T12:45:00.002+02:002020-08-12T15:36:54.731+02:00Abhängigkeiten von Objekten ermitteln in der Oracle Datenbank (Dependency analysis)<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DfCF3YJ4kM6vwVLG8HnWIqzhoKQkop3eKDzx4ay41R5MiRNVd82I7ei5vrj-kY4fZsKk7u52hW3kq4VScO-6qPjfAWqcOiiYMH_wl1A5GNTauohpCkrX63WbwSdO93_o04R3hrPOvW0G/s1500/stock-photo-hand-writing-dependency-with-marker-concept-background-676194433.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1101" data-original-width="1500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DfCF3YJ4kM6vwVLG8HnWIqzhoKQkop3eKDzx4ay41R5MiRNVd82I7ei5vrj-kY4fZsKk7u52hW3kq4VScO-6qPjfAWqcOiiYMH_wl1A5GNTauohpCkrX63WbwSdO93_o04R3hrPOvW0G/s320/stock-photo-hand-writing-dependency-with-marker-concept-background-676194433.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Quelle: <a href="https://www.shutterstock.com/de/image-photo/hand-writing-dependency-marker-concept-background-676194433">https://www.shutterstock.com/de/image-photo/hand-writing-dependency-marker-concept-background-676194433</a></td></tr></tbody></table><div><br /></div>Abhängigkeiten von Objekten ermitteln in der Oracle Datenbank ist der Arbeitstitel meines neuesten Eintrages hier. Dazu stehen mit nur die Boardmittel in der Datenbank zur Verfügung und keine externen Tools. Allein die Boardmittel gestatten es, auf mindestens 2 Wegen an diese Informationen zu gelangen.<div><br /></div><div>Eines dieser Mittel ist PL/Scope; ein eher unbekanntes Feature der Oracle-Datenbank, welches ab der Version 11.1.0.7 standardmäßig dabei ist. Mit dem Befehl ALTER SESSION SET PLSCOPE_SETTINGS='IDENTIFIERS:ALL'; bzw. ab 12.2. ALTER SESSION SET PLSCOPE_SETTINGS='IDENTIFIERS:ALL,STATEMENTS:ALL'; wird die Datensammlung von PL/Scope aktiviert. Nach der Aktivierung in der Session wird bei jeder Kompilierung von Sourcecode die Abhängigkeitsanalyse durchgeführt. Die Ergebnisse können über verschiedene Data-Dictionary Views ausgelesen werden. PL/Scope habe ich selbst bei meiner Analyse nicht verwendet.</div><div><br /></div><div>Die Ausgangsfrage des Kunden war: welche Objekte aus Schema 1 werden in Schema 2 oder 3 verwendet? Es gibt aber nicht nur direkte, sondern auch indirekte Abhängigkeiten im Programmcode zu finden. Und wir bewegen uns nicht auf Column-Ebene, sondern Objekt-Ebene.</div><div><br /></div><div><h4 style="text-align: left;">1. Fall: die direkte Abhängigkeit</h4><pre style="text-align: left;">BEGIN<br /> FOR rec IN ( SELECT DISTINCT owner, name, type, referenced_owner, referenced_name, referenced_type<br /> , referenced_link_name, dependency_type<br /> FROM all_dependencies o<br /> WHERE o.referenced_owner = '&v_schema'<br /> AND owner != referenced_owner<br /> ORDER BY o.TYPE, name)<br /> LOOP<br /> DBMS_OUTPUT.put_line ('Object: ' || rec.owner || '.' || rec.name || ', Typ: ' || rec.type || ' <> Quell-Object: ' || rec.referenced_owner || '.' || rec.referenced_name || ', Typ: ' || rec.referenced_type);<br /> END LOOP;<br />END;<br />/</pre></div><div>Das Suchschema bzw. Quellschema wird über die Variable v_schema abgefragt und es werden keine Referenzen aus dem eigenen Schema berücksichtigt.<br /><ol style="text-align: left;"><br /></ol><h4 style="text-align: left;">2. Fall: die indirekte Abhängigkeit</h4></div><div>Nicht ganz so einfach ist es, wenn die Abhängigkeiten "versteckt" sind. Gegeben ist das Quellschema 1, das viele Kopien wie ein Schema 2,3, oder 4 hat. Gesucht sind nun die Stellen im Zielschema, bei denen im Programmcode steht: Quellschema(1, 2, 3, 4).Quellobjekt, also z.B. TESTSCHEMA1.OBJEKT1, TESTSCHEMA2.OBJEKT2. <br /><br /></div><div>Das Quellschema hat immer das gleiche Namenssuffix, z.B. TESTSCHEMA, daher gebe ich das auch fest im Suchstring an. Aber der numerische Anteil vom Owner TESTSCHEMA(1, 2, 3, 4) wird im Programmcode über eine Funktion dynamisch ermittelt. Dafür verwende ich dann das folgende SQL-Statement.</div><div><br /></div><div><pre> FOR rec1 IN (SELECT table_name<br /> FROM all_tables o<br /> WHERE o.owner = '&v_schema'<br /> )<br /> LOOP<br /> FOR rec IN (SELECT rec.owner, rec.name, rec.TYPE, TRIM (rec.TEXT) TEXT<br /> FROM all_source rec<br /> WHERE owner IN ('ZIELSCHEMA1', 'ZIELSCHEMA2')<br /> AND UPPER (text) LIKE '%TESTSCHEMA%.' || rec1.table_name || '%'<br /> )<br /> LOOP<br /> DBMS_OUTPUT.put_line ('Object: ' || rec.owner || '.' || rec.name || ', Typ: ' || rec.TYPE || ', Source: ' || rec.TEXT);<br /> END LOOP;<br /> END LOOP;<br />END;<br />/</pre></div><div>Das dynamische SQL im Programmcode ist dann z.B. SELECT Spalte1 FROM 'TESTSCHEMA' || get_user_id() || '.OBJEKT1'. Den ganzen Suchvorgang kann man dann auch auf Views, Procedures, Functions und Packages erweitern, indem man statt all_tables aus dem Dictionary all_objects verwendet.</div><div><br /></div><div>Der 2. Fall ist sehr wichtig für den Kunden, weil er nicht genau weiß, welche genauen Objekte aus dem TESTSCHEMA 1-x im Zielschema verwendet werden, daher kann nicht mit dem Operator IN auf ein paar wenige bekannte Objektnamen abgefragt werden.</div><div><br /></div><div>Ich gebe zu, der hier beschriebene Fall ist speziell und sicher nicht alltäglich. Viel öfter kommen die Fragen: wird das Objekt X irgendwo verwendet oder in welchen DML-Statements taucht Objekt X auf? Aber vielleicht ist das Verfahren ja als Schablone für jemanden zu gebrauchen.</div><div><br /></div>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-73443679179883506862019-12-23T13:00:00.000+01:002019-12-23T13:06:27.630+01:00APEX ADMIN Passwort zurücksetzenDies ist mein erster Post mit dem neuen Thema Oracle APEX. Ich habe in meiner Oracle Datenbank in Docker die APEX Version auf 19.2 migriert und konnte mich danach nicht mehr bei APEX anmelden, da ich das Admin Passwort nicht mehr wusste. Der Vorgang funktioniert wohl auch, wenn der ADMIN User gelockt ist.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOLXzUH42MNnUJI1whSIdVnPQ-iBUkRfzDvyl-STf48_Xwk1A7DiEg2niyPNPjZQIuW4u5QwA-XnGMikbgiPN3671Jn81gtpnAuED7ede5jEraYoXrn_WJMKnSwl84cu4BK1ET4mDzxPIt/s1600/Anmerkung+2019-12-23+123941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="543" data-original-width="874" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOLXzUH42MNnUJI1whSIdVnPQ-iBUkRfzDvyl-STf48_Xwk1A7DiEg2niyPNPjZQIuW4u5QwA-XnGMikbgiPN3671Jn81gtpnAuED7ede5jEraYoXrn_WJMKnSwl84cu4BK1ET4mDzxPIt/s400/Anmerkung+2019-12-23+123941.png" width="400" /></a></div>
<br />
Aber ich habe mindestens einen Beitrag gefunden, wie man wieder ein Reset machen kann. Ob der Weg auch supported ist, ist mir dann aber nicht bekannt.<br />
<br />
Was muss ich also genau tun? Auf jeden Fall ein paar Befehle mit einen SYS-User ausführen mit SQL und PL/SQL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuq_Zvhq8ndptewm3GDdbPq87iViMBnkWbB5N1vaW55yogKch7Ln2nMBKUGPmOSvcaAOMCQNNmCgQigf582lKRcaJJBJqr3bLiF3HQ4DzERvTJ6BxT6uGjH_NMp9wE34H8n4J8D5VFoy-n/s1600/Anmerkung+2019-12-23+123941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="79" data-original-width="382" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuq_Zvhq8ndptewm3GDdbPq87iViMBnkWbB5N1vaW55yogKch7Ln2nMBKUGPmOSvcaAOMCQNNmCgQigf582lKRcaJJBJqr3bLiF3HQ4DzERvTJ6BxT6uGjH_NMp9wE34H8n4J8D5VFoy-n/s400/Anmerkung+2019-12-23+123941.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP0pSX5qEQi3Vbhi1VQGkAcN_nlJKTGFhus4DWJ1RcULikG2uOfN3bQYYYcLprrKx8W9OG5prrjtn86QXXyUMG4lOzw5LVZYlJSepjnJ7IH-Fs0KYrxQrGKkfyJCy42NB285tF8jplXdKf/s1600/Anmerkung+2019-12-23+123941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="55" data-original-width="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP0pSX5qEQi3Vbhi1VQGkAcN_nlJKTGFhus4DWJ1RcULikG2uOfN3bQYYYcLprrKx8W9OG5prrjtn86QXXyUMG4lOzw5LVZYlJSepjnJ7IH-Fs0KYrxQrGKkfyJCy42NB285tF8jplXdKf/s1600/Anmerkung+2019-12-23+123941.png" /></a></div>
<br />
<br />
Nun das Passwort ändern:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwHtepzM_YOjzdMFxBuqB4U7oakJkglGWIwOQyf6NC15DyrZOAxnAKnuo43fhuwF_j7bCSTocOljDRcEMb8-wz0eECZlBXNH_e07EnFXiue31boTu4d_KNkUZBpgNBKsD4_nPHfvI1GgSj/s1600/Anmerkung+2019-12-23+123941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="357" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwHtepzM_YOjzdMFxBuqB4U7oakJkglGWIwOQyf6NC15DyrZOAxnAKnuo43fhuwF_j7bCSTocOljDRcEMb8-wz0eECZlBXNH_e07EnFXiue31boTu4d_KNkUZBpgNBKsD4_nPHfvI1GgSj/s400/Anmerkung+2019-12-23+123941.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjTNaowvA9bystIuEaqVP99FYT74bE1cmoq-t_kCxiZMsdA8_uy6wvjD9qeW0Y-qhyphenhyphenfb67SLQ00tpmexcaDb2zFOeeZNlAsIxq9YN_kH-YLhY0Bb9r9SUAJgcisV9GFIxxFER3DaCvh4Cy/s1600/Anmerkung+2019-12-23+123941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="500" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjTNaowvA9bystIuEaqVP99FYT74bE1cmoq-t_kCxiZMsdA8_uy6wvjD9qeW0Y-qhyphenhyphenfb67SLQ00tpmexcaDb2zFOeeZNlAsIxq9YN_kH-YLhY0Bb9r9SUAJgcisV9GFIxxFER3DaCvh4Cy/s400/Anmerkung+2019-12-23+123941.png" width="400" /></a></div>
<br />
Eine andere Möglichkeit ist es noch, als SYS-User das File @apxchpwd.sql<br />
auszuführen.<br />
<br />
<br />
Nun aber angenehme und erholsame Feiertage und einen guten Rutsch.<br />
<br />
<br />
Viele Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-16758308385997424602019-12-13T10:41:00.000+01:002019-12-16T09:18:51.654+01:00Oracle Forms 12c in der Cloud provisionierenLange ist mein letzter Blog Post her und kurz vor Weihnachten muss noch etwas Neues her dachte ich mir. Vor 1 Woche war ich bei Oracle in der Geschäftsstelle München zu Besuch für einen 2-tägigen Workshop Oracle Cloud Native. Da haben wir verschiedene Cloud Services kennen gelernt und in Hands On Labs für verschiedene Demos benutzt. Dabei gab es als Goodie auch einen 30 tägigen Oracle Cloud Demo Account mit einiges Credits oben drauf.<br />
<br />
Darauf habe ich schon länger gewartet, weil ich doch Oracle Forms 12c in der Cloud mal ausprobieren wollte. In der Theorie lautet die Ansage: in 15 Minuten ist alles lauffähig. Ich kann getrost sagen, das ist wahr. Es hat zwar mehrere Versuche gebraucht, aber dann war der Erfolg da.<br />
<br />
Wie man das in einem Basic Setup hin bekommt, möchte ich heute demonstrieren. Los geht es mit einem Oracle Cloud Marketplace Image für Forms, welches man <a href="https://cloudmarketplace.oracle.com/marketplace/en_US/adf.task-flow?adf.tfId=adhtf&adf.tfDoc=/WEB-INF/taskflow/adhtf.xml&application_id=57750508" target="_blank">hier </a>bekommt.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihCeliSW3IJakL8j43DxJsghMnWYTXw3-72BsrfqEr4fot0P0niJhMdAW9cxTk7_H3Mmpgu831T6ZwMSyaUDiEmjGpdiy7x4vDVVgc0AXfw-F3EofRc6ZePa9Y6I62isQeq7ibGMXq8VwJ/s1600/Anmerkung+2019-12-13+093930.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="654" data-original-width="1204" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihCeliSW3IJakL8j43DxJsghMnWYTXw3-72BsrfqEr4fot0P0niJhMdAW9cxTk7_H3Mmpgu831T6ZwMSyaUDiEmjGpdiy7x4vDVVgc0AXfw-F3EofRc6ZePa9Y6I62isQeq7ibGMXq8VwJ/s640/Anmerkung+2019-12-13+093930.png" width="640" /></a></div>
Mittels Button "Get App" wird mal zur Auswahl einer Region weitergeleitet. In meinem Fall wird dies die Region Frankfurt.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglI7T335rWoPn_lboRhzYXemqzEhjmfi33He4UEOvRXsod_DUhRGvUpJRxYRbQBg42CB-OXdWftk5_nyWujSApYkLBjrjlOKMGEBcKuIrP-afO0Bet_YvNy0zmbLUQIKJgNHDft2fPwdxX/s1600/Anmerkung+2019-12-13+093931.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="682" data-original-width="1271" height="342" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglI7T335rWoPn_lboRhzYXemqzEhjmfi33He4UEOvRXsod_DUhRGvUpJRxYRbQBg42CB-OXdWftk5_nyWujSApYkLBjrjlOKMGEBcKuIrP-afO0Bet_YvNy0zmbLUQIKJgNHDft2fPwdxX/s640/Anmerkung+2019-12-13+093931.png" width="640" /></a></div>
<br />
Nach erfolgreichem "Sign In" lande ich in der Cloud Console und mache weitere Angaben zum Sizing, Netzwerk Konfiguration, Compartment und anderen Dingen.<br />
Achtung: für das Image gilt: <span style="background-color: white; color: #222222; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">Bring Your Own License</span><br />
<span style="background-color: white; color: #222222; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEJEDCoK-5gtunQ0M5fkSXCS7IA13HENIkNhUMIlqA68S8_PyaBOJdYynIxQ4M9ZdeIhVIe1G_S61HZAZ53ETJoSkNdJ7taArSNv7-Q9T5vTxL_2k1HJlQcWAkxjKHSl99ANkfR-O-sctb/s1600/Anmerkung+2019-12-13+093932.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="671" data-original-width="1600" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEJEDCoK-5gtunQ0M5fkSXCS7IA13HENIkNhUMIlqA68S8_PyaBOJdYynIxQ4M9ZdeIhVIe1G_S61HZAZ53ETJoSkNdJ7taArSNv7-Q9T5vTxL_2k1HJlQcWAkxjKHSl99ANkfR-O-sctb/s640/Anmerkung+2019-12-13+093932.png" width="640" /></a></div>
<span style="background-color: white; color: #222222; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
Mit "Launch Instance" geht es in die Detail Konfiguration. Für den Connect zu der neuen Instanz brauchen wir einen Public SSH Key.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7thOaZw-fr5SpVzhLuUEZooEs4XyL2w_U3jPOD5NkHxjZ-zaqFB3G2p_5oqDoBapNbgmKT4rhBiENcoV7lv5F_bkW2vf0_693mSQshdvFQaKFZ9AS_0NpK07-SdEVD8LPe-vvvoJpjM5T/s1600/Anmerkung+2019-12-13+093933.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="547" data-original-width="1345" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7thOaZw-fr5SpVzhLuUEZooEs4XyL2w_U3jPOD5NkHxjZ-zaqFB3G2p_5oqDoBapNbgmKT4rhBiENcoV7lv5F_bkW2vf0_693mSQshdvFQaKFZ9AS_0NpK07-SdEVD8LPe-vvvoJpjM5T/s640/Anmerkung+2019-12-13+093933.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ3uknCLwQhrhw8HW0ICp5oNMoCgfnwuA9lNkGBAlLtnUWg_aEkmALLlK2DxWkXsq2owoJTxet2BriU_aWYMPmwzbgBeVwq8fKhLJ5QT94JrnvmqHapd7tu4vQ1bHYKmO_AfpJ681cjJew/s1600/Anmerkung+2019-12-13+093934.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="283" data-original-width="1322" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ3uknCLwQhrhw8HW0ICp5oNMoCgfnwuA9lNkGBAlLtnUWg_aEkmALLlK2DxWkXsq2owoJTxet2BriU_aWYMPmwzbgBeVwq8fKhLJ5QT94JrnvmqHapd7tu4vQ1bHYKmO_AfpJ681cjJew/s640/Anmerkung+2019-12-13+093934.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmdj0yHrvq9kfqgWeBACLj2sxARXKDX8hqrlFIjOCLIuo8WnWlVUUjNJkK1PCktN3lS8EM2n1TA66oFtJ6p1XOVozSUfRstDx-WS8nP_maMxLyReUFDdZCB4ta_5u141FzjpJxCPWCjBd/s1600/Anmerkung+2019-12-13+093935.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="1267" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmdj0yHrvq9kfqgWeBACLj2sxARXKDX8hqrlFIjOCLIuo8WnWlVUUjNJkK1PCktN3lS8EM2n1TA66oFtJ6p1XOVozSUfRstDx-WS8nP_maMxLyReUFDdZCB4ta_5u141FzjpJxCPWCjBd/s640/Anmerkung+2019-12-13+093935.png" width="640" /></a></div>
<br />
Mit einem Klick auf "Create" am Ende der Seite wird die Instanz nun erzeugt.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaPKTWVK6LBNpViTS7uCKSXLwthORU0EO_wkNkyTXhqj6aetaJ08e-cVfsb2_7dWWmX2ME6SWaSiqXzqPPevkL39Pou7YR18UQoaFmliHdq_zr_KRYAHRPfU-vwxz6l0hm5-x8-i4TFz-/s1600/Anmerkung+2019-12-13+093936.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="435" data-original-width="1526" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaPKTWVK6LBNpViTS7uCKSXLwthORU0EO_wkNkyTXhqj6aetaJ08e-cVfsb2_7dWWmX2ME6SWaSiqXzqPPevkL39Pou7YR18UQoaFmliHdq_zr_KRYAHRPfU-vwxz6l0hm5-x8-i4TFz-/s640/Anmerkung+2019-12-13+093936.png" width="640" /></a></div>
<br />
Nachdem die Instanz erstellt wurde, geht es mit der Konfiguration der Weblogic Domäne weiter. Dazu muss man sich mit der Instanz verbinden:<br />
<br />
ssh -i ..\workshop_key_private.ssh opc@public_ip_der_instanz<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivngH8nMGNv8B3M5Snag-VSbRUxc0uB60ET0LMnCb0BUaAKAeXSU5Nj_xeNEbIGRfffEnKmtoHFM6q3vPgWfNbczq0nlQ9eEEQMXZBGV3NPuc7WDch_2uhJFqLj8LUh8wEXI9E2AzyyNQL/s1600/Anmerkung+2019-12-13+093937.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="613" data-original-width="550" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivngH8nMGNv8B3M5Snag-VSbRUxc0uB60ET0LMnCb0BUaAKAeXSU5Nj_xeNEbIGRfffEnKmtoHFM6q3vPgWfNbczq0nlQ9eEEQMXZBGV3NPuc7WDch_2uhJFqLj8LUh8wEXI9E2AzyyNQL/s400/Anmerkung+2019-12-13+093937.png" width="356" /></a></div>
<br />
Wichtig: bei den folgenden Passwörtern hat die Eingabe mit Sonderzeichen nicht funktioniert, sondern nur eine Kombination aus Zahlen und Buchstaben.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9olLkX2xoCyZMnQRf0QXpNasXFLaymA1NMr2bXB4tOL4rqaCBHfL0NNwwK2t8b3uLqKBjerzZwhJWQCgz4mr-7t-9E-csMJzkn1Ytdf1Bf0dImPaK8Kzq5iEquErXbvtyPUQZKUiMP4LT/s1600/Anmerkung+2019-12-13+093938.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="379" data-original-width="550" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9olLkX2xoCyZMnQRf0QXpNasXFLaymA1NMr2bXB4tOL4rqaCBHfL0NNwwK2t8b3uLqKBjerzZwhJWQCgz4mr-7t-9E-csMJzkn1Ytdf1Bf0dImPaK8Kzq5iEquErXbvtyPUQZKUiMP4LT/s400/Anmerkung+2019-12-13+093938.png" width="400" /></a></div>
<br />
Danach wird die Forms Weblogic Domäne konfiguriert und erstellt, was bis zu 15 Minuten dauern kann. Reports ist nicht vorkonfiguriert. Dafür muss man dann die Weblogic Domäne erweitern und danach alles entsprechend konfigurieren.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGc24-EWMIgfwdkbTs3WL5Ky7imEUPTmgnwBSvGOT0dt_SUv_snrl8n_xwWwTCOUryzFfm_ZSEnGIDGSbdwPz80HPHNhok7Kc2wohYfpGogLOf2EoB5_S2LoElX7WKoQi9FD_mn77qOSN5/s1600/Anmerkung+2019-12-13+093939.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="892" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGc24-EWMIgfwdkbTs3WL5Ky7imEUPTmgnwBSvGOT0dt_SUv_snrl8n_xwWwTCOUryzFfm_ZSEnGIDGSbdwPz80HPHNhok7Kc2wohYfpGogLOf2EoB5_S2LoElX7WKoQi9FD_mn77qOSN5/s640/Anmerkung+2019-12-13+093939.png" width="640" /></a></div>
<br />
Nach weniger als 10 Minuten in meinem Fall ist die Provisionierung fertig und als nächstes verbinde ich mich mit Putty zu der Instanz und starte dort den VNC-Server (<span style="background-color: white; color: #4b4d4f; font-family: "helvetica neue light" , "helvetica neue" , "roboto" , "segoe ui" ,; font-size: 16px;">MyOracleSupport </span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=2456478.1" rel="nofollow" style="background-color: white; box-sizing: border-box; color: #428bca; font-family: "Helvetica Neue Light", "Helvetica Neue", Roboto, "Segoe UI", sans-serif-regular; font-size: 16px; outline: none !important; text-decoration-line: none;" target="_blank">Note 2456478.1</a><span style="color: #4b4d4f; font-family: "helvetica neue light" , "helvetica neue" , "roboto" , "segoe ui" ,;"><span style="background-color: white;">)</span></span>.<br />
<br />
Vom Client starte ich den VNC-Viewer und komme auf das Linux der Instanz.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggxm3WlnduKMLzV8iQuKOiKyXK2E0Xi5LjoBSs3i_OTC_tXtBd9EtWMlDT0PXLF-qQxY-nD_zlkVctr-orI2kEgDG_V1aJyiLAhZNUTaCtcvUWXBulEDEf-b6vzjYUEA2tmDGpmreNU3QG/s1600/Anmerkung+2019-12-13+093940.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="651" data-original-width="1028" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggxm3WlnduKMLzV8iQuKOiKyXK2E0Xi5LjoBSs3i_OTC_tXtBd9EtWMlDT0PXLF-qQxY-nD_zlkVctr-orI2kEgDG_V1aJyiLAhZNUTaCtcvUWXBulEDEf-b6vzjYUEA2tmDGpmreNU3QG/s640/Anmerkung+2019-12-13+093940.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHmw36ZImBlZmEQ89k39DXQmGkRgGMOSCQVQLL4fvat95pHvBlDvq3CClu9_GfQ4fIAqpU7QsAaod9JhSb8GCnM4-m8RGhhGW0T7CuCcuP3GfNq23KC3Qa3b1-Q2d6Nps4sFiWSoqKVPrw/s1600/Anmerkung+2019-12-13+093941.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="507" data-original-width="951" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHmw36ZImBlZmEQ89k39DXQmGkRgGMOSCQVQLL4fvat95pHvBlDvq3CClu9_GfQ4fIAqpU7QsAaod9JhSb8GCnM4-m8RGhhGW0T7CuCcuP3GfNq23KC3Qa3b1-Q2d6Nps4sFiWSoqKVPrw/s1600/Anmerkung+2019-12-13+093941.png" /></a></div>
<br />
Vom Client Browser kann ich nun die Forms Test-Seite aufrufen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YnaBzw1bwEsHlpylwfPGwgMnqKLArRMwc2Q4X8IXScyyogQtPnAvpf5655uoVdHssr1lzXHANe_xNm6cYxOgoXd1rI6xxFLg51Pb73SnbybghNVngqd4UXWFb0RSRTqgMrCLTvZCzwbx/s1600/Anmerkung+2019-12-13+093942.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="577" data-original-width="943" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YnaBzw1bwEsHlpylwfPGwgMnqKLArRMwc2Q4X8IXScyyogQtPnAvpf5655uoVdHssr1lzXHANe_xNm6cYxOgoXd1rI6xxFLg51Pb73SnbybghNVngqd4UXWFb0RSRTqgMrCLTvZCzwbx/s1600/Anmerkung+2019-12-13+093942.png" /></a></div>
Vom VNC Desktop oder dem lokalen Client kann ich den FSAL aufrufen. Erstmal FSAL lokal herunterladen mit http://localhost:9001/forms/html/fsal.htm<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8_XHnqbSkiDGODXNVjcx64oknkMVueWweehKqo_OGZ40xcL_BPfLUXrOaIvAd3AwtiwF4S63APhyOhZ6mFSpWb7V59GuMnjj5JTrWhcQJ8t2oxCPh4jQdWnhEUCf7PA8SHp86LHzSMNNZ/s1600/Anmerkung+2019-12-13+093943.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="825" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8_XHnqbSkiDGODXNVjcx64oknkMVueWweehKqo_OGZ40xcL_BPfLUXrOaIvAd3AwtiwF4S63APhyOhZ6mFSpWb7V59GuMnjj5JTrWhcQJ8t2oxCPh4jQdWnhEUCf7PA8SHp86LHzSMNNZ/s640/Anmerkung+2019-12-13+093943.png" width="640" /></a></div>
<br />
Von der Konsole dann starten: java -jar frmsal.jar -url "http://localhost:9001/forms/frmservlet?config=standaloneapp" -t 10000 -showConfig true<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEjlhjMt6vfF0BesPWWD8tKc8XNPSLqAhYrhwDgBTFuxdywkWaY1ZAhxUyoN1KHTD4832w1wmb1uDhUYFCeorLE12d6feSYdTL5qZZlnd5WVKEmbzt3B0wKIznqcEzFl18PvZwYTcJ9pX/s1600/Anmerkung+2019-12-13+093944.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="688" data-original-width="1207" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEjlhjMt6vfF0BesPWWD8tKc8XNPSLqAhYrhwDgBTFuxdywkWaY1ZAhxUyoN1KHTD4832w1wmb1uDhUYFCeorLE12d6feSYdTL5qZZlnd5WVKEmbzt3B0wKIznqcEzFl18PvZwYTcJ9pX/s640/Anmerkung+2019-12-13+093944.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6EGUuhcrDlF8HpkexZj7CObJDq7d9jzk7rBTqWV-mxbndGFYYtnMdlUkmVHkVTTTPRMHQSFnAuzZH1KsaG14NS8fSuPBfaBrHb0Kb1MsaU2onxZHjmzOskqVig2_sBtK-GJsm0GvD6V3Y/s1600/Anmerkung+2019-12-13+093945.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="830" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6EGUuhcrDlF8HpkexZj7CObJDq7d9jzk7rBTqWV-mxbndGFYYtnMdlUkmVHkVTTTPRMHQSFnAuzZH1KsaG14NS8fSuPBfaBrHb0Kb1MsaU2onxZHjmzOskqVig2_sBtK-GJsm0GvD6V3Y/s640/Anmerkung+2019-12-13+093945.png" width="640" /></a></div>
<br />
Damit ist die Grundinstallation abgeschlossen und die Testseite von Forms läuft erfolgreich. Und das alles in knapp 15 Minuten.<br />
<br />
Für Reports und die Konfiguration der eigenen Applikationen benötigt es natürlich noch weitere Zeit. Aber das bekommt man sicherlich auch noch hin. Besonders kompliziert war das Ganze nicht und bis auf die Eigenheiten bei den Passwörtern auch recht intuitiv.<br />
<br />
Nachtrag:<br />
Um sich mit WinSCP auf die Maschine zu verbinden, sei folgender Link sehr empfohlen:<br />
http://sharabinth.blogspot.com/2017/10/configure-winscp-to-use-sftp-with.html<br />
<br />
Das hat sofort funktioniert.<br />
<br />
Viel Freude beim Ausprobieren wünscht<br />
Holger<br />
<div class="MsoPlainText">
<o:p></o:p></div>
Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-56074154343897660512018-11-23T14:55:00.003+01:002018-11-23T14:55:57.605+01:00DOAG 2018 Konferenz in Nürnberg - ein paar Erkenntnisse von mirSchon ist die DOAG 2018 Konferenz in Nürnberg wieder vorbei - 3 Tage voller Trubel und geballten Informationen rund um den großen roten Oracle-Riesen in Germany. Im Vorfeld hatte ich schon die für mich interessanten Vorträge, Themen und mögliche Gesprächspartner herausgefiltert. Meine 3 Top-Themen waren: Oracle Forms, Weblogic Server und DevOps.<br />
<br />
Man merkt immer mehr, wie das Thema DevOps endlich bei Oracle ankommt. Gibt es doch schon die Datenbank im Docker Container, den Weblogic Server ebenfalls. Oracle Forms kann darin laufen und auch der Weblogic Server ist für Kubernetes zertifiziert.<br />
<br />
Wie die letzten Jahre schon üblich, fand am Dienstag Abend wieder das Forms Community Meeting statt. Da wurde der Product Manager Michael Ferrante wieder zu Themen rund um Forms und Reports befragt.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ3-b9c5rFvztmB_iU2VQ_5Ts4XRQn6PCs1LZ2C5so6iQvBHKgAglJ-zFmlW_6T3xwXX5KsJLEgO2_lOI5WXK_P3sVgDnRcWvEGgbo3-7f1Yg4NlwQDz52BFcqbV3NvY0-fbU7KXLumIUW/s1600/DsifCkZWkAAMt1s.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ3-b9c5rFvztmB_iU2VQ_5Ts4XRQn6PCs1LZ2C5so6iQvBHKgAglJ-zFmlW_6T3xwXX5KsJLEgO2_lOI5WXK_P3sVgDnRcWvEGgbo3-7f1Yg4NlwQDz52BFcqbV3NvY0-fbU7KXLumIUW/s640/DsifCkZWkAAMt1s.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Quelle: von Auraplayer</td></tr>
</tbody></table>
Die Erkenntnisse davon, aus den Vorträgen und persönlichen Gesprächen mit dem Product Manager reihe ich nun mal in Kurzform auf. Der Rest ist auf den offiziellen Folien zu finden. Alles was im Folgenden kommt, ist noch nicht offiziell (vergleiche Safe Harbor Statement von Oracle) und muss so nicht unbedingt eintreten.<br />
<br />
<ul>
<li>Es ist möglich, dass es ein Reports 19 Release geben wird</li>
<li>Forms 19 ist ein Patch Release (also eigentlich ein 12.2.1.4.0) und kommt im Kalenderjahr 2019</li>
<li>Der Forms Standalone Launcher (FSAL) bekommt einige Neuerungen und Verbesserungen, unter anderem den Single Sign-On Support</li>
<li>Forms 20 wird wohl auch ein Patch Release</li>
<li>Forms wird wohl noch weit über 2030 hinaus leben, vergleiche Lebenszyklus der Oracle E-Business Suite</li>
<li>ein signifikantes neues Feature ist der Support von Forms im Developer Cloud Service</li>
<li>Forms 19+ soll Java 11 LTS unterstützen</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhatrSNz0fhVOr81E9dlRMbLDT5AJeZmxOngzfLvdEl57yixvDPQlrxBNGr1bLeernsOZa_uxmfzhDbSDYTR1oek0mMxRC1MCidUu2NnrKY0p6u19TrxZkN9LaLQZId3Zn4BN-c_zpGURkX/s1600/Unbenannt2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="548" data-original-width="673" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhatrSNz0fhVOr81E9dlRMbLDT5AJeZmxOngzfLvdEl57yixvDPQlrxBNGr1bLeernsOZa_uxmfzhDbSDYTR1oek0mMxRC1MCidUu2NnrKY0p6u19TrxZkN9LaLQZId3Zn4BN-c_zpGURkX/s640/Unbenannt2.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Quelle: <a href="https://www.oracle.com/assets/ebs-roadmap-4739519.pdf" target="_blank">Oracle</a> </td></tr>
</tbody></table>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3vrlN6gHl3ziAtF_6su-zp85CX9c6BLlnRUy-7IYRvXRebF87JE9qOIXJ7Oikb53iE4QjzyD34MDuGjijiJ4A8Srtw_kum3oQXGG-j90vCLsPBoSk8tunBRH34h9z5VrkxXrJz990195C/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="704" data-original-width="1245" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3vrlN6gHl3ziAtF_6su-zp85CX9c6BLlnRUy-7IYRvXRebF87JE9qOIXJ7Oikb53iE4QjzyD34MDuGjijiJ4A8Srtw_kum3oQXGG-j90vCLsPBoSk8tunBRH34h9z5VrkxXrJz990195C/s640/Unbenannt.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Quelle: Oracle</td></tr>
</tbody></table>
<br />
Weitere interessante Themen auf der DOAG waren:<br />
<br />
<ul>
<li>Revival von utPLSQL mit 2 tollen Vorträgen</li>
<li>DevOps Vorträge rund um verschiedene Oracle Komponenten</li>
<li>APEX Neuerungen in 18.1 und forward</li>
<li>verschiedene Cloud Themen</li>
<li>und und und</li>
</ul>
<div>
<div>
Am Ende gingen die 3 Tage in Nürnberg wieder viel zu schnell vorbei. Das ist ja irgendwie immer so. Neben viel Austausch gab es einen Haufen an Informationen zu aktuellen Themen und Trends. Was nicht wirklich gut für Oracle ankam, waren die Ergebnisse einer Support Umfrage der DOAG zur Zufriedenheit mit dem Oracle-Support (siehe <a href="https://www.doag.org/de/home/news/ergebnisse-der-oracle-support-umfrage-2018/detail/" target="_blank">Link</a> ). Tendenz: weiter sinkende Zufriedenheit, das sollte der Hersteller wirklich ernst nehmen.</div>
<div>
Nun bleibt mir nur noch zu sagen: bis zur #DOAG2019 und früher.</div>
<div>
<br /></div>
<div>
Viele Grüße</div>
<div>
Holger</div>
</div>
</div>
Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-83427508132343590592018-10-20T15:16:00.000+02:002018-10-26T12:21:45.142+02:00Forms 12c und Gerüchte zur CloudNoch knapp 1 Monat ist es bis zur DOAG Hauptkonferenz in Nürnberg. Erwartet werden wieder mehr als 2000 Besucher bei der Veranstaltung.<br />
<br />
Vorher ist noch kommende Woche die noch größere OOW in den USA. Dort und in Nürnberg gibt es wieder Vorträge zu Oracle Forms 12. Nach einigen Gerüchten kann man nichts Spektakuläres Neues erwarten, aber einige Gerüchte wurden vorher gestreut.<br />
<br />
Es soll möglich sein, Forms mit dem Oracle Developer Cloud Service (DEVCS) in der Oracle Cloud laufen zu lassen. Und das vielleicht auch endlich mit dem nötigen Support vom Hersteller selbst. Dafür gibt es dieses Jahr auch nicht den üblichen jährlichen Forms 12 Patch und man konnte dafür das erste Mal etwas von Forms 19 hören.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqwNyWJfdXy0Hele-N3pqd6yVQO-RxSmwowwlZNvr7q9EPm8YlpJP6eoa8iWMISmAKKkTLDrPymr2N5-NkVJpafoMTE_19uGBPfUgf8PR8hLgC0X_aEsV95CCPf5gh3LXHXYwFs_0mkSd3/s1600/pastedImage_0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="503" data-original-width="619" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqwNyWJfdXy0Hele-N3pqd6yVQO-RxSmwowwlZNvr7q9EPm8YlpJP6eoa8iWMISmAKKkTLDrPymr2N5-NkVJpafoMTE_19uGBPfUgf8PR8hLgC0X_aEsV95CCPf5gh3LXHXYwFs_0mkSd3/s640/pastedImage_0.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Forms 19 mit Window Tile: ... Oracle Cloud @<a href="https://community.oracle.com/message/14963409#14963409" target="_blank">Quelle </a>Michael Ferrante</td></tr>
</tbody></table>
Es bleibt spannend und ich hoffe, wir sehen uns in Nürnberg.<br />
<br />
Nachtrag 26.10.2018 nach der OOW: <br />
Die Katze ist aus dem Sack, die <a href="https://static.rainfocus.com/oracle/oow18/sess/1523920258697001TPBV/PF/OracleFormsDCS_OOW18_1540442086549001JLKd.pdf" target="_blank">Folien</a> von Michael sind online: Folgerung eine Kombination aus FADS (Oracle Forms Application Deployment Services) und dem DCS od. DevCS (Developer Cloud Service). Das FADS dafür vorgesehen war kam schon direkt bei der Vorstellung als Neuerung hervor.<br />
<br />
Viele Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-21705911873666224482018-05-11T15:24:00.001+02:002018-05-11T15:24:23.617+02:00Forms 12c, Reports und Weblogic in Docker - diesmal mit Windows 10Heute möchte ich meine Reihe mit der Oracle Middleware und Docker fortsetzen. Doch diesmal wähle ich Windows 10 Professional als Host aus, denn dafür ist Docker mittlerweile auch verfügbar.<br />
<br />
Wichtig ist, nach der Installation von Docker im Menü auf die Linux Container zu wechseln, statt mit den Windows Containern zu arbeiten.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKqZSTOdS4TJJGqb9WJUXVuQPQ_oUyjxobpimy8-wtEmLm95-_V2dVHAilN5_l8_7f8ZPTE84cobDcQcKQG45QANzt59inih9Lukr4ksVni9a2UluTbfOoTft0pTmc2wMGm4SGJulx8zsq/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="327" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKqZSTOdS4TJJGqb9WJUXVuQPQ_oUyjxobpimy8-wtEmLm95-_V2dVHAilN5_l8_7f8ZPTE84cobDcQcKQG45QANzt59inih9Lukr4ksVni9a2UluTbfOoTft0pTmc2wMGm4SGJulx8zsq/s400/Unbenannt.PNG" width="348" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8gzZDJQ8gSwFOXz-2DQK7nYeXtMXdwv_Sjy4nbccRzCVjQ4HSuG13CxfTj8fwmitN4tYiSfPeJIEuyjkV-tYHG-FEWU1FRRUj-EtiRMTGJvEYbTcy2Gy4z77patQpPJ-lmY0chSnfYJO4/s1600/Unbenannt2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="372" data-original-width="867" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8gzZDJQ8gSwFOXz-2DQK7nYeXtMXdwv_Sjy4nbccRzCVjQ4HSuG13CxfTj8fwmitN4tYiSfPeJIEuyjkV-tYHG-FEWU1FRRUj-EtiRMTGJvEYbTcy2Gy4z77patQpPJ-lmY0chSnfYJO4/s640/Unbenannt2.PNG" width="640" /></a></div>
<br />
Wenn das kleine Walfisch-Icon (Docker) dann weiß ist und sich nicht mehr bewegt, ist Docker erfolgreich gestartet.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIs58Zff0DBcIe6745HcsjeNRqnH-8kDrtEq1_NPpbTepTXWsgCj931r-ObbPb9KsbKqeQ2R9HLhOdzenvSjORbKmm9H89Goh9h5Mk4vj_oFedPfQ-o7KlYY7gS_97G7maPcZKFYf9l5-h/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIs58Zff0DBcIe6745HcsjeNRqnH-8kDrtEq1_NPpbTepTXWsgCj931r-ObbPb9KsbKqeQ2R9HLhOdzenvSjORbKmm9H89Goh9h5Mk4vj_oFedPfQ-o7KlYY7gS_97G7maPcZKFYf9l5-h/s1600/Unbenannt.PNG" /></a></div>
<br />
<br />
<br />
<br />
<br />
Zusätzlich kann man auch in der DOS-Box fragen, ob der Befehl docker nun verfügbar ist.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuqYmawdh_jbeRRuZn3Zev26V1fqM1BYqk6DlT8JQ4Lo-DS7ouMHGfFb96X23BhvGpiZR-7LpxKzBK5ptZg8MzYDL1dL4OeqGc0zBNBfA-cfPX_UDdpSvbcIKqHPxFd75M4K0RzAG7LD38/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="549" data-original-width="633" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuqYmawdh_jbeRRuZn3Zev26V1fqM1BYqk6DlT8JQ4Lo-DS7ouMHGfFb96X23BhvGpiZR-7LpxKzBK5ptZg8MzYDL1dL4OeqGc0zBNBfA-cfPX_UDdpSvbcIKqHPxFd75M4K0RzAG7LD38/s400/Unbenannt.PNG" width="400" /></a></div>
<br />
Am Anfang des Probierens habe ich mich gefragt, wie komme ich denn nun beim Weblogic Docker Images gebaut, welches normalerweise mit<br />
<br />
sh buildDockerImage.sh -v 12.2.1.3 gestartet wird. Klassische Linux Befehle in einer Windows DOS-Box wie soll das gehen? Im Endeffekt gar nicht, denn ich habe die Docker Images von Linux exportiert und dann im Anschluß in Windows importiert. Das geht so:<br />
<br />
## auf Linux:<br />
docker save -o /mnt/hgfs/D/formsreports12.2.1.3.tar localhost/oracle/myformsreports:12.2.1.3<br />
<br />
## auf Windows:<br />
docker load --input D:/formsreports12.2.1.3.tar <br />und ein docker images zeigt sie dann auch erfolgreich an.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3S6UKqcA6-N9_tNLWWmmkBhqG0hGHlj11LAE9diHhPre6l4_q_xbZGZq2mpEbQqPXMvZ2uI-uOp_nreA0exAtrT_YcZ7ee0Q0DSiXTErjvC8QpzB5ejqaAWViBKjve7LijHwqysVCPRfv/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="159" data-original-width="930" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3S6UKqcA6-N9_tNLWWmmkBhqG0hGHlj11LAE9diHhPre6l4_q_xbZGZq2mpEbQqPXMvZ2uI-uOp_nreA0exAtrT_YcZ7ee0Q0DSiXTErjvC8QpzB5ejqaAWViBKjve7LijHwqysVCPRfv/s640/Unbenannt.PNG" width="640" /></a></div>
<br />
Die nächste Transformation fand in den Environment-Variablen statt:<br />
## auf Linux:<br />
export DC_ORCL_PORT=1521<br /> export DC_ORCL_OEM_PORT=5500<br /> export DC_ORCL_SID=frdb<br /> export DC_ORCL_PDB=frpdb<br /> export DC_ORCL_SYSPWD=Oracle12c<br /> export DC_ORCL_HOST=${DC_HOSTNAME}<br />
<br />
## auf Windows:<br /> SET DC_DESIRED_HOSTNAME=myformsserver<br />
SET DC_ORCL_PORT=1521<br /> SET DC_ORCL_OEM_PORT=5500<br /> SET DC_ORCL_APEX_PORT=8080<br /> SET DC_ORCL_SID=ORCLCDB<br /> SET DC_ORCL_PDB=ORCLPDB1<br /> SET DC_ORCL_SYSPWD=oracle<br /> SET DC_ORCL_HOST=%DC_DESIRED_HOSTNAME%<br />
<br />
zusätzlich habe ich mir einen festen Hostnamen ausgedacht, der auch in den Properties konfiguriert ist. In dem Zusammenhang sei gesagt, dass das Mounten von Volumes auf Windows mit dem späteren Docker Container nicht funktioniert hat, was sicherlich an irgendwelchen Rechten liegt. So werden also im Gegensatz zum Linux Host die späteren Domain-Informationen alle innerhalb des Docker Containers gespeichert. Dies ist natürlich vom Zugriff her nicht so komfortabel wie auf dem Linux Host, wo er Volume-Mount keine Probleme gemacht hat.<br />
<br />
Im File für docker-compose habe ich auch einige Anpassungen vorgenommen, dort wird z.B. auch direkt der Hostname des neuen Containers auf den gewählten aus dem Properties-File gesetzt und ich habe noch einige weitere Environment-Variablen erzeugt, die später den Umgang mit der Domäne etwas vereinfachen.<br /><br />Hier der Inhalt meines docker-compose Files:<br />
version: "3.0"<br /><br />services:<br /> #<br /> # The Oracle DB Definition<br /> # <br /> frdb:<br /> image: oracle/database:12.1.0.2-ee<br /> network_mode: "bridge"<br /> ports:<br /> - "${DC_ORCL_PORT}:1521"<br /> - "${DC_ORCL_OEM_PORT}:5500"<br /> - "${DC_ORCL_APEX_PORT}:8080"<br /> environment:<br /> - ORACLE_SID=${DC_ORCL_SID}<br /> - ORACLE_PDB=${DC_ORCL_PDB}<br /> - ORACLE_PWD=${DC_ORCL_SYSPWD}<br /> container_name: frdb<br /><br /> #<br /> # The Forms & Reports Servers<br /> # <br /> myfrfmw:<br /> image: ${DC_REGISTRY_FR}/oracle/${DC_FR_PREFIX}formsreports:${DC_FR_VERSION}<br /> hostname: ${DC_DESIRED_HOSTNAME}<br /> network_mode: "bridge"<br /> container_name: myfrfmw<br /> command: /bin/bash -c "sleep 5s; /opt/oracle/dockertools/crDomain.sh"<br /> ports:<br /> - "${DC_ADMINPORT}:${DC_ADMINPORT}"<br /> - "${DC_FORMS12C_MS_PORT}:${DC_FORMS12C_MS_PORT}"<br /> - "${DC_REPORTS12C_MS_PORT}:${DC_REPORTS12C_MS_PORT}"<br /> - "${DC_OHS_LISTENPORT}:${DC_OHS_LISTENPORT}"<br /> - "${DC_NM_PORT}:${DC_NM_PORT}"<br /> environment:<br /> - SCRIPT_HOME=${DC_SCRIPT_HOME}<br /> - INT_ORACLE_HOME=${DC_INT_ORACLE_HOME}<br /> - WL_HOME=${DC_WL_HOME}<br /> - WLST_HOME=${DC_WLST_HOME}<br /> - MW=${DC_MW}<br /> - DOMAIN_BASE=${DC_DOMAIN_BASE}<br /> - APPLICATION_BASE=${DC_APPLICATION_BASE}<br /> - APP_VZ=${DC_APP_VZ}<br /> - FORMS12C=${DC_FORMS12C}<br /> - FADS12C=${DC_FADS12C}<br /> - REPORTS12C=${DC_REPORTS12C}<br /> - WEBTIER12C=${DC_WEBTIER12C}<br /> - OHS_COMPONENTNAME=${DC_OHS_COMPONENTNAME}<br /> - OHS_LISTENPORT=${DC_OHS_LISTENPORT}<br /> - OHS_SSLPORT=${DC_OHS_SSLPORT}<br /> - TEMPLATE=${DC_TEMPLATE}<br /> - DOMAIN_NAME=${DC_DOMAIN_NAME}<br /> - AS_NAME=${DC_AS_NAME}<br /> - ADM_USER=${DC_ADM_USER}<br /> - ADM_PWD=${DC_ADM_PWD}<br /> - ADMINPORT=${DC_ADMINPORT}<br /> - ADMINPORTSSL=${DC_ADMINPORTSSL}<br /> - AS_HOST=${DC_AS_HOST}<br /> - FORMS_MS_NAME=${DC_FORMS_MS_NAME}<br /> - FORMS12C_MS_PORT=${DC_FORMS12C_MS_PORT}<br /> - REPORTS_MS_NAME=${DC_REPORTS_MS_NAME}<br /> - REPORTS12C_MS_PORT=${DC_REPORTS12C_MS_PORT}<br /> - REPORTS_IN_FORMS=${DC_REPORTS_IN_FORMS}<br /> - REP_SERVER=${DC_REP_SERVER}<br /> - REP_SERVER_NAME=${DC_REP_SERVER_NAME}<br /> - REP_TOOLS_NAME=${DC_REP_TOOLS_NAME} <br /> - NM_LISTENADDRESS=${DC_NM_LISTENADDRESS}<br /> - NM_TYPE=${DC_NM_TYPE}<br /> - NM_PORT=${DC_NM_PORT}<br /> - NM_USERNAME=${DC_NM_USERNAME}<br /> - NM_PWD=${DC_NM_PWD}<br /> - DBUSER=${DC_DBUSER}<br /> - DBPWD=${DC_DBPWD}<br /> - DBROLE=${DC_DBROLE}<br /> - COMPONENTPWD=${DC_COMPONENTPWD}<br /> - SCHEMA_PREFIX=${DC_SCHEMA_PREFIX}<br /> - DB_HOST=${DC_DB_HOST}<br /> - DB_PORT=${DC_DB_PORT}<br /> - DB_SERVICE=${DC_DB_SERVICE}<br /> - DB_OMF=${DC_DB_OMF}<br /> - DB_USER_PW=${DC_DB_USER_PW}<br /> - PWDFILE=${DC_PWDFILE}<br /> - TNS_ADMIN=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig<br /> - FORMS_INSTANCE=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/components/FORMS/instances/forms1/bin <br /> - FORMS_WEBCFG=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config<br /> - DOMAIN_DIR=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME} <br /> - DOMAIN_DIR_BIN=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/bin <br /> - NLS_LANG=AMERICAN_AMERICA.AL32UTF8 <br /> - FORMS_WEBUTIL=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/components/FORMS/instances/forms1/server <br />
<br />
Gestartet wird zunächst wieder einmal die Datenbank-Instanz, die als Repository dienen soll und im Anschluß dann der Weblogic-Server, der zunächst automatisch die Forms/Reports-Domäne erzeugt.<br />
<br />
docker-compose -f myfrfmw-docker-compose.yml up -d myfrfmw<br />docker logs myfrfmw -f<br />
<br />
Alles in allem nicht wirklich schwer das Prozedere und mit etwas Transfer-Arbeit verbunden. Natürlich gut und hilfreich, dass Docker den Ex- und Import von Images anbietet; auch plattformübergreifend.<br />
<br />
Bis bald<br />
Holger<br />
Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-84193588640659681912018-05-01T13:26:00.002+02:002018-05-11T13:40:37.508+02:00Form Builder aus Docker auf Windows Host öffnenIm letzten Post habe ich beschrieben, wie man Forms und Reports per Docker auf einem Linux Host installiert. Dies habe ich mittlerweile auch auf einem Windows Host gemacht, auf dem dann auch Docker installiert ist. Docker läuft momentan nur auf Windows-basierten System mit Windows Server und Windows 10.<br />
<br />
Möchte man nun den Form Builder aus diesem Docker Container zum Laufen bringen, ist das nicht ganz so einfach und wird mit einer Fehlermeldung quittiert.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOp0k-uB_LHvvcFJ4xjGQN-p61SKPIYW7wBnFieGn_jYm4ylmnUr3ZRtNeilQ8dF7iY3AL10DBLxR5kufLFL08FCHRS2Rtb11ynM-KTD6t-ufOHbKbRzFTgm2521RDg59FcxRvVWm10reR/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="129" data-original-width="462" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOp0k-uB_LHvvcFJ4xjGQN-p61SKPIYW7wBnFieGn_jYm4ylmnUr3ZRtNeilQ8dF7iY3AL10DBLxR5kufLFL08FCHRS2Rtb11ynM-KTD6t-ufOHbKbRzFTgm2521RDg59FcxRvVWm10reR/s400/Unbenannt.PNG" width="400" /></a></div>
<br />
Es ist einfach noch kein X-Window-Server eingerichtet. Dafür habe ich auf dem Windows Host dann den XMing Server installiert, der dafür bestens geeignet ist.<br />
<br />
Ebenfalls ist es nötig, dass der X-Server auch benutzt werden darf, sprich das sich Clients auch connecten können. Daher hat mein Windows auf noch eine Cywgin Installation bekommen.<br />
<br />
In Cygwin setze ich die DISPLAY Variable wie folgt und gestatte per Xhost den Connect.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSAOAAwAhH4Z8BdMaKXrfCmikCQVp7Jn1eeEOOLYPg4j2hXGKpCf_DSLQKSQbZwoQme2zcX8tuI5lwsXwZSheq3iceNczcD3T6oVvUzwJE0OqzZpemScarPA9bMxj015dL3VuMUD59EH07/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="675" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSAOAAwAhH4Z8BdMaKXrfCmikCQVp7Jn1eeEOOLYPg4j2hXGKpCf_DSLQKSQbZwoQme2zcX8tuI5lwsXwZSheq3iceNczcD3T6oVvUzwJE0OqzZpemScarPA9bMxj015dL3VuMUD59EH07/s400/Unbenannt.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEc_El6MlWDGtos-kfRqIaBOYtFJ-tUib_b0VdHcus1uP4Wios6ToPr8vvSOHMK4Rhkl5M6NYckD2gHTyJUwe8Qej03eP8P5kkynNSmBzSUymLJTumk3MP5FIXkqNiXZ1cPajj5Ju_OiU6/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEc_El6MlWDGtos-kfRqIaBOYtFJ-tUib_b0VdHcus1uP4Wios6ToPr8vvSOHMK4Rhkl5M6NYckD2gHTyJUwe8Qej03eP8P5kkynNSmBzSUymLJTumk3MP5FIXkqNiXZ1cPajj5Ju_OiU6/s1600/Unbenannt.PNG" /></a></div>
<br />
Ist dies erledigt, kann es im Docker Container weitergehen. Dort setze ich auch die DISPLAY Variable entsprechend und dann geht der Start des Form Builder auch schon.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAwDXBFvZ7kp7BF6jMrqvVSVddmksBg-z-ozAC7tu_M1bXVXxuhhLIJd5Gk17HzHEuz9DyUz3Q1BzMzC-kJv6vjIzVrroDZ-DzOGdzSp7OgT91J13sIIaxuUeIv1ZjKcgC6BWd4dxDRHpL/s1600/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="582" data-original-width="1092" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAwDXBFvZ7kp7BF6jMrqvVSVddmksBg-z-ozAC7tu_M1bXVXxuhhLIJd5Gk17HzHEuz9DyUz3Q1BzMzC-kJv6vjIzVrroDZ-DzOGdzSp7OgT91J13sIIaxuUeIv1ZjKcgC6BWd4dxDRHpL/s400/Unbenannt.PNG" width="400" /></a></div>
<br />
Recht einfach, wenn man weiß wie das alles zusammenspielen muß. Anstelle das xhost Befehls kann man das sicher noch optimieren.<br />
<br />
Als nächstes folgt hoffentlich bald die Beschreibung der Docker Einrichtung mit Forms/Reports auf Windows.<br />
<br />
Bis bald<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-41098751123125096702018-02-13T12:00:00.002+01:002018-02-14T14:48:28.033+01:00verlängerter Lifetime Support für Forms 12c nun bis 2022Gestern Abend kam per Twitter eine hoffnungsvolle Botschaft von Oracle in Form von Product Manager Michael Ferrante:<br />
<br />
verlängerter Lifetime Support für die Fusion Middleware 12.2, insbesondere Forms 12c nun bis 2022 statt 2020. Extended Support sogar bis 2025, auch gültig für Reports 12c.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhRE72BuiOKC4FFtZbhQXRd-mPggsZQ0BGgiHRPBBdb-wjImsxzqceIaia8knMSUV-Nk4XZBif0nXUbxn7XIiT0i9fEUpIxWIINfQwBCH3G_WLxfe1nI2ye-wl1PI15wpqxIRqNbeTgRl/s1600/Unbenannt.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="846" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhRE72BuiOKC4FFtZbhQXRd-mPggsZQ0BGgiHRPBBdb-wjImsxzqceIaia8knMSUV-Nk4XZBif0nXUbxn7XIiT0i9fEUpIxWIINfQwBCH3G_WLxfe1nI2ye-wl1PI15wpqxIRqNbeTgRl/s400/Unbenannt.JPG" width="400" /></a></div>
<br />
Quelle: <a href="https://www.oracle.com/us/assets/lifetime-support-middleware-069163.pdf" target="_blank">Oracle</a><br />
<br />
Also noch etwas mehr Zeit um hoffentlich noch spannende und zukunftsträchtige Features zu implementieren. Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com1tag:blogger.com,1999:blog-1500582291514786380.post-35191710432763385492017-12-08T17:14:00.000+01:002018-05-11T13:41:28.519+02:00Forms 12c, Reports und Weblogic in Docker - nun wirklich lauffähigHeute möchte ich beschreiben, wie man Forms 12c, Reports und Weblogic in Docker zum Laufen bringt. Das war schon länger ein Wunsch von mir und Dirk Nachbar (<a href="http://dirknachbar.blogspot.de/">http://dirknachbar.blogspot.de</a>) hat dafür großartige Vorarbeit geleistet, unterstützt von Robert Crames (<a href="http://robertcrames.blogspot.ch/" target="_blank">http://robertcrames.blogspot.ch</a>) und Jan-Peter Timmermann (<a href="https://jan-peter.me/" target="_blank">https://jan-peter.me</a>).<br />
<br />
Warum denn Docker wird man sich vielleicht fragen? Die einfache Antwort lautet: weil Docker toll ist und man nicht immer wieder eine neue VM mit Forms aufzusetzen braucht. Außerdem sind automatisierte Builds und das Bereitstellen einer Umgebung ohne viele manuelle Aktivitäten einfach besser.<br />
<br />
Mein Setup sieht so aus:<br />
<ul>
<li>Laptop mit Windows 7</li>
<li>darauf eine VM mit Ubuntu 17.10</li>
<li>und in Ubuntu läuft Docker</li>
</ul>
Die Ubuntu-Maschine und der WLS-Docker Container teilen sich Verzeichnisse, in denen die erstelle WLS-Domäne liegt. So kann direkt von Ubuntu aus die Domäne verändert und konfiguriert werden. Ein paar weitere Vorarbeiten sind noch zu leisten, wie z.B. User oracle und Gruppe oinstall anzulegen. Auf meinem Ubuntu mußten noch die Versionen von docker und docker-compose upgegradet werden, denn die aktuellen Versionen aus dem Software-Repository waren nicht mehr ganz aktuell.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9ACpljOlg-4PNNYnvVsMRaWPd3c-vrIYrsBx80ADV_usBoVX2Fao_q7Ksc5zPMkj64stAKw_1kg2NF0zUjseYZBCrmcclnM4xpbaDYVKN_AoE5zsWITmk9VGnuEbZfGjOCSFbTv18cJI/s1600/Bildschirmfoto+vom+2017-12-08+07-53-07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="162" data-original-width="454" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9ACpljOlg-4PNNYnvVsMRaWPd3c-vrIYrsBx80ADV_usBoVX2Fao_q7Ksc5zPMkj64stAKw_1kg2NF0zUjseYZBCrmcclnM4xpbaDYVKN_AoE5zsWITmk9VGnuEbZfGjOCSFbTv18cJI/s400/Bildschirmfoto+vom+2017-12-08+07-53-07.png" width="400" /></a></div>
<br />
Die Installationsschritte sind im Prinzip genau wie bei einer Installation von Forms/Weblogic auf einem Host. Man braucht im Einzelnen:<br />
<ul>
<li>eine Datenbank für das Repository (entweder Docker oder Host)</li>
<li>einen Weblogic im Docker</li>
<li>eine Repository Installation</li>
<li>eine Forms/Reports Weblogic Domäne</li>
</ul>
<br />
Hier für dieses Beispiel habe ich alles in 2 Docker-Images installiert und bin der Anleitung von Dirk aus seinem <a href="https://github.com/DirkNachbar/Docker" target="_blank">Github</a> gefolgt.<br />
<br />
1. Aufbau des Datenbank Images (gefordert wird eine Standard oder eine Enterprise Installation für das Repository)<br />
Hierfür habe ich einen Git Clone des offiziellen Oracle Docker <a href="https://github.com/oracle/docker-images/tree/master/OracleDatabase" target="_blank">Githubs</a> gemacht und mittels ./buildDockerImage.sh -v 12.2.0.1 -e ein Image der Enterprise Edition gebaut.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpoLP1Qlnkshk7jIV87TYuBTEKU5g5teg8l1ocYwpfDdge2lS4eFvIIm3929-MSNhu8ZM3sqXYg75SxU8OveHt3gmgMm7M-sTBAWE0H9Y3SbaFf5bugz5jvegvYP86KV6EJrdYlKb_VWJ/s1600/Bildschirmfoto+vom+2017-12-08+07-56-46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="940" height="67" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpoLP1Qlnkshk7jIV87TYuBTEKU5g5teg8l1ocYwpfDdge2lS4eFvIIm3929-MSNhu8ZM3sqXYg75SxU8OveHt3gmgMm7M-sTBAWE0H9Y3SbaFf5bugz5jvegvYP86KV6EJrdYlKb_VWJ/s640/Bildschirmfoto+vom+2017-12-08+07-56-46.png" width="640" /></a></div>
<br />
Nach dem erfolgreichen Erstellen wird dieses Image z.B. hiermit gestartet:<br />
docker run --name oracle12-ee -p 1521:1521 -p 5500:5500 -p 8080:8080 -e ORACLE_PWD=neuesPasswort -v /opt/oracle/oradata:/u01/app/oracle/oradata oracle/database:12.2.0.1-ee<br />
<br />
2. Aufbau des Weblogic Images<br />
Dieser Teil beginnt mit dem Git Clone von Dirks Github Repository und hat mehrere Schritte.<br />
Zuerst erfolgt der Build des OracleLinux:latest mit dem Oracle JDK 8u151. Dafür muss man das JDK 8u151 tar.gz in den Ordner OracleJava/java-8 legen und ein <br />
./buildDockerImage.sh machen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk06t4hfrxlrjCuoBIr6dgMrs3N4kCD2nYyWh6Pcfgz5L-wt1AnRJzkdJFSDMDBGB2OPiIo6LyuxJY8BVxXWam8DZg2UNBFqioERgUQrbllup6xTK7958wqX9HKalnxcjv6EnyGRwYQmjw/s1600/Bildschirmfoto+vom+2017-12-08+08-04-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="81" data-original-width="608" height="52" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk06t4hfrxlrjCuoBIr6dgMrs3N4kCD2nYyWh6Pcfgz5L-wt1AnRJzkdJFSDMDBGB2OPiIo6LyuxJY8BVxXWam8DZg2UNBFqioERgUQrbllup6xTK7958wqX9HKalnxcjv6EnyGRwYQmjw/s400/Bildschirmfoto+vom+2017-12-08+08-04-05.png" width="400" /></a></div>
Danach gibt es ein oracle/serverjdk Image. Anschauen kann man sich die vorhandenen Images mit dem Command: docker images<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcybvkMYj409hfj48JnQtOOICD4cmptJ75CzZURxMU9kmfbHYdMCXKmfHCZr-kXALcmc3PzDGD4TLydEFaBFKzvCD8WKikb6zYI8CBkQmtKlzsfc0StzgXF7BOEqY2BhmBSQIxesq9_GAK/s1600/Bildschirmfoto+vom+2017-12-08+08-06-38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="208" data-original-width="911" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcybvkMYj409hfj48JnQtOOICD4cmptJ75CzZURxMU9kmfbHYdMCXKmfHCZr-kXALcmc3PzDGD4TLydEFaBFKzvCD8WKikb6zYI8CBkQmtKlzsfc0StzgXF7BOEqY2BhmBSQIxesq9_GAK/s400/Bildschirmfoto+vom+2017-12-08+08-06-38.png" width="400" /></a></div>
<br />
Nun wechselt man ins Verzeichnis OracleFMWInfrastructure/dockerfiles und erstellt ein Weblogic Abbild. Dafür muss man vorher noch bei Oracle die entsprechende Weblogic-Zip-Datei fmw_12.2.1.3.0_infrastructure_Disk1_1of1.zip herunterladen und in OracleFMWInfrastructure/dockerfiles/12.2.1.3 ablegen.<br />
Mit ./buildDockerImage.sh -v 12.2.1.3 wird der Build gestartet und am Ende kommt ein Oracle WebLogic Server Infrastructure 12.2.1.3.0 heraus.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkDj3iI8l5gPKAgsz8qfwjEc2RCYSr6Iw2Xqd9NwPD0u1bgqwbc1-oPJcJOP5XjyWcWCp7u8rdj7LJQ0X2pC8D86qauTxfKy15XvZuVs6QhOLJ3n6aVD1YfDOuTnIqhQIN6Tsx8R2QB2YT/s1600/Bildschirmfoto+vom+2017-12-08+08-16-55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="67" data-original-width="854" height="31" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkDj3iI8l5gPKAgsz8qfwjEc2RCYSr6Iw2Xqd9NwPD0u1bgqwbc1-oPJcJOP5XjyWcWCp7u8rdj7LJQ0X2pC8D86qauTxfKy15XvZuVs6QhOLJ3n6aVD1YfDOuTnIqhQIN6Tsx8R2QB2YT/s400/Bildschirmfoto+vom+2017-12-08+08-16-55.png" width="400" /></a></div>
<br />
Letzter Abschnitt ist das Erweitern des WLS-Infrastructure Images mit den Forms und Reports Sourcen (Wechsel ins Verzeichnis OracleFormsReports/dockerfiles und Ablage der Installations-Dateien fmw_12.2.1.3.0_fr_linux64.bin und fmw_12.2.1.3.0_fr_linux64-2.zip im Unterordner OracleFormsReports/dockerfiles/12.2.1.3. Mit ./buildDockerImage.sh -v 12.2.1.3 wird der Image-Build gestartet.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPdVF9dw0-NfTIzLWnsoRBv0eP9M7ulSXhQW8bJ7HFRyWPSy4fnJBsBkiN9Q4z4xeVywN-wIArZtmIpoT4RfhEQ8JNDQNj3-HqZIau3PfkNkevR2l9u1u_ReNDtnPIJqiovAxp8iZ_sf6Q/s1600/Bildschirmfoto+vom+2017-12-08+08-21-48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="65" data-original-width="813" height="31" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPdVF9dw0-NfTIzLWnsoRBv0eP9M7ulSXhQW8bJ7HFRyWPSy4fnJBsBkiN9Q4z4xeVywN-wIArZtmIpoT4RfhEQ8JNDQNj3-HqZIau3PfkNkevR2l9u1u_ReNDtnPIJqiovAxp8iZ_sf6Q/s400/Bildschirmfoto+vom+2017-12-08+08-21-48.png" width="400" /></a></div>
<br />
Am Ende hat man dann ein Image localhost/oracle/formsreports TAG: 12.2.1.3<br />
<br />
3. Jetzt geht es ans Konfigurieren der Domain. Dafür hat Dirk im Verzeichnis OracleFormsReports/samples eine Konfigurationsdatei setenv.sh vorbereitet, die die nötigen Umgebungsvariablen setzt (hier ein Auszug).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnCNTqpkurPJbqJTqdF08Z84-OOSLdeQBtP5kPScBYH5V2fIbmYLNUInU4WLxzmhBlXOvr-EtNiPdtJ2dm7E0LbILMt7QZvkiFbHDiARPVkcSUlnxsGtqhuKJwuReSoFqAxe6XiqeQ2V5R/s1600/Bildschirmfoto+vom+2017-12-08+08-32-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="382" data-original-width="380" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnCNTqpkurPJbqJTqdF08Z84-OOSLdeQBtP5kPScBYH5V2fIbmYLNUInU4WLxzmhBlXOvr-EtNiPdtJ2dm7E0LbILMt7QZvkiFbHDiARPVkcSUlnxsGtqhuKJwuReSoFqAxe6XiqeQ2V5R/s320/Bildschirmfoto+vom+2017-12-08+08-32-01.png" width="317" /></a></div>
<br />
Diese Datei muss entsprechend angepasst werden; sehr wichtig sind die Eintragungen im #Repository Connect für den Connect des RCU gegen diese Datenbank. Da bin ich zuerst in eine Falle gelaufen und habe für DC_DB_HOST die falsche IP angegeben, dann hat die Erstellung der Domain nicht funktioniert.<br />
Mit ifconfig auf dem Docker Host gibt es ein Netzwerk namens docker0 und unter der inet stehen sollte eine IP stehen. Diese ist die richtige für den DB Container.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFNrpgpnZHRQuknhdZSGZT5yf8RKxgFSukoR_jguU-y-7AvqYpIIePqRmvPmHZdLHO42AqvL63IRVjCGrIqBNphdP6wAepX63_203sCaCS9BIaAvAhuJXc8SvCOLAIqCdMApHWJxA0PVht/s1600/Bildschirmfoto+vom+2017-12-08+08-36-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="38" data-original-width="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFNrpgpnZHRQuknhdZSGZT5yf8RKxgFSukoR_jguU-y-7AvqYpIIePqRmvPmHZdLHO42AqvL63IRVjCGrIqBNphdP6wAepX63_203sCaCS9BIaAvAhuJXc8SvCOLAIqCdMApHWJxA0PVht/s1600/Bildschirmfoto+vom+2017-12-08+08-36-11.png" /></a></div>
<br />
Nun kann mit dem Erzeugen der WLS-Domäne und Start des Admin-Servers begonnen werden (vorher sollte die DB aber gestartet sein). Die Variablen aus setenv.sh werden gemerkt, exportiert und vom docker-compose genutzt.<br />
<br />
source ../setenv.sh<br />
docker-compose up -d frfmw; docker logs frfmw -f<br />
<br />
Wenn man Ende ein <BEA-000365> <Server state changed to RUNNING.><br />
steht, ist alles gut verlaufen.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiId_FJRxW5OnxCBCC5Qz_zIx68EjNF74wHD35JfwEzmdgGrUYs6t_OsQsNmLzsCy4piqIwR3QuqMPzYcdzX-hF2PMxoKzigZ9mP1ex0QcRFfc37cCyUUj79OyqIo_ZjwEdozcB-pkrwfKH/s1600/Bildschirmfoto+vom+2017-12-08+08-44-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="29" data-original-width="1022" height="11" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiId_FJRxW5OnxCBCC5Qz_zIx68EjNF74wHD35JfwEzmdgGrUYs6t_OsQsNmLzsCy4piqIwR3QuqMPzYcdzX-hF2PMxoKzigZ9mP1ex0QcRFfc37cCyUUj79OyqIo_ZjwEdozcB-pkrwfKH/s400/Bildschirmfoto+vom+2017-12-08+08-44-05.png" width="400" /></a></div>
<br />
Nun kann im Browser der Enterprise Manager mit der URL http://localhost:7001/em aufgerufen werden.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvWdAjLYhRZDUEzSaKqjrx0w8F5DzbP-KMNg2Fd4L2zBSludoCuE1CS4_83ASRKsHP5a8AI7HVEpGjjRI_Ut6YU3yiklK8C8u8_vxhqDhbT8jZCYUmreghH7KTN8edXJIom6wXRg8stOGq/s1600/Bildschirmfoto+vom+2017-12-08+08-46-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="759" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvWdAjLYhRZDUEzSaKqjrx0w8F5DzbP-KMNg2Fd4L2zBSludoCuE1CS4_83ASRKsHP5a8AI7HVEpGjjRI_Ut6YU3yiklK8C8u8_vxhqDhbT8jZCYUmreghH7KTN8edXJIom6wXRg8stOGq/s320/Bildschirmfoto+vom+2017-12-08+08-46-15.png" width="320" /></a></div>
Hierin können nun die Managed Server MS_FORMS und MS_REPORTS gestartet werden.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8zMW6hbS31n63MFWh5HCSmJpSehb0kYCY5vyMuHHs8-zrq6cKdcgAjkzA_PQBDV-ewEk1OzKikRjRSewNYUR37UD-WaGUE-8dVaxykIs71Jh9UDVRIp8vMGSN8UJ5pZMbR-DOZSb-wKHP/s1600/Bildschirmfoto+vom+2017-12-08+08-49-37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="35" data-original-width="1294" height="17" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8zMW6hbS31n63MFWh5HCSmJpSehb0kYCY5vyMuHHs8-zrq6cKdcgAjkzA_PQBDV-ewEk1OzKikRjRSewNYUR37UD-WaGUE-8dVaxykIs71Jh9UDVRIp8vMGSN8UJ5pZMbR-DOZSb-wKHP/s640/Bildschirmfoto+vom+2017-12-08+08-49-37.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXf4f1zdzbcdD33kw-uTAUTLiXU4W1HIyTpZKtEtWO6BfNEhTk3AhHcjJwJLT7NnFSstuJIok68IJVbINEs6rUjqkXABG5Kyp_Yj_YDyw_gnJvlzugcG66de_LKIMKQDcyv3F7t1o_Ttyr/s1600/Bildschirmfoto+vom+2017-12-08+08-51-26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="266" data-original-width="540" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXf4f1zdzbcdD33kw-uTAUTLiXU4W1HIyTpZKtEtWO6BfNEhTk3AhHcjJwJLT7NnFSstuJIok68IJVbINEs6rUjqkXABG5Kyp_Yj_YDyw_gnJvlzugcG66de_LKIMKQDcyv3F7t1o_Ttyr/s320/Bildschirmfoto+vom+2017-12-08+08-51-26.png" width="320" /></a></div>
<br />
Wenn man dann auch noch von der Ubuntu-VM die Ports entsprechend forwarded, kann man im Client im Browser auch die Forms-Testseite aufrufen:<br />
http://localhost:9001/forms/frmservlet<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-AhOxnb37Mb66boWmnWod2jZR_IZmJNvDHAUu5QBxPb4gBgV_nTUE7c7n_e2U3Tj6vcmCxNZHZbVv7CI1JI1qFxELDtmVoKrx09i8HzFb4WMuwuT_7GEAevwjt2UwuQsLp_7X3LG4PjMB/s1600/Unbenannt.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="368" data-original-width="799" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-AhOxnb37Mb66boWmnWod2jZR_IZmJNvDHAUu5QBxPb4gBgV_nTUE7c7n_e2U3Tj6vcmCxNZHZbVv7CI1JI1qFxELDtmVoKrx09i8HzFb4WMuwuT_7GEAevwjt2UwuQsLp_7X3LG4PjMB/s400/Unbenannt.JPG" width="400" /></a></div>
<br />
Was kann man noch machen?<br />
<br />
<div class="" style="clear: both; text-align: left;">
Einen zuvor erstellten Reports-Server starten</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-iuXs14uowKjhrn-nLN8XhLTIY9uHJsQzOsO5Os2zbjvrfv5kqGBctcR6wCXjKZwuGOnDoTOlYC7c_zAo7yOnBPGO_HffOb_YUxdrG9axlFB89sUbBHcrWcA1s0Dt7AGGlZNln56mIpNJ/s1600/Bildschirmfoto+vom+2017-12-08+09-01-25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="486" height="71" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-iuXs14uowKjhrn-nLN8XhLTIY9uHJsQzOsO5Os2zbjvrfv5kqGBctcR6wCXjKZwuGOnDoTOlYC7c_zAo7yOnBPGO_HffOb_YUxdrG9axlFB89sUbBHcrWcA1s0Dt7AGGlZNln56mIpNJ/s320/Bildschirmfoto+vom+2017-12-08+09-01-25.png" width="320" /></a></div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
Da die Konfigurationsdateien der Domain alle in einem Verzeichnis auf dem Docker Host zugänglich sind, kann man sie dort auch bequem bearbeiten und die Änderungen sind persistiert (z.B. default.env, formsweb.cfg, rwserver.conf, httpd.conf und andere).</div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
Man kann auch das neue FADS mit dem Forms 12.2.1.3.0 nutzen, siehe dazu auch ins readme-File von Dirk.</div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
Tja was soll ich sagen, ich bin erstmal sehr begeistert von dieser Variante. Denn nach einem Neustart des Ubuntus kann man die Datenbank und den WLS Admin Server mit 2 einzelnen docker Befehlen wieder starten und die Umgebung ist wieder da. Hier ist es auch von Vorteil, dass die o.g. Herren die ganze Domänen-Erstellung gescriptet haben und man ohne GUI auskommt. Von Oracle gibt es dafür bislang keinen Support, was nicht heißt, dass man es nicht trotzdem machen und versuchen soll.</div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
Viele Grüße</div>
<div class="" style="clear: both; text-align: left;">
Holger</div>
Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-39613563799640916102017-11-30T11:21:00.001+01:002017-11-30T14:43:09.751+01:00einen Forms Datenblock mit einer Pipelined Table Function erstellenHeute wurde ich im Daily Standup im aktuellen Projekt gefragt, ob ich oder einer der Kollegen schon mal einen Forms Datenblock mit einer Pipelined Table Function erstellt habe. Dies habe ich abgefragt und verneint. Und vor kurzem tauchte diese Frage auch schon im Oracle Support Forum auf.<br />
<br />
Also habe ich das einfach ausprobiert und kann sagen, es funktioniert. Dieses Vorgehen will ich hier einmal exemplarisch beschreiben. Als Datenquelle dient das gute DB-Schema HR mit den Tabellen Employees und Department.<br />
<br />
Zuerst erstelle ich auf der Datenbank ein Package mit einer Pipelined Table Function.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG6pVqH6SRiejZwOHzP7U20CJdu4nqMy2Z9BBCkJKbovSbo2ac0MpJnAkRdEATPz96eysqSpH_RYDDJgvsD6lCeWfx1LMutsWbcnJzvwka0RIxmSbQ54czUZ_KkP_Boj3y-YYl0_luMive/s1600/Unbenannt.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="410" data-original-width="502" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG6pVqH6SRiejZwOHzP7U20CJdu4nqMy2Z9BBCkJKbovSbo2ac0MpJnAkRdEATPz96eysqSpH_RYDDJgvsD6lCeWfx1LMutsWbcnJzvwka0RIxmSbQ54czUZ_KkP_Boj3y-YYl0_luMive/s400/Unbenannt.JPG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZx71rWAdVA8ubD1L7_nFhBbiWKXLmbnWgZSh9B2o0v0ATNgN2IHX-4yUn8C9hfH8G6_ks62ABotFDr4J9CJwxUrbvGuL0uazMdGgG1Sw4a7hu7IxfrXH0s-FplJRHaxLMWd3lNWnT1EEI/s1600/Unbenannt1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="510" data-original-width="407" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZx71rWAdVA8ubD1L7_nFhBbiWKXLmbnWgZSh9B2o0v0ATNgN2IHX-4yUn8C9hfH8G6_ks62ABotFDr4J9CJwxUrbvGuL0uazMdGgG1Sw4a7hu7IxfrXH0s-FplJRHaxLMWd3lNWnT1EEI/s400/Unbenannt1.JPG" width="317" /></a></div>
<br />
Nach dem Erstellen schaue ich mir einmal das Ergebnis als SQL im SQLDeveloper an für Department 50.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9yyqNjkfAfuHgtp4xqC2UWPpjVJli8QgbCDMhVq5TqaXZGrQcXlJvXcyLL6O8HlfmhOpvdd9ed4JkfYvQAliA5MBxKrcKEdmbZKuODfv3fpN7fj_6zwo2Ap8G-MnveSUq-HhWNt_DKn4b/s1600/Unbenannt2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="355" data-original-width="697" height="323" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9yyqNjkfAfuHgtp4xqC2UWPpjVJli8QgbCDMhVq5TqaXZGrQcXlJvXcyLL6O8HlfmhOpvdd9ed4JkfYvQAliA5MBxKrcKEdmbZKuODfv3fpN7fj_6zwo2Ap8G-MnveSUq-HhWNt_DKn4b/s640/Unbenannt2.JPG" width="640" /></a></div>
<br />
Das funktioniert ja bisher alles ohne Probleme, das Erstellen einer einfachen Forms-Maske dafür ist auch nicht schwer. Erst erstelle ich mir mit dem Wizard basierend auf einer View den Datenblock und das Layout und nachher schalte ich das Ganze auf die Pipelined Table Function in einer Select-From Query um.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzE3zHrLaifCJkzYot4xsIIiNHNJrPRNJ0DcmcrMaiepVCVpXCvkyT7Jp-_EzKH1Elc8xb5REw1lWrNAyy6l9IIX5yfzjfh4zeA8MC19r0TvEyPcFDK0kthRihr56u2PXWU8Y_RRWddjvt/s1600/Unbenannt3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="708" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzE3zHrLaifCJkzYot4xsIIiNHNJrPRNJ0DcmcrMaiepVCVpXCvkyT7Jp-_EzKH1Elc8xb5REw1lWrNAyy6l9IIX5yfzjfh4zeA8MC19r0TvEyPcFDK0kthRihr56u2PXWU8Y_RRWddjvt/s640/Unbenannt3.JPG" width="640" /></a></div>
<br />
Am Ende dann die fertige Maske, die übrigens mit Forms 10g erstell wurde. Es geht also recht einfach, auch neue Features der Datenbank in Forms zu nutzen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixl_63QH7KaZCXnYRzawWOdKJU1YONKhOzAAvRwpjf2xRnPp98ekWXfOuUUGSLbISYb0bxAkn6OhP4VmSOprRHsalBcumwRqOyHX6y5jq0vOfQvOQcAgYFig-CwN9v7gaYt98XBfexLzlA/s1600/Unbenannt4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="577" data-original-width="1147" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixl_63QH7KaZCXnYRzawWOdKJU1YONKhOzAAvRwpjf2xRnPp98ekWXfOuUUGSLbISYb0bxAkn6OhP4VmSOprRHsalBcumwRqOyHX6y5jq0vOfQvOQcAgYFig-CwN9v7gaYt98XBfexLzlA/s640/Unbenannt4.JPG" width="640" /></a></div>
<br />
Übrigens kann ich das o.g. Package nicht in Forms erstellen, es muß auf der Datenbank sein. Auch in Forms 12c geht das nicht, da wird die Pipelined Table Function noch nicht von der Engine verstanden. Aber das gehört ja auch eher als API in die Datenbank finde ich.<br />
<br />
Ob ich den konstanten Parameter 50 auch noch auf ein referenziertes Item beispielsweise eines anderen Forms-Blocks umbauen kann, habe ich noch nicht probiert. Es scheint aber nicht zu funktionieren, siehe <a href="https://community.oracle.com/thread/576588" target="_blank">Thread </a>im Forum.<br />
<br />
Dort wird als Lösung die Nutzung einer Package-Variable bzw. eines Sys-Kontextes vorgeschlagen:<br />
<pre><i>AND d.deptno = SYS_CONTEXT ('from_clause_context', 'deptno')</i></pre>
<br />
Was aber auch geht, ist die Benutzung fester Werte mit Variablen in der Zuweisung.<br />
<br />
asQuery_V := 'TABLE(Package.TableFunction('||Variable_1_V||',' ||Variable_2_V||'))'; <br />
set_block_property('BLOCK', QUERY_DATA_SOURCE_NAME, asQuery_V);<br />
<br />
Viele Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com1tag:blogger.com,1999:blog-1500582291514786380.post-57006337980996437522017-11-25T09:55:00.000+01:002017-11-25T09:55:53.730+01:00Mein persönlicher Rückblick auf die #DOAG2017Nach 5 jähriger Abstinenz von der DOAG Hauptkonferenz hatte ich endlich wieder das Vergnügen, dieses Jahr vom 20-23.11.2017 dorthin zu können. Die Anreise am Montag verlief leider dank der deutschen Bahn alles andere als glücklich (es gab 90 Minuten Verspätung) und so verpasste ich leider das #ACE Dinner, das Martin Klier angesetzt hatte.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfezByrNZPAKnnbbywV9l8l2NxtXfGWOyzPfG2aPnt_n7pEr_Ts0BSduzKwXcQscx2uvOvhLEfBXuTus8y7IOq2WrxShoPVYBwZZwoLGm2KfjYXPlSzL82JiMQE6kBI8h97tS7_Di1jVPn/s1600/2017-11-20+09.51.55.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfezByrNZPAKnnbbywV9l8l2NxtXfGWOyzPfG2aPnt_n7pEr_Ts0BSduzKwXcQscx2uvOvhLEfBXuTus8y7IOq2WrxShoPVYBwZZwoLGm2KfjYXPlSzL82JiMQE6kBI8h97tS7_Di1jVPn/s400/2017-11-20+09.51.55.jpg" width="400" /></a></div>
<br />
Im Vorfeld schon grob das Veranstaltungsprogramm mit den möglichen Sessions zusammengesucht, war ich ganz gut vorbereitet für den ganzen Marathon an Vorträgen. Dafür aber auch noch ein paar persönliche Gespräche angesetzt, mit ehemaligen Kollegen, mit Forms Gleichgesinnten und besonders mit Michael Ferrante, dem Oracle Forms Product Manager. Mein persönlicher Fokus bestand natürlich hauptsächlich auf Forms, SQL, PL/SQL, APEX, Weblogic und Docker Sessions und meine Erwartungen daran wurden auch erfüllt. Dazu später aber noch mehr.<br />
<br />
Der Dienstag stand ganz unter dem Zeichen von Forms Vorträgen, die Kollegen haben mich später gefragt, wo ich denn den ganzen Tag lang war. Meine Antwort: von einer Session zur nächsten. :-) Die Referenten für Forms waren u.a. Mia Urman, Michael Ferrante, Jürgen Menge, Gerd Volberg. Am Abend gab es dann das Forms Community Meeting, das sehr gut besucht war. Dort konnten wir M. Ferrante alle Fragen stellen, die uns run um Oracle Forms beschäftigen. Teilweise sehr interessante Dinge, die hoffentlich noch kommen werden. Eins scheint unumstößlich: selbst Oracle Forms soll es angeblich in die Cloud schaffen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLI3BMS5vqwFrnNHb4HZPNKhrjZkedmkDzwR0ittM_lY-eoyS7NmJHlWSEKV86g7zN7tXiVClmVxFlYNk4vNCMc1BXz7oZquFeMrhF6TC0FxqAruTnZo5yUd8BcndgJJ-ZmCJQ_VsgB1sf/s1600/20171121_130035.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLI3BMS5vqwFrnNHb4HZPNKhrjZkedmkDzwR0ittM_lY-eoyS7NmJHlWSEKV86g7zN7tXiVClmVxFlYNk4vNCMc1BXz7oZquFeMrhF6TC0FxqAruTnZo5yUd8BcndgJJ-ZmCJQ_VsgB1sf/s400/20171121_130035.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGmASOFdpcfNaUruj2g4_qKmS1e-2r-flmQRnwH5s6wR65bnllrTbo4XKbm1N42lDSJJH08T9AmzMrjEbxz4ls80Ok0W7lWhCMuvgIuMylNYmZ9ys6p48qqWF8FxVAuvRdqd7fsCjIYtVW/s1600/DPJeU1IWAAAypXB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="960" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGmASOFdpcfNaUruj2g4_qKmS1e-2r-flmQRnwH5s6wR65bnllrTbo4XKbm1N42lDSJJH08T9AmzMrjEbxz4ls80Ok0W7lWhCMuvgIuMylNYmZ9ys6p48qqWF8FxVAuvRdqd7fsCjIYtVW/s400/DPJeU1IWAAAypXB.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3y7-GFLmzEuJELDOgEcsdaabmQC17eKmBr4g-3Mu3EEIWejQNGe-fckmuO3klKWDMeTN6eEWIRKndAm-iDKRQxPByx5OmYFgAGKiaxkdRrdcvMaPv23cxJBP_8SG8Xj4QoEzJEmfcVOnO/s1600/DPKVVw1WkAAsNQc.jpg+large.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="960" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3y7-GFLmzEuJELDOgEcsdaabmQC17eKmBr4g-3Mu3EEIWejQNGe-fckmuO3klKWDMeTN6eEWIRKndAm-iDKRQxPByx5OmYFgAGKiaxkdRrdcvMaPv23cxJBP_8SG8Xj4QoEzJEmfcVOnO/s400/DPKVVw1WkAAsNQc.jpg+large.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwUGXHbQawzB6a8dtPnpwyakpw_5UiDcBfan7q_MiJf8OGUeMfZsDWtBQvD07b1DcSr6ufVwHFhJIbeVXaHMp-Ld4WJCgQGTilXMA7egFub7BJhMiVrJNMdQE3c-sm-9D1gSr2bpfaW4fo/s1600/DPLEXD4WsAAbgRv.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="900" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwUGXHbQawzB6a8dtPnpwyakpw_5UiDcBfan7q_MiJf8OGUeMfZsDWtBQvD07b1DcSr6ufVwHFhJIbeVXaHMp-Ld4WJCgQGTilXMA7egFub7BJhMiVrJNMdQE3c-sm-9D1gSr2bpfaW4fo/s640/DPLEXD4WsAAbgRv.jpg" width="480" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhobO4M0U7jzLQ_0FI_mPOJQCFA_eYhQGe-org_hyphenhyphenim9pGLEjoybRlZMNJrCR0kh00lWQSmDpXwoCLpkWI1NDYZCP9zgZ55HI-SXaZLLJmkH9j0e5RP5IdTPRXLc9FU1FTqHL2aFQnVzJ8o/s1600/DPJGJsHWkAIsrKh.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1200" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhobO4M0U7jzLQ_0FI_mPOJQCFA_eYhQGe-org_hyphenhyphenim9pGLEjoybRlZMNJrCR0kh00lWQSmDpXwoCLpkWI1NDYZCP9zgZ55HI-SXaZLLJmkH9j0e5RP5IdTPRXLc9FU1FTqHL2aFQnVzJ8o/s400/DPJGJsHWkAIsrKh.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuKleMxGhv63oX8K-8yQ3yZbVfgAg4ec1ZdFmcXjqbQD34qHfb789Dw5mpix9N-UpbLG0VoDzN6aDySCMuPNZ1jcEBbQs0_W1-L6LpEEP4T0f7B_b7OMg7GKSymxCh5m2tHMs-vkHGlX0/s1600/DPKG1AHX4AA4kyJ.jpg+large.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="960" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuKleMxGhv63oX8K-8yQ3yZbVfgAg4ec1ZdFmcXjqbQD34qHfb789Dw5mpix9N-UpbLG0VoDzN6aDySCMuPNZ1jcEBbQs0_W1-L6LpEEP4T0f7B_b7OMg7GKSymxCh5m2tHMs-vkHGlX0/s400/DPKG1AHX4AA4kyJ.jpg+large.jpg" width="400" /></a></div>
<br />
Das war also der erste Tag, im Rückblick der spannendste für mich von den 3 Veranstaltungstagen. Abends ging es dann mit der DOAG DB Community in der Nürnberger Altstadt zum gemütlichen Ausklang.<br />
<br />
Am 2. Tag war ein Tag ohne Forms Vorträge, dafür gibt es ja genug andere Themen. Ganz oft gab es zumindest für mich viele interessante parallele Sessions, da war entscheiden angesagt. Wie immer ein ganz großes Angebot auf der DOAG. Ich meine gehört zu haben, dass die Hälfte aller Einreichungen an Vorträgen abgesagt werden musste. <br />
<ul>
<li>Ausfallsicherheit für den Weblogic Admin Server</li>
<li>Goldene Regeln für schlechte Programmierung</li>
<li>intelligente Chatbots</li>
<li>SQL Magic</li>
<li>APEX REST Services in 5.2</li>
<li>PL/SQL API </li>
<li>Docker for Dummies</li>
</ul>
Und schon war der letzte Tag da, der Donnerstag. Das war ein gemischter Tag, den ich mit ein paar Vorträgen und vielen Gesprächen verbracht habe. Highlight des Tages waren u.a. der persönliche Talk mit einem umkomplizierten Michael Ferrante und einem Vortrag von Adam Lukaszewski zum Thema Boost your Forms Development with GIT and Forms API Master. Dabei wurde schon gezeigt, wie man mit Hilfe von Git, dem Forms API Master und dem Mergetool parallel an Forms Objekten entwickeln kann, auch mit mehreren Branches. Das kannte ich so bisher auch noch nicht, denn sonst hieß es ja immer, Mergen von binären Objekten geht nicht.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEganDgUVYRf1VC8ag6IYktWo9nXNRQpQJmGHWS4v0Vn9sLaD6FbUTgPQfwOfsEDF0d0uKQWNEBpvdf8G0nUV3N6P_qo6A4pnEzEZZ2d3wTD9sR8i67gYnoBUQmr0F16x4KwfdlKEIAgsMGj/s1600/2017-11-23+10.31.03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEganDgUVYRf1VC8ag6IYktWo9nXNRQpQJmGHWS4v0Vn9sLaD6FbUTgPQfwOfsEDF0d0uKQWNEBpvdf8G0nUV3N6P_qo6A4pnEzEZZ2d3wTD9sR8i67gYnoBUQmr0F16x4KwfdlKEIAgsMGj/s400/2017-11-23+10.31.03.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2_POwWosNi6O_EHOW03DDW0TqU5AKTIWMvY-7nF_fY3e6GmsSVmMdS4GQtVsyMwxJqIaJ6wuJHUo_syOeWHWmRj6DFLAJKzU6dOWebsO069aU27OtC83u5jWhVrP5QdZy8X8GxPo4GzB/s1600/DPTrty0W0AAT4iC.jpg+large.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2_POwWosNi6O_EHOW03DDW0TqU5AKTIWMvY-7nF_fY3e6GmsSVmMdS4GQtVsyMwxJqIaJ6wuJHUo_syOeWHWmRj6DFLAJKzU6dOWebsO069aU27OtC83u5jWhVrP5QdZy8X8GxPo4GzB/s400/DPTrty0W0AAT4iC.jpg+large.jpg" width="400" /></a></div>
<br />
Was soll ich sagen? Es waren tolle informative Tage in Nürnberg, mit gutem Austausch und neuen Erfahrungen. Neue Türen geöffnet und viele bekannte Gesichter gesehen und gesprochen. Wenn mich jemand fragt, würde ich sagen: es hat sich total gelohnt. Vielen Dank natürlich an die DOAG für die tolle Vorbereitung und Planung und an meinen Arbeitgeber, der mir das ermöglichte. Nächstes Jahr bin ich hoffentlich auch selber wieder mit einem Vortrag dabei. Ganz persönlich fand ich auch die Leute von Oracle sehr angenehm und menschlich. Ein paar Bilder für diesen Beitrag habe ich von anderen Twitteren genommen, ich hoffe das ist ok.<br />
<br />
Viele Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-84350278420897921662017-07-03T16:13:00.000+02:002017-07-03T16:13:46.300+02:00Eine kleine aber feine Falle bei boot.properties im Weblogic ServerDiesmal möchte ich über eine kleine aber feine Falle bei der Datei boot.properties im Weblogic Server berichten. Wenn man das Verhalten kennt, wird man darüber sicher schmunzeln.<br />
<br />
Im Rahmen der Vorbereitung einer Schulung installieren wir den Weblogic Server inkl. Forms und Reports. Und um den Start zu vereinfachen, gibt es Methoden, eine Datei namens boot.properties zu haben, um ohne Eingabe der Credentials die entsprechenden Managed und Admin Server zu starten.<br />
<br />
Das Template für die Datei boot.properties sah so bei uns aus:<br />
<i>Username=weblogic<br />Password=welcome1 </i><br />
<br />
Sieht doch eigentlich ganz gut aus denkt man. Trotzdem kommt beim Start eines Server das folgende Fenster:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVtVenVpTg_GnsKhY6BryxcuLbtXHbLsvgGZje03UU-SXAsWUy4S3Nh1XOInDFqQXzXUTgRP2qDBE6mKswb2G_YgezCDptSa9_RazpndrgujhAbcCFJNoNgWUz11L8jPSJxQYBVdIC8DLe/s1600/weblogic1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="246" data-original-width="834" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVtVenVpTg_GnsKhY6BryxcuLbtXHbLsvgGZje03UU-SXAsWUy4S3Nh1XOInDFqQXzXUTgRP2qDBE6mKswb2G_YgezCDptSa9_RazpndrgujhAbcCFJNoNgWUz11L8jPSJxQYBVdIC8DLe/s640/weblogic1.JPG" width="640" /></a></div>
<i> </i><br />
Merkwürdig, genau das wollten wir doch aber vermeiden und uns das Leben erleichtern. Ok, eine Ahnung macht sich im Kopf breit und mal flugs bei <a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/15-BootProp--4471/bootproperties.htm" target="_blank">Oracle</a> geschaut. Selbst dort ist die Schreibweise lowercase.<br />
<br />
Also neuer Versuch mit kleiner Schreibweise:<br />
<i>username=weblogic<br />password=welcome1</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTAsr7TFYLdx-nOFNexTYtyPP6hxKG_gFh86xB7H9AVd6OFVlpGKNgqPPWLhdCFGjcir5HB8oBB5AXklSjFa7IGUO8Gs0EVRcM0cHYp5amaNldrFWvw17Z04KU-nO7efihK5XNa3B6GZAK/s1600/weblogi2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="380" data-original-width="838" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTAsr7TFYLdx-nOFNexTYtyPP6hxKG_gFh86xB7H9AVd6OFVlpGKNgqPPWLhdCFGjcir5HB8oBB5AXklSjFa7IGUO8Gs0EVRcM0cHYp5amaNldrFWvw17Z04KU-nO7efihK5XNa3B6GZAK/s640/weblogi2.JPG" width="640" /></a></div>
<br />
Noch als Zusatzinfo: wir arbeiten auf Windows, da hätte ich nicht mit so einer Eigenart gerechnet. Und wir fragten uns schon, wieso wird die Datei nicht berücksichtigt. Jetzt sind wir wieder etwas schlauer und ich habe direkt zu dem Kollegen gesagt, da wird ein Blog draus.<br />
<br />
Viele Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-20924137607766138312017-06-27T14:12:00.001+02:002017-06-27T14:12:09.621+02:00Wie verändere ich das Icon meiner Applikation in Forms 12c ?Heute habe ich die Frage im Oracle <a href="https://community.oracle.com/thread/4058160" target="_blank">Forum</a> gesehen, wie man das Icon einer Applikation in Forms 12c verändert ? Das nehme ich zum Anlass, das Vorgehen etwas genauer zu beschreiben.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEOAH5n9mdo6cNHX-aaWNeqztM88TrHGX9w1lA8BnUiemnfuLYlEapz9qN8T-kpNbnnu37wF8i5pMJOdkyTmW0rnHtCR1rtmvwAZEzwxSN6Udz3xj-Ie-9keegf7ec0CafIUCPWKES8hKQ/s1600/delete.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="34" data-original-width="32" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEOAH5n9mdo6cNHX-aaWNeqztM88TrHGX9w1lA8BnUiemnfuLYlEapz9qN8T-kpNbnnu37wF8i5pMJOdkyTmW0rnHtCR1rtmvwAZEzwxSN6Udz3xj-Ie-9keegf7ec0CafIUCPWKES8hKQ/s1600/delete.gif" /></a></div>
Das es mit Webutil realisiert ist, wird es auch sicher schon in vorherigen Versionen funktionieren. Ich möchte also das Standard-Icon von Java gegen ein rotes Kreuz bei mir austauschen.<br />
<br />
<br />
Wichtigstes Stück Programmcode ist folgender Aufruf aus der Webutil-Bibliothek:<br />
<i>WebUtil_SeparateFrame.SetIcon('provision_delete.gif'); </i><br />
<br />
Das Icon habe ich der Einfachheit halber in einen Ordner kopiert, der von Forms aus direkt erreichbar ist: %MIDDLEWARE_HOME/forms/java%<br />
<br />
Damit der ganze Spass auch funktioniert, muß in der Konfiguration separateFrame=true gesetzt sein,<br />
sonst passiert über den obigen Aufruf gar nichts.<br />
<br />
Hier der Screenshot ohne Änderung:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3BR5VRoEkZr6449YOFveKOZs3e0mAkKaO1qS1bR_cNVdZRZ4bfPjN9AgWeTJFJ0hpphl5YYv1dAbk9KBGQyA8Anc17ay5TRXXMhttDLC-tZ_hFtTFWu1iERew5WpJ5gh2iul-JvG2ZulW/s1600/ohne.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="625" data-original-width="910" height="435" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3BR5VRoEkZr6449YOFveKOZs3e0mAkKaO1qS1bR_cNVdZRZ4bfPjN9AgWeTJFJ0hpphl5YYv1dAbk9KBGQyA8Anc17ay5TRXXMhttDLC-tZ_hFtTFWu1iERew5WpJ5gh2iul-JvG2ZulW/s640/ohne.JPG" width="640" /></a></div>
<br />
<br />
<br />
<br />
Hier der Screenshot mit Änderung:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM0bHxUN9YcSDPSC5KIdJ2vAz3e6i1ps09M7rPHJ_Ro18t1Np6n1ZvAuF0ICYrRTyRTq2PYv918poMRWxh_-3GGl80ePHWwVNyUFRqOsyV1jI1gdWFhXljB7LaN9aFaUY4gL0VzhYdys4M/s1600/mit.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="905" height="441" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM0bHxUN9YcSDPSC5KIdJ2vAz3e6i1ps09M7rPHJ_Ro18t1Np6n1ZvAuF0ICYrRTyRTq2PYv918poMRWxh_-3GGl80ePHWwVNyUFRqOsyV1jI1gdWFhXljB7LaN9aFaUY4gL0VzhYdys4M/s640/mit.JPG" width="640" /></a></div>
<br />
Sogar in der Taskleiste sieht man die Applikation mit dem geänderten Icon:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnmTrGz2huJkTaxr7kZkfYejHxR9VGZ-bwQsQLJR-bOHBwCVUQzSe9MkEDWUiuX-puOyKrD3Fk7RtBFMu4wzRAGkDbo8qQEWchQ21PPZLgDqOL5msObG7VMfKQiwSyQo0GtVFR1IeR10O9/s1600/taskleiste.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="120" data-original-width="362" height="105" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnmTrGz2huJkTaxr7kZkfYejHxR9VGZ-bwQsQLJR-bOHBwCVUQzSe9MkEDWUiuX-puOyKrD3Fk7RtBFMu4wzRAGkDbo8qQEWchQ21PPZLgDqOL5msObG7VMfKQiwSyQo0GtVFR1IeR10O9/s320/taskleiste.JPG" width="320" /></a></div>
<br />
<br />
Und hier noch die Konfiguration aus der formsweb.cfg für den Standalone Launcher:<br />
[my_webutiltstandalone]<br />form=my_webutil_demo.fmx<br />separateFrame=true<br />WebUtilArchive=frmwebutil.jar,jacob.jar<br />WebUtilLogging=off<br />WebUtilLoggingDetail=normal<br />WebUtilErrorMode=Alert<br />WebUtilDispatchMonitorInterval=5<br />WebUtilTrustInternal=true<br />WebUtilMaxTransferSize=16384<br />baseSAAfile=webutilsaa.txt<br />fsalcheck=true<br />baseSAAfile=basesaa.txt <br />
<br />
So viel für heute, viel Spass beim Ausprobieren wünscht<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-59941117144816354352017-04-28T16:28:00.000+02:002017-04-29T20:42:59.830+02:00Forms 12c und FRM-91135 auf Linux - wenn der Forms Builder nicht aufgehtHallo zusammen,<br />
<br />
heute möchte ich über die Lösung des Incidents FRM-91135 auf Linux berichten. Die komplette Weblogic Suite inkl. Forms und Reports ist installiert und läuft. Nur der Forms Builder geht nicht auf und sagt frech:<br />
<br />
<span lang="en"><b>FRM</b><b>-91135: fatal error: message file FMC <language> .msb </b><b>not found</b></span><br />
<br />
<span lang="en">Das Thema hatte ein Kollege auch neulich von mir, aber auch noch nichts gefunden. Und was ist der einfache Grund? Das Oracle Home ist nicht richtig gesetzt. Das kommt daher, dass auf der gleichen VM noch die Datenbank für das Repository installiert ist.</span><br />
<span lang="en"><b> </b></span><br />
<span lang="en">Vorher ist das ORACLE_HOME: ORACLE_HOME=/u01/app/oracle/product/12.2/db_1</span><br />
<span lang="en"><b><br /></b></span>
<span lang="en">Also setzen wir das ORACLE_HOME doch mal richtig:</span><br />
<span lang="en">export ORACLE_HOME=/home/oracle/Oracle/Middleware/Oracle_Home</span><br />
<span lang="en"><b><br /></b></span>
<span lang="en">und dann rufen wir den Forms Builder auf im Ordner: /home/oracle/user_projects/domains/forms_domain/config/fmwconfig/components/FORMS/instances/forms1/bin</span><br />
<span lang="en"><br /></span>
<span lang="en">./frmbld.sh &</span><br />
<span lang="en"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLFcX0PI_Ek7fpIjiTGdvaSi-LsYNiKQqsOmsty-WiuyxLdY1IIE6-p2gGbeAAfdx0lGo44v8srJWmr0DbGka_Ve5OQqPtz869QMNqmz8rsKHLLVT7JeDoxydNhsPno5pGDB8qhgpzY1pg/s1600/Unbenannt5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLFcX0PI_Ek7fpIjiTGdvaSi-LsYNiKQqsOmsty-WiuyxLdY1IIE6-p2gGbeAAfdx0lGo44v8srJWmr0DbGka_Ve5OQqPtz869QMNqmz8rsKHLLVT7JeDoxydNhsPno5pGDB8qhgpzY1pg/s640/Unbenannt5.JPG" width="640" /></a></div>
<span lang="en"><br /></span>
<span lang="en">Ja prima und dann funktioniert es endlich, wie schön.</span><br />
<span lang="en"><br /></span>
<span lang="en">Viele Grüße</span><br />
<span lang="en">Holger</span>Holger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-37568663851068785802017-03-20T15:20:00.004+01:002017-03-20T15:23:30.959+01:00Forms - mit PL/SQL alle Datensätze eines Blocks in eine PL/SQL-Tabelle ladenWährend meines jetzigen Projektes hatte ich schon öfter folgende Aufgabe zu lösen: wie bekomme ich denn alle Records eines Datenblocks in eine PL/SQL-Tabelle ? Um damit z.B. andere Berechnungen durchzuführen, Plausibilitäten darüber laufen zu lassen oder andere Listen zu füllen.<br />
<br />
Nachdem ich das ein paar Mal gemacht habe, wollte ich mein Vorgehen dabei zum Besten geben.<br />
Wenn man den gesamten Code noch in ein Forms-Package steckt, ist die PL/SQL-Tabelle auch von anderen Codestellen anzusprechen und zu benutzen.<br />
<br />
Dafür bastel ich mehr zu allererst einen Record, mit allen Feldern, die ich brauche und darauf basierend eine PL/SQL-Tabelle und eine konkrete Instanz der entsprechenden Speicherstruktur:<br />
<br />
TYPE mein_Record_T IS RECORD (<br />
Feld1 VARCHAR2(250),<br />
Feld2 NUMBER := 0,<br />
Feld3 VARCHAR2(5)<br />
);<br />
<br />
TYPE meine_PLSQLTabelle_T IS TABLE OF mein_Record_T INDEX BY PLS_INTEGER;<br />
<br />
meineKonkrete_PLSQLTabelle meine_PLSQLTabelle_T;<br />
<br />
Und nun kann ich alle Datensätze des Blocks durchlaufen und in der Objekt-Struktur abspeichern:<br />
<br />
PROCEDURE Fuelle_meine_PLSQLTabelle(meinBlock_I IN VARCHAR2) IS<br />
meinIndex_V NUMBER; <br />
BEGIN<br />
GO_BLOCK(meinBlock_I);<br />
FIRST_RECORD;<br />
LOOP<br />
meinIndex_V := meineKonkrete_PLSQLTabelle.COUNT;<br />
<br />
IF TRIM(NAME_IN(meinBlock_I || '.Feld1')) IS NOT NULL THEN<br />
meineKonkrete_PLSQLTabelle(meinIndex_V).Feld1 := NAME_IN(meinBlock_I || '.Feld1');<br />
meineKonkrete_PLSQLTabelle(meinIndex_V).Feld2 := NAME_IN(meinBlock_I || '.Feld2');<br />
meineKonkrete_PLSQLTabelle(meinIndex_V).Feld3 := NAME_IN(meinBlock_I || '.Feld3');<br />
END IF;<br />
<br />
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';<br />
NEXT_RECORD; <br />
END LOOP; <br />
END Fuelle_meine_PLSQLTabelle;<br />
<br />
Dieses Konstrukt konnte ich nun schon ein paar Mal gebrauchen, um mir das Leben mit Daten aus den Datenblöcken zu vereinfachen. Denn ich musste immer alle Daten haben, um damit z.B. andere Daten bewerten zu können. Wenn natürlich die Datenblöcke viele Daten enthalten, dauert der ganze Fetch entsprechend länger. Davon ist meine Maske aber nicht betroffen, und so helfen diese paar Zeilen Code mir ungemein.<br />
<br />
Schöne Grüße<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0tag:blogger.com,1999:blog-1500582291514786380.post-23846209625909784402017-03-01T19:58:00.001+01:002017-03-01T21:58:23.968+01:00Forms 12c - neue Erkenntnisse mit JNLP und dem Standalone LauncherHallo zusammen,<br />
<br />
die letzten Tage und Wochen haben wieder neue Erkenntnisse mit den neuen Forms 12c Deployment Optionen gebracht, die es wert sind veröffentlicht zu werden. Ein Community Mitglied hat gesagt, das zeigt die Abgrenzung zwischen Webstart und der Standalone Methode. Von ihm habe ich auch den Lösungshinweis bekommen, wie man mit Webstart verschiedene Zertifikatsquellen einbindet und verarbeitet.<br />
<br />
Die erste große Erkenntnis ist: Standalone läßt die Ausführung nicht signierter Jar-Files zu, ob das ein Bug ist, müßte man Michael Ferrante bzw. den Oracle Support fragen. Diese Vermutung bestand seit gestern nach mehreren Fach-Gesprächen über Forms und Java mit dem Community Mitglied.<br />
<br />
Als Basis dient meine VM mit Forms 12.2.1.1.0 und bestehenden Sample-Aufrufen. Dafür habe ich aus einem Jar-File die Signatur entfernt.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcbmO5E9tmwK3oXEi_zGpx418BR3PBMH4WU68zRtPqy_bdJSi9fv8XEdE-OGJdA2s0SOdmuTmS3C_glFbZgIJkA0E9cLfsQFGLdpOe22wjwxJX_-qedsX7oMCTpJyyNGvTUonUetsXszN/s1600/Unbenannt5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcbmO5E9tmwK3oXEi_zGpx418BR3PBMH4WU68zRtPqy_bdJSi9fv8XEdE-OGJdA2s0SOdmuTmS3C_glFbZgIJkA0E9cLfsQFGLdpOe22wjwxJX_-qedsX7oMCTpJyyNGvTUonUetsXszN/s640/Unbenannt5.JPG" width="640" /></a></div>
<br />
Nach dem Austausch der Datei in der formsweb.cfg und dem Löschen des Java-Caches hat die Anwendung unerwartet dennnoch gestartet. Der Aufruf war so:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiERS9_Tq3GFcICNoZr7BT2oCioem55KkiiYeQxNPZ520LrqbWg-LIW0YVrdxYgfYg9I6mJSTpyviSDmiUG9AA8aJoja_TrINN8BRGbLClZZMKpMlGuHMwUOSQPY1WxoWnHsgl7gq9NcExS/s1600/Unbenannt6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="26" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiERS9_Tq3GFcICNoZr7BT2oCioem55KkiiYeQxNPZ520LrqbWg-LIW0YVrdxYgfYg9I6mJSTpyviSDmiUG9AA8aJoja_TrINN8BRGbLClZZMKpMlGuHMwUOSQPY1WxoWnHsgl7gq9NcExS/s640/Unbenannt6.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8uTdCAf8OY0ECoGPsCOO9Ko6Unhu52vSRLzIGVGcJaneG_dQebZOekYE-etw_ALi-Ljnw3J58Pooy78qTkXWmDoB5TGQMcrfcp2xR0-g9dPUT37QnK0vxPOHJM6hb0qFq5uXaqWsYHC1R/s1600/Unbenannt7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8uTdCAf8OY0ECoGPsCOO9Ko6Unhu52vSRLzIGVGcJaneG_dQebZOekYE-etw_ALi-Ljnw3J58Pooy78qTkXWmDoB5TGQMcrfcp2xR0-g9dPUT37QnK0vxPOHJM6hb0qFq5uXaqWsYHC1R/s640/Unbenannt7.JPG" width="640" /></a></div>
<br />
Beim Versuch aus der frmall.jar das Zertifikat zu entfernen, startet die Anwendung nicht mehr.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaPYPd6e6L6-PGLpg66SrMElxAf2ut7eftqd23t6ExufIqTcC9e_a7IbNXqS8wn3aroMt7Is7pL2nb9CgEYUAzw0BTLtnNFw4SDsrw83wYzMVLh9FxiThRUF6ErxulYx3iQN00R0K8sg68/s1600/Unbenannt9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="73" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaPYPd6e6L6-PGLpg66SrMElxAf2ut7eftqd23t6ExufIqTcC9e_a7IbNXqS8wn3aroMt7Is7pL2nb9CgEYUAzw0BTLtnNFw4SDsrw83wYzMVLh9FxiThRUF6ErxulYx3iQN00R0K8sg68/s640/Unbenannt9.JPG" width="640" /></a></div>
<br />
Diese Versuche laufen zwar nicht auf dem letzten offiziellen Patch, aber dort erwarte ich nichts anderes erstmal. Entweder ein Bug oder ein Feature mit Risiken, neben dem Problem das Cachings der Jar-Files also schon nicht unerheblich. Da macht Webstart doch bislang weniger Mühe.<br />
<br />
Zweites Thema des heutigen Postings ist auch direkt die WebstartVariante zum Starten, denn theoretisch hat man mindestens 2 verschiedene Zertifikate, wenn man neben den Standard Oracle Forms Jars auch selbstentwickelte, gekaufte oder freie Jars hat. Diese Dateien müssen dann ja zum Betrieb mit dem Weblogic mit einem offiziell gültigen Zertifikat ausgestattet sein und verschiedene Zertifikate lassen sich nicht zusammen in einer JNLP-Datei einbinden, da muss man doch tricksen.<br />
<br />
Der Trick ist recht einfach: pro Zertifikat von einer Trusted Certificate Authority muss eine JNLP-Datei existieren, die dann von der Haupt-JNLP Datei aufgerufen wird. Also bei 3 verschiedenen Zertifikaten auch 3 einzelne JNLP Dateien.<br />
<br />
Hier ein Beispiel einer Haupt-JNLP Datei, die auf andere JNLP-Dateien verweist:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT9hFXA0a7OiMt7KWRRY9oT0Wrg0Jet7e3n4C256_iPs-Jf88_pVc1citdoOcgCTjwxEEFBYlIZWvOfNT18z_QEqgTfU_cqG6yH-EHeLTe1G3dcCURGQXLUgqy3u-19dbRrNEmWX31TbR9/s1600/Unbenannt9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT9hFXA0a7OiMt7KWRRY9oT0Wrg0Jet7e3n4C256_iPs-Jf88_pVc1citdoOcgCTjwxEEFBYlIZWvOfNT18z_QEqgTfU_cqG6yH-EHeLTe1G3dcCURGQXLUgqy3u-19dbRrNEmWX31TbR9/s640/Unbenannt9.JPG" width="640" /></a></div>
<br />
Und hier ein Ausschnitt aus extensions_1.jnlp:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzKGscYCZ0lQjLJWgahHMiApdJSmr6IWzfwQolWZlNGKPylhWChL7_k8H_QgvMBrumXyx_LeBbGW5NQ0-y-PDhcjSh1G18PNYxFyCjIPB_mdEP15NX8argFbIl2-x9GeCarWZnPOpr1UEp/s1600/Unbenannt11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzKGscYCZ0lQjLJWgahHMiApdJSmr6IWzfwQolWZlNGKPylhWChL7_k8H_QgvMBrumXyx_LeBbGW5NQ0-y-PDhcjSh1G18PNYxFyCjIPB_mdEP15NX8argFbIl2-x9GeCarWZnPOpr1UEp/s640/Unbenannt11.JPG" width="640" /></a></div>
<br />
So lassen sich auf einfache Weise komplexe Strukturen verflachen und auf einzelne Dateien auslagern. Standardmäßig liegen die anderen JNLP-Dateien auch in /forms/java, das kann man aber sicher auch wieder auf andere Folder verbiegen.<br />
<br />
Gerade kam die Entwarnung von Frank Hoffmann und dem Test mit Version 12.2.1.2.0. Da ist es so, wie es sein soll und Standalone (fsal) bricht mit Fehler bei der Nicht-Signierung ab:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj794dmBpwfGrTwJfLsuqcWQA2fL9j5dKmVDzn-jYpahcr_c6uhn-kePgEJQde3LyEFGMOcPuTd2aMkCF-qqm25oshld1b5UxNDFXjiEGWgry_nneDl6TdHbANW0RfcXoivBpLVXw68OLR6/s1600/Unbenannt12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj794dmBpwfGrTwJfLsuqcWQA2fL9j5dKmVDzn-jYpahcr_c6uhn-kePgEJQde3LyEFGMOcPuTd2aMkCF-qqm25oshld1b5UxNDFXjiEGWgry_nneDl6TdHbANW0RfcXoivBpLVXw68OLR6/s400/Unbenannt12.JPG" width="400" /></a></div>
<br />
Puh, dann hat Oracle hier nachgebessert und alles ist hier wieder beim letzten Patch ok.<br />
<br />
Viel Spass beim Ausprobieren mit den neuen Deployment Optionen und vielleicht noch mehr Erenntnissen wünscht<br />
<br />
HolgerHolger Lehmannhttp://www.blogger.com/profile/09341184547449792659noreply@blogger.com0