Oracle Apex: Is it possible to change the default schema at runtime? - oracle

We have an Apex application (version 20.1) and our users must be able to change the database schema at runtime via button click (preferably without logging in again).
Currently we are solving this by installing our application multiple times, once per schema.
We recently discovered the function apex_export.get_application. We intend to use this function to bring our frontend under version control (finally!). We would like to deploy our application directly from the exported files. Having a single application, we would not have to mess with the internal component ids from the exported files.
Is it possible to install the application once and change the default schema via Pl/SQL code? Thank you!

I don't think this can be done, but perhaps the following is a reasonable compromise
add all the schemas you need to support to the workspace schema list
Any SQL (and I do mean any) in your app would be prefixed with an application item, eg
Before: select * from my_table
After: select * from &my_schema..my_table
At login time (or when a user selects it) you modify the MY_SCHEMA application item
(I've not tried this...so test/tread carefully)

Related

Is it possible to validate all SQL expressions in application?

When importing project, there are a lot of bad table names referenced from application, which causes errors. I need to manually rename or create tables accordingly. It would be fine if i find all bad SQL expressions in application with simple few clicks.
How to validate all SQL expressions from pages content body, pages items, etc. to see at what places there are errors?
EDIT:
Here: Table SAMPLE$PROJECT_TASKS does not exist and was not find by Advisor.
Use Advisor. It is located in application's Utilities.
For example:
I created a table named brisime
then I created an interactive report based on that table (it worked OK)
went to SQL Workshop and dropped the table
interactive report doesn't work any more (of course it doesn't)
So, what does the Advisor say? I included only "Is valid SQL or PL/SQL code":
The result is then:
As expected; table doesn't exist, and Advisor found it.
[EDIT]
As of your comment that chart's series query isn't checked by the Advisor: I don't know why - maybe you should ask people who developed Apex (visit OTN Forums).
However, just for testing purposes, I created a page that has two regions:
chart
classic report
Both used the same table as a source. I then dropped the table and ran the page in Debug mode. It shows two separate debug identifiers
chart uses ajax plugin path
classic report uses show path
The Advisor says that report failed on "Is Valid SQL or PL/SQL Code" check, but nothing for the chart. Maybe it is about Ajax, i.e. it isn't checked. On the other hand, maybe it is not the reason, I really can't tell.

WEBUTILS in ORACLE form work fine, unless I try to use them on startup

I have an ORACLE 12c form which displays a list of files stored in the database. The form allows a user to import and export these files using webutils. It all works fine, but if I change the form to automatically export a file on startup (using exactly the same code as a user would use if they pressed the Export button, but without having the user to press anything), the form complains that it can't find webutils. What is causing this behaviour?
Since I posted this question, I ran across two sites which said that you can't call webutils via WNFI unless you use a timer. I am yet to try this at work, but it certainly sounds like the way to go.

Cognos session parameters usage

I have setup LDAP authentication and set up "custom properties" in cognos configuration to get a attribute i have defined in the LDAP entry.
For example this custom property is called ORG_NAME, how do i use this ORG_NAME in report studio as a parameter to filter on? I have seen online about mapping with Framework manager.. however the particular reports i am using access the database directly and DO NOT have a framework manager package associated with them, so i need to use the ORG_NAME without using FM....
You can use the same syntax you would use in FM. So, for example:
#sq($account.personalInfo.givenName)#
will return the first name, and so on.
If you feel some burning need to for user-written SQL, instead of using FM, you can include the macro as a query item in your "outer" query (that gets the results from your sql query, Query2 in the image below).

AppleScript application can't get rights in Accessibility

I'm having trouble with my own AppleScript applications and Accessibility in "Security & Privacy".
I've written an application called "open cubase" that I've granted accessibility rights. I used Apple's advice on how to prevent repeated re-authorization (http://support.apple.com/kb/HT5914). But now even when the application is listed and selected in the Accessibility list, it says that it doesn't have assistive access.
And when I'm using
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/Tcc.db 'SELECT * FROM access WHERE client LIKE "%%"'
to check what's going on, I can see this:
kTCCServiceAccessibility|com.atonus.open-cubase|0|1|0|??
Why is there ?? at the end of that? Is there anyone who would know how to resolve this?
I'm using OSX 10.9.2.
Update, based on feedback from the OP:
The OP's issue is not the use of property statements that normally cause an AppleScript-based application to self-modify the application bundle's embedded Contents/Resources/Scripts/main.scpt script file when property values change at runtime.
However, Apple's workaround at http://support.apple.com/kb/HT5914
IS specifically meant to address not requiring re-authorization as a result of this self-modification issue for a given version of an application.
is NOT meant to allow updating the app (changing its source code or resources) without re-authorization.
For security reasons there is NO way to grant one-time authorization to an app based on its bundle ID and then keep it authorized no matter how it changes (e.g., through updates).
You have two options:
Either: Re-authorize the application every time you update it.
After updating your app, go to System Preferences > Security & Privacy > Privacy > Accessibility and toggle the checkmark next to the list item representing your application (if you application isn't there, drag it there).
Note: With Apple's workaround in place - which for security reasons is NOT a good idea unless you truly need to use property statements that persist their values - it may be sufficient to re-sign the application - haven't verified that.
Or: Use a workaround - not recommended for security reasons:
Make your app an unchanging wrapper that loads the true script code at runtime from a location OUTSIDE the app bundle - that way, the app stays the same and doesn't require re-authorization even if the script file loaded at runtime changes.
Example: Say your true script code - involving code requiring assistive access - is stored as ~/Desktop.test.scpt; your wrapper application, once authorized, can then invoke that script with run script file ((path to home folder as text) & "Desktop:test.scpt")
I don't have a specific explanation, but a recommendation:
Do not use properties (e.g., property FNAME : "Input.txt") in your AppleScript-based applications: AppleScript persists these automatically (preserves their values between runs), but the feature is implemented awkwardly (the persisted values are written to the *.scpt file itself - this is what causes the repeated authorization problem) and flimsily (if you modify your application and save (the *.scpt file at the heart of the) application again, previously persistent values are lost).
If you stay away from properties, the problem with repeated authorization simply goes away (unless you update your application). You can roll your own persistence, e.g., via AppleScript's support for .plist (property-list) files (see the System Events dictionary).
You also won't need the workaround described in the linked support article (http://support.apple.com/kb/HT5914), which is also a plus, given that the workaround is based on opening up a security hole.
As for your specific question:
The ?? is the - unhelpful - representation of the csreq columnn value from the TCC.db database and is not a problem per se; OSX manages that column behind the scenes; it contains a fingerprint of sorts identifying the application in its specific current form (similar to an MD5 hash, though I have no idea what is actually being used), so as to be able to detect tampering later.
However, I suspect you may be looking at the wrong database entry:
I'm puzzled by your bundle ID being com.atonus.open-cubase: if your app is an AppleScript-based *.app bundle, its bundle ID would have the fixed prefix com.apple.ScriptEditor.id., e.g., com.apple.ScriptEditor.id.open-cubase. Did you manually modify the bundle ID via the bundle's Info.plist file, or am I missing something?
When the OS determines tampering/a change in an authorized application:
It resets the allowed column value to 0, i.e., revokes authorization
It resets the csreq column value to NULL.
Thus, after you've seen the ... is not allowed assistive access dialog, the database entry should be reported as kTCCServiceAccessibility|com.atonus.open-cubase|0|0|1| - note the changed Boolean flags and the absence of the ?? at the end.

custom Membership fields disappearing?

I have added a custom profile field named 'Relatiecode' to my user profile according to the SDN developer guide. I have entered a value via the sitecore User Manager. More specifically, I set it to '0000008' for the user extranet\coordinator8, and 0000001 for the user extranet\coordinator1, like this:
I have verified that this is also stored in the sql database
however, when I attempt to access the data in my asp.Net webform (sublayout, actually), the field appears to be empty for user 'coordinator8'. What really confuses me is that it seems to be working perfectly for user 'coordinator1'. See below:
I'm at a loss! What am I doing wrong? Thoughts?
sitecore version 6.5
Not the solution, but because of deadlines I decided to go with a makeshift solution... we're storing the fields in a custom SQL database now, and querying it with NHibernate.

Resources