getSchema

getSchema(): Schema;

The getSchema method of the Application class returns a reference to the Schema object associated with the application; for example, when your application has multiple application objects when you are working with imported packages.

When working with imported packages, the getSchema method and the currentSchema system variable may not return the same value. In the following example, a schema called ImportingSchema imports a package from a schema called PackageSchema.

Compare the output from the code fragments from a non-imported method and from an imported package method.

// In a non-imported method
write "schema=" & app.getSchema.name;           // outputs "ImportingSchema"
write "schema=" & currentSchema.name;           // outputs "ImportingSchema"
// In an imported method
write "schema=" & app.getSchema.name;           // outputs "ImportingSchema"
write "schema=" & currentSchema.name;           // outputs "PackageSchema"

An exception is raised if the receiver of the getSchema method is not the application object of the schema context in which the code is executing. The application object changes as the process switches from one schema to another as a result of a call into a package.

The following method attempts to list all applications for a process. An exception is raised when the getSchema method is called and the appObj receiver references an application object other than that referenced by the app system variable.

listApplications();
vars
    appArray : ApplicationArray;
    appObj   : Application;
begin
    create appArray transient;
    process.getAllApps(appArray);
    // appArray contains the standard app object
    // and app objects for any imported packages
    foreach appObj in appArray do
        write "application=" & appObj.name;
        // next instruction raises an exception if appObj is not app
        write "schema=" & appObj.getSchema.name;
        write "schema=" & appObj.class.schema.name;
    endforeach;
epilog
    delete appArray;
end;

The exception can be avoided by not calling the getSchema method. Replace the call to appObj.getSchema.name with appObj.class.schema.name.