Presentation Object Scanner

The purpose of the Presentation Object Scanner is to create the Repository used by the Presentation Object Security concept. The Repository is to be seen as the "map" over the client-server interaction in the system. This information could have been manually created, there are regular forms for managing the Repository that could have been used. However, to simplify this process, the Scan Tool scan assemblies for this information and insert it into the Repository (the database), thus avoiding a lot of manual work.

Contents

Scanning

The scanning is a two-step process.


The first step is to scan the source assemblies which are currently running the Application and store all found database objects in a build storage. This storage is allowed to contain redundant information due to performance issues. Therefore a second step is needed to remove redundancies and to transfer valid information to the actual repository.

The Scanner scans assemblies, and Reports will be automatically loaded in to the scanner. For any other client type, the presentation objects must be manually registered.

The Scanner will find most of the database objects. For more advanced client code constructions, there is a probability that the tool will not handle some client/server calls. The Scan Tool can create two different logs with warnings, one scan log and one transfer log. Examples of log entries are for instance when incomplete database objects have been skipped (scan log) or when a view not installed in the database has not been transferred to the repository (transfer log). The repository is used by application runtime and must contain all information about presentation objects and the database objects. The logs are a help to further increase the possibility of getting a 100% correct repository. It is important to verify the contents of the repository. The easiest way is to use the Solution Manager, grant the presentation object to a test role containing only this presentation object and verify that the user can use the whole interface. If a database object is missing, the security mechanism will throw an exception or the user will be unable to reach a certain function. Note that the user should be granted the test role and a role with the Foundation1 Runtime Grants, normally FND_ENDUSER. If any Presentation Object is missing or incomplete, information on how to solve this can be found in warnings or server side behavior in order to manually include or exclude Presentation Objects. (See also how to handle Global Presentation Object)

The first step in the scanning process is to select the component you want to scan.

When this is done you start the scan process by pressing the Start Scan link. For any warnings generated are logged in the Scan log, Warnings in the Scan Log.

Note: Presentation Object Scanner has been designed to scan with English ('en-US'). Login with English ('en-US') to IFS Application before Start scan.

 

Figure 1: Presentation object scanning window.

Click the View Scan Results link to view the results of the scan.

Different colors in the Scan Results window indicates more details on scanned assemblies.

Color Description

Green (IncludedInCompilation)

Indicates that the Object is valid for being added to the PO Repository. (Reports are always Green. frm, tbw and dlg are typical objects here)
DarkOliveGreen (DynamicIncludedInCompilation) Dynamic Object is valid for being added to the PO Repository. (Typically, a frm that is hosted in this component. But that will be added to a parent object hosted in another component dynamically.)

DarkGreen (IsGlobal)

 
This is the global object (ex:globalINVENT) and will be a part of the Repository.

Orange (CompiledIntoGlobal)

This is typically a class that is not a frame, for why it will be added to the global object (e.g. globalINVENT)

 

LightGray (Exclude)

 
Objects that are not valid PO objects or are temporary "shadow"/"dummy", acting as parent but hosted by other component, used to attach its dynamically defined PO.

 

Blue (UsedBy)

Object having its whole underlying PO structure “re-routed” to the parent object(s) that is defined in the UsedBy attribute.

Note: When reducing the number of Global Presentation Objects in large components having large number of entries under global<Component Name> and having to hover over each individual method/view in the list to find the origin of entries (control class) is time consuming. To make this process easy there are two RMB options available in the Scan Results window to easily find and use Origin of entries in the Global Presentation Objects.
    Copy to Clipboard
        Copies the selected PO info (for one PO only) to the Clipboard so you can copy/paste the information wherever you need.
    Export to CSV file...
        Exports the entire result (from the root level and down to the end) to a CSV file that you can open in e.g. Excel and arrange in the way you want.

When the scanning is finished, the information will be stored in the build storage. Transfer the data to the runtime repository by pressing the Transfer to Live Repository link. Until this step is performed the information will not be present in the runtime repository. A Transfer Log is created if some database objects could not be transferred to the repository. This occurs if a database object that the Scan Tool has found is not in the database. The three most common reasons for this are:

Note: Database object in a few packages in the framework will never be transferred to the repository. Their packages would cause internal deadlocks if administrated through the normal security administration since they themselves are involved in this administration. The packages concerned are: FND_USER_API, FND_SESSION_API, SECURITY_SYS, PRES_OBJECT_UTIL_API and PRES_OBJECT_GRANT_API. End user grants to these packages are handled in the script Foundation1 Runtime Grant.sql. Warnings about methods in these packages could thus be ignored here.

After the transfer it is recommended to verify the contents of the repository in the IFS/ Solution Manager/ Security/Permission Sets/ Presentation Objects (See Manage Presentation Objects )

Warnings in the Scan Log

The log generated can contain the following different types of warnings.

Warning Description
The Presentation Object frmDemoCompany lacked a description. The Scan Tool has generated the default description Demo Company instead. Since no description was found, Scan Tool generated a description based on the name of the Presentation Object. If this name is accepted, no change of the repository is necessary. However, this indicates that a description should be added to this form in the source file. It is the attribute "Text" that is missing for the Application Form.
An incomplete database object Demo_Company_API. was discovered for frmDemoCompany. Complete it and add it manually. Only part of the name of the database object has been found which indicates a code construction that the Scan Tool can not interpret. Change the construction in the source file and rescan or add the database object manually into the repository.
An incomplete dependency was found:  ---> frmDemoCompany The Scan Tool found a dependency, but it could not be resolved completely and was not added. The most common reason for this warning is that variables containing form names have been used instead of the actual form names as strings when calling functions. Investigate this manually and add the dependency to the repository if necessary or change the source code if possible and rescan.

Export

When the repository is verified you can create an export file (.ins) of the repository using the Export link in the scanner. Note that it is only the information in the runtime repository that will be a part of the export file and newly scanned objects has to be transferred from the build storage to the runtime repository before they will be included in an export.

Reset

The Reset link removes all Presentation Objects stored for the selected Component. Select No option to remove only the automatically (by the Scan Tool) created objects.

The above dialog will be followed by the below confirmation dialog where you can proceed with the reset or cancel the reset.

URL Parameters

URL Protocol: Ifswin:Ifs.Application.PresentationObject.Scanner

Parameters:

component = Which component (ex: appsrv)

Example: Ifswin:Ifs.Application.PresentationObject.Scanner?Component=ORDER

Server Side Behavior

After scanning the assemblies, all scanned database objects are stored in a build storage in pres_object_build_tab. Scanner will capture most of the database objects. Objects that are not scanned can be retrieved through changing source code. Even after changing the code, if still some objects are missing then it is suggested to use the decorations in FndPresentationObject class. As the final option user can manually handle pres objects. If there are any pres objects which needs to be added manually then those Presentation Objects can be included in PresObjectInclude.ins. If any of the Presentation Objects need to be removed then they can be included in PresObjectExclude.ins. These files need to be deployed to the database. It is suggested to minimize the including of Presentation Objects in PresObjectInclude.ins and PresObjectExclude.ins. These manually included Presentation Objects will be persisted to pres_object_include_tab, pres_object_include_sec_tab and pres_object_exclude_tab. If there are any dependencies between Presentation Objects they will be added to pres_object_dep_build_tab table.                 

After transferring to runtime repository <Component>PresObjectRepository.ins will be generated. These updates will be reflected in pres_object_tab and pres_object_sec_change_tab.

PresObjectInclude.ins and PresObjectExclude.ins  files need to be manually created for the components. Examples of these files can be found in FNDBAS component.

Note: There are annotations that can be used in the client file in order to control the scanner from the client side. see class FndPresentationObject for more details. Always Exclude and include annotations are prioritized before the PresObjectInclude.ins and PresObjectExclude.ins.

   

Global Presentation Object

A global Presentation Object is named global<Component> and contains database objects (methods and views) that the scanner process cannot identify to which presentation object it should belong. This is typically when the database objects are not located in a window class rather in a library file. The global Presentation Object is created only if such constructions are found. Therefore all components do not have a global Presentation Object.