This chapter covers the following topics:
This chapter includes customization and extension tasks to set up Oracle Knowledge Management.
The OA framework provides personalization functionality to the agent user interface. Personalization allows easy configuration of pages to match the business needs of different customers.
The following are examples of OA framework personalization:
If you want to hide the Platform field from Oracle Knowledge Management, you need to hide the corresponding Platform region on the pages that show it, including the View Solution page, Advanced Solution Search Criteria page, and the Update Solution page.
Similarly, you can hide or show the Using search option and the Search Related Solution button on Advanced Solution Search page.
In addition to the preceding examples, the OA framework provides flexibility in customization, such as:
Hiding or showing of items and regions.
Note: By default, the following are hidden fields: Solution Type and Using on the Advanced Solution Search Criteria page, Usage column in the Solution Result table on the Advanced Solution Search Result page. You can turn on these fields through personalization.
Reordering of items and regions.
Renaming of buttons, prompts, and column headers.
For example, you can:
Important Notes on Personalization
Following are important notes about using Personalization with Oracle Knowledge Management.
Refrain from hiding required items that do not have a default value. Also, you should not hide functionally required items. For example, hiding the Go button or Search button on Search page does not make sense.
Do not overwrite the Controller class.
Do not change the displayed number of records of table if the table is set to display 200 records. The intention of displaying such tables is to show all data at one time.
Restrictions on Personalization
The following is a list of restrictions for using personalization.
You cannot hide or modify the page title of the Solution Details page and the Statement Details page.
You cannot disable the link on the category bin of the Solution Details page.
The configuration of the Simple Search result layout uses a different mechanism than personalization. For more information, see Define Simple Search Repositories.
Configure with Function Instead of Personalization
You must configure the following items using function instead of personalization since they are security related:
Update, Edit, and Get Lock buttons on Solution Details page.
Create Solution button.
For more information, see Access Control.
The following are notes for personalizing attachments:
If you enable Enable Document Catalog for the attachment table, be aware that other users may be able to search for the attachments. You should verify the attachment category settings to ensure enforcement of security.
If you want to have different categories for your attachments, then you should personalize for the following pages: Create Solution, View Solution, Preview Solution, and Read-only View Solution to add the categories to the attachment table. Unless you do this consistently, you will not see the attachment added to a category, which is not in the attachment table for some other page.
Personalize by Setting FND: Personalization Region Link Enabled
You can personalize the following items by setting FND: Personalization Region Link Enabled:
Simple Search Result subordinate tab areas.
For more information on personalization, see Oracle Applications Framework Personalization Guide.
Main topics that help you manage simple searches include:
Create a Simple Search Custom Repository for a Service Provider
Define a Simple Search Custom Repository for a Service Provider
You can create new Simple Search custom repositories for service providers. If you want to create Simple Search repositories for service requestors, see Create a Simple Search Repository for a Service Requestor.
Note: The steps within this section are optional.
The following topics describe how to create new Simple Search custom repositories for service providers:
The following procedures describe how to create a new View Object to perform searches.
Steps
Create a new View Object (VO.xml) that includes the query to retrieve results from your new repository.
Create a new View Object implementation (VOImpl.java) that extends oracle.apps.cs.knowledge.solution.search.server.RepositoryStandard.
Example: UnifiedSearchSolutionsVOImpl.java
Implement the setParameter(HashMap) method of the VOImpl.
You should set all the mandatory parameters in your query in this method.
The HashMap stores the following search criteria:
KMSearchConstants.SEARCH_METHOD is the key for search method
KMSearchConstants.SEARCH_KEYWORD is the key for key word
KMSearchConstants.PRODUCT_ID is the key for inventory item ID
KMSearchConstants.PRODUCT_ORG_ID is the key for inventory item organization ID.
KMSearchConstants.CATEGORY_ID is the key for the current Solution Category ID.
Override executeQuery() if you want to customize the behavior of your VO before or after the query execution.
You need to invoke super.executeQuery() in your method.
Place VO.xml in the package under in $APPL_TOP/java.
Compile VOImpl.java and place the .class in the package under $APPL_TOP/java.
The following procedures describe how to create a new View Object (VO) to perform the count query. This VO gets the total number of records that match the search criteria.
Steps
Create a new View Object (CountVO.xml) that includes the query to retrieve the results count from your new repository.
Create a new View Object implementation (CountVOImpl.java) that extends oracle.apps.cs.knowledge.solution.search.server.RepositoryStandard.
Example: CountUnifiedSearchSolutionsVOImpl.java
Implement the setParameter(HashMap) method of CountVOImpl.
You should set all the mandatory parameters in your query in this method.
The HashMap stores the following search criteria:
KMSearchConstants.SEARCH_METHOD is the key for search method.
KMSearchConstants.SEARCH_KEYWORD is the key for key word.
KMSearchConstants.PRODUCT_ID is the key for inventory item ID.
KMSearchConstants.PRODUCT_ORG_ID is the key for inventory item organization ID.
KMSearchConstants.CATEGORY_ID is the key for the current Solution Category ID.
Override executeQuery() if you want to customize the behavior of your VO before or after the query execution.
You need to invoke super.executeQuery() in your method.
Place CountVO.xml in the package under in $APPL_TOP/java.
Compile CountVOImpl.java and place the .class in the package under $APPL_TOP/java.
The following procedures describe how to create a new JRAD region.
Steps
Create a new JRAD region in its own XML file.
Example: SolutionResultRN.xml
The style of the region should be defaultSingleColumn.
The UI components can reference the corresponding search VO.
Example: UnifiedSearchSolutionsVO
Import the JRAD region into the database using XMLImporter.
The following procedures describe how to create a new controller object for your region.
Steps
The Controller code (CO.java) can reference the corresponding search VO, for example, UnifiedSearchSolutionsVO.
Add logic to the processRequest() method to programmatically control the UI components of your region.
Add logic to the processFormRequest() method to process event from your region.
Compile CO.java and place the .class in the package under $APPL_TOP/java.
To add or remove service provider's Simple Search repositories, see Define a Simple Search Custom Repository for a Service Provider.
You can add or remove service provider repositories for use in Oracle Knowledge Management.
To define the repository, use the same steps that are presented in the Implementation Tasks chapter:
You can create new Simple Search repositories for service requestors. If you want to create Simple Search repositories for service providers, see Create a Simple Search Repository for a Service Provider.
Note: The steps within this section are optional.
Topics in this section include:
Terminology includes:
The SearchKeySet class represents the search queries. A search query specifies one or more search keys along with following optional qualifiers:
The plus sign (+) represents a required search key.
The negative sign (-) represents a search key to exclude.
A search string without any qualifier represents an optional key.
For example, key1 +key2 -key3 is a query, where key1 is optional, key2 is required, and key3 should be excluded.
An instance SearchKeySet contains parsed information for each type of search key.
SearchItem is an interface for any display program to display search results from various engines in a uniform fashion. Individual applications must implement this interface and can extend it for more advanced usage.
SearchResult is the class that represents the search results. It contains a vector of SearchItems. A search runs in batches. An instance of SearchResult represents one batch. It also contains information about the total size of the search result, the starting index, the search factory used to do the search and the search result heading, and any hints for searching.
SearchService is an abstract class that serves as the super class for all search service implementations. It is a template for developers to write search engines to fit in the Search Management mechanism, namely to work with the SearchManager. The SearchService runs in a separate thread. This class provides APIs for finding when to stop the search and to make the search results accessible to the SearchManager.
SearchManager is the core class that hooks up all of the preceding pieces together and performs the search operation. SearchManager provides the method for searching for a key in a given category. SearchManager also provides APIs for finding out all the categories from the application configuration and interfacing with FND_Lookup tables for registering new categories and retrieving them. Each category has a key, which the system uses for searching, and a corresponding value, which the system uses for display purposes.
SearchItem Interface: public interface oracle.apps.jtf.search.SearchItem
public int getPercentMatch();
Returns a number greater than zero and at most 100. This number represents the confidence level of the match.
public String getTitle();
Returns the name of the matching object to display.
public String getDescription();
Returns a short description of the matching object. This method is optional. Its result does not appear by default.
public String getLink();
Returns the hyperlink to access the matching object.
public Hashtable getCustomAttribVals();
Note that the SearchItem can hold application specific search item information as name value pairs in a hash table. Using this mechanism, each application can pass back custom information as part of the search result.
SearchService Class: public abstract class oracle.apps.jtf.search.SearchService
public abstract void search(String category, SearchKeySet query, int limit, int start, int batchSize, Hashtable extraSearchParams)
Searches and uses insert, setTotal, and setHint methods to send results to the calling thread.
Parameters:
category: The category key that the user chose. This is the key used in FND_LOOKUPS.
query: The query string that conforms to standard search engine syntax.
limit: The maximum number of objects to retrieve. The value -1 denotes no limit.
start: The zero-based index of the first item to retrieve. This value must be at least zero.
batchSize: The number of items to retrieve for display. This value must be greater than zero. The specification of limit, start, and batchSize allows the SearchManager to access cached results by the search engine, if caching is implemented.
protected final void insert(SearchItem s);
For each matched item found, the search service needs to create an instance of SearchItem and uses this method to make it accessible to the SearchManager.
public abstract String getName();
Returns the name to be published in the Searchable object directory. Each service implementation needs to implement this method.
public abstract String getUsage();
Returns usage info, such as special parameters. Each service implementation needs to implement this method.
SearchManager Class: public abstract class oracle.apps.jtf.search.SearchManager
public static Hashtable search(String category, String query, int start, int limit, Hashtable extraSearchParams);
Performs the following tasks:
For a given query string, the API parses a given query string to create an instance of SearchKeySet.
It finds out which search factory corresponds to the given category and creates an instance of the corresponding service.
It invokes the service instance search (as explained above) in a separate thread. The parameter batchSize is obtained from the application configuration property search.service.batchsize. The time-out value for each search thread is obtained from the property search.service.timeout (in ms).
It returns the search result in a hash table. The hash table contains the service name and corresponding instance of SearchResult. The instance of SearchResult itself has a vector of SearchItems on which the search service implementation invoked the insert method. For additional information, see SearchService.
If the category is SearchManager.ALL_ENGINES, then the search manager invokes search on the search factories specified in application configuration.
You must write the search service factory and the corresponding search service implementation. Each service factory corresponds to one or more search categories. The search service factory can be a standard class, such as the sample search factories in oracle.apps.jtf.devtest.services.SimpleSearchFactory. The difference is the creation of the service instance. The service implementation class must inherit from SearchService. It must implement the search method as described above under SearchService. For each matched item found, the search service needs to create an instance of SearchItem and use the insert method of the superclass to make it available to the SearchManager. Additionally, each service must implement the following, which are described further above:
public abstract String getName();
public abstract String getUsage();
The search service also must set the total number of items returned and the search result heading used for display purposes. Do this using the following methods of its superclass:
protected final void setTotal(int total)
public final void setResultHeading(String heading)
You can look at oracle.apps.jtf.devtest.services.SimpleSearch for sample search service implementation. Note that a service runs in a new thread. It shares its session with the main thread. Therefore, the restrictions of spanning a new thread applies to the search thread. For example, you cannot use the transaction service within the new service. To get a database connection, use oracle.apps.jtf.aom.transaction.TransactionScope.getNewConnection() rather than oracle.apps.jtf.aom.transaction.TransactionScope.getConnection(). Note that oracle.apps.jtf.search.SearchService provides the method protected final boolean timeToStop(), which you can use in the service implementation to find out whether the time that the SearchManager provided for service execution has expired.
You must register each search category in the FND_Lookup tables. Register them under the category IBU_SEARCH_CATEGORIES. SearchManager provides API's for registering a new category with FND tables. Each category consists of a category code (a parameter to the search service implementation that you use in application configuration) and the corresponding value (used for display purposes only).
Login
Oracle Applications Forms.
Responsibility
Application Developer
Prerequisites
Navigation
Application Developer > Application Object Library
All the search service factories for current application are registered with the property search.factories. The definition for this property is:
search.factories = <factory1 class name >;<factory2 class name>; …
For example:
search.factories = oracle.apps.jtf.devtest.services.ComplexSearchFactory;oracle.apps.jtf.devtest.services.SimpleSearchFactory
For each search factory, you must provide the following entries:
<factory class name>.desc = <factory descriptor>
// factory descriptor can be string, which is used to
// obtain the instance of the search service from the service manager, if needed
<factory class name>.categories = <cat fnd code1>;<cat fnd code 2>;….
where <cat fnd code> are the category codes as registered above.
For example:
service.oracle.apps.jtf.devtest.services.SimpleSearchFactory.desc = SimpleSearch.item
service.oracle.apps.jtf.devtest.services.SimpleSearchFactory.categories = bar;newbar
Login
System Administrator Console within the CRM Technology Foundation
Responsibility
CRM HTML Administration
Prerequisites
Navigation
Settings > System > Properties > Advanced
See Also
To add or remove Simple Search repositories for service requestors, see Define a Simple Search Repository for a Service Requestor.
You can add or remove repositories for service requestors for use in Oracle Knowledge Management.
Note: Before you can add a repository, verify that you have created a Simple Search repository for service requestors. For more information on creating service requestor repositories, see Create a Simple Search Repository for a Service Requestor.
Simple Search for a service requestor--also known as Basic Search--is built on the CRM Technology Foundation (JTT) technology stack.
Topics in this section include:
Login
JTF application
Responsibility
CRM HTML Administration
Navigation
System > Properties > Advanced
Steps
Choose the application IBU in the View LOV.
Find the search.factories key.
Add the following entry:
Sequence Value
<next seq> oracle.apps.cs.knowledge.oes.OesSearchFactory
Set the SES properties for the following:
EndPoint=
ProxyHost=
ProxyPort=
DataGroups=
In order for Knowledge Management search framework to pick up the SES repository during search, add the SES repository to the “Knowledge: Repositories to search across in simple search” profile at the iSupport application level (or responsibility level).
For example, if the profile value was originally SOLUTIONS,SOLUTION CATEGORIES,LIBRARY, then change this to: SOLUTIONS,SOLUTION CATEGORIES,LIBRARY,OES
Login to iSupport, navigate to the Support Tab, and perform a search. The SES repository should appear.
The following procedures describe how to remove a seeded repository from the Simple Search.
Login
Oracle Applications Forms
Responsibility
System Administrator
Prerequisites
None
Navigation
Profile > System...Find System Profile Values window
Steps
Look up the profile option Knowledge: Repositories to search across in simple search and remove the category of the repository at the appropriate level: Site, Application, Responsibility, or User.
For more information on profile options, see Set Up Profile Options.
Note: The category of the new repository is the value of the JTT property service.<classpath>.categories that you created when setting up the JTT QuickFind repository.
Bounce the Web server.