@NPilot
Nothing here yet.
Nothing here yet.
No blogs yet.
Hello Joe. For a proper answer, I would need to write a new article. But for a quick answer to include the Stimulsoft Designer you need to Download js files from https://github.com/stimulsoft/Reports.JS Add stimulsoft.reports.js + stimulsoft.viewer.js + stimulsoft.designer.js to your APEX Page (File URLs) Declare 2 global variable : var designer = null; var report = null; Create an apex region with a empty div in the Source Text : <div id="my_report_designer"></div> Execute some javascript on Page Load to initialize the Designer //Activation with using license code (not needed for trial) //Stimulsoft.Base.StiLicense.Key = "Your activation code..."; // Create the report designer with default options designer = new Stimulsoft.Designer.StiDesigner(null, "Designer", false); // Show the report designer in div content designer.renderHtml("my_report_designer"); // Create a new report object report = new Stimulsoft.Report.StiReport(); // You can load a report template in the report object //report.loadFile("#APP_IMAGES#reports/gcc_emp.mrt"); //report.load(reportJSONTemplate); // Assign report object to report designer designer.report = report; // Write a function to save your report template designer.onSaveReport = function (args) { var jsonReport = args.report.saveToJsonString(); console.log("SAVING : "+jsonReport); }
Hi John, Great post. Thank you for sharing. I can see in APEX 22.1.1 that there are now 2 different paths. One for APEX Files and one for APP Files . This simplify the use of CDN for custom files JS/CSS/Etc... We don't need to specify the full path URLs everywhere, we can keep using #APP_FILES# ( I haven't tested yet )
Excellent Louis, Thanks for sharing this. Yes I think that for this case (CKEditor Image), this is the best solution (because of the simplicity). For other use cases, with a lot of file uploads by users, we definitely need to avoid the files handling by the database and send the files directly from the browser to the cloud storage...
Louis Moreaux Thank you Louis, Yes, I've followed all the steps, and it is working fine for OAuth2, but for some reasons, the ORDS does not authorize my requests with the "Apex-Session" header. Maybe a cookie issue... https://www.oracle.com/application-development/technologies/rest-data-services/listener-dev-guide.html Good news for your next post. Would be nice if the images could be sent directly from the client to OCI bucket without going through the database... this would save CPU & Bandwidth... Another challenge is to be able to automatically compress and resize the images on the client side before uploading to OCI... ;-)
Hi Louis, Thank you for this amazing blog. It is very helpful. ORDS Security Concerning the ORDS First Party Authentication ( Apex-Session ), do we need to setup something on ORDS for that to work ? I've spent a lot of time trying to make it working but for some reason ORDS always return 401 Unauthorized error. (I can see in the POST request of my browser the http header "apex-session" with the correct value but ORDS reject the request ). I've tried using a ORDS OAUTH2 Token and it works properly. Image Store Concerning the image storage, I'm not a big fan of storing blob inside the database. And I also think that there is a better approach to send the images to the storage location without using ORDS and overloading the database with blob handling. The idea is to send the image directly from the client browser to Google Cloud Storage (or another cloud storage). GCS provide JSON API to "Initiate a resumable upload session" which return a secure upload URL. We only need to define a PL/SQL Function to initiate an upload session on GCS using OAUTH2 to return an "upload url" to the client. That way, the GCS oauth token is not visible by the client, which is something we want to avoid to secure the bucket content. The challenge here is to be able to dynamically set the upload url of the "CKEditor Simple upload adaptor" by executing an AJAX Call to execute that PL/SQL function when the user pick an image... + Another challenge is the successful response that the "CKEditor Simple upload adapter" is waiting for : { "url":"....." } Maybe we would have to define a "Custom upload adapter" Best Regards Nicolas