This chapter explains how to set up Oracle Communications Billing and Revenue Management (BRM) Suspense Manager.
Before you read this document, you should be familiar with:
BRM system administration.
Pipeline Manager and how to set up pipeline modules. See these documents:
Editing pin.conf configuration files and using file loading utilities. See "Using Configuration Files to Connect and Configure Components" in BRM System Administrator's Guide.
The business decisions you make in the planning phase determine the details of your implementation in the configuration phase.
Table 22-1 shows the tasks required for configuring Suspense Manager:
Table 22-1 Tasks to Configure Suspense Manager
Task | Description |
---|---|
Plan and set up your database. See "Planning and Setting up Your Database for Suspense Manager". |
|
Create a list of editable fields. See "Creating a List of Editable Fields Based on Your /suspended_usage Subclasses". |
|
Load editable fields into the database. |
|
Change suspense reasons and subreasons (optional). |
|
Configure the pipeline for Suspense Manager. |
|
Configure SE or SB Loader. See "Setting Up Suspended Event (SE) Loader for Suspense Manager". See "Setting Up Suspended Batch (SB) Loader for Suspense Manager". |
|
Create indexes for search templates. |
|
Configure and customize Suspense Management Center. See "Configuring and Customizing Suspense Management Center". |
|
Configuring event notification for Suspense Manager. |
|
Configure debugging (optional). |
|
Configure the number of records to process in a transaction (optional). See "Configuring the Number of Suspended Records to Process in a Transaction". |
|
Important:
The planning process is critical to the successful operation of Suspense Manager. You will be making database schema changes during setup. Changing the database schema after you start using Suspense Manager requires a database upgrade that can be time consuming and painful. Be sure to follow the steps in this section carefully.The process of setting up your database involves these two steps:
Picking the EDR fields you will use to search for suspended EDRs (queryable fields). If the queryable fields your implementation requires are not in the default BRM objects, you need to create new objects subclasses for them.
Picking a list of fields that you will allow your personnel to edit. BRM assumes that this list is a subset of the default EDR fields and any new queryable fields. If not, then you will need to create new objects for them.
Once you have decided on these fields to add and/or edit in EDRs, you will then load the list into the BRM database. This will allow suspense Manager to access them.
Your business will require you to search for and analyze suspended call records (individual CDRs or CDR files). The first step in setting up Suspense Manager is to decide whether the default Suspense Manager storable classes meet your needs. The storable classes you use must contain the fields your business requires to search for the records you need, and analyze their problems. If not, you will need to modify, extend, or replace the default storable classes.
This is a list of EDR fields that you will use to search for and analyze call records. Suspense Management Center allows you to search for suspended calls based on values in these queryable fields, and displays these values in your search results.
Important:
After you specify and load the list of queryable fields into the database, modifying the list involves significant effort. Be sure to plan the list carefully.Each BRM implementation requires a different list. Making all of your EDR fields queryable degrades performance by using a lot of unnecessary database storage. However, you do need to make enough fields queryable as necessary to meet your business needs.
Start by reviewing the object specifications for the sample Suspense Manager storable classes listed below. If these storable classes contain all the information your business requires, you won't need to make any changes and you can skip the next section. If you need to expand or extend these classes, make a list of the fields you want to make queryable. You will use this list to define custom extensions to /suspended_usage object types in the next section.
Note:
You add one set of queryable fields representing one /suspended_usage subclass per pipeline. For example, for a single pipeline that accepts /suspended_usage/telco/gsm records, you can select queryable fields from the /suspended_usage/telco and /suspended_usage/telco/gsm subclasses. You cannot select queryable fields from /suspened_usage/telco/gprs, because it requires a separate pipeline./suspended_usage/telco
This storable class stores general wireless call record data in the fields listed in Table 22-2:
Table 22-2 /suspended_usage/telco Storable Class
Field | Description |
---|---|
PIN_FLD_BYTES_IN |
Volume of data sent. |
PIN_FLD_BYTES_OUT |
Volume of data received. |
PIN_FLD_CALLED_TO |
Phone number being called. |
PIN_FLD_CALLING_FROM |
Phone number the call originated from. |
PIN_FLD_CALL_DURATION |
Call time duration. |
PIN FLD PRIMARY MSID |
Primary MSID. |
PIN FLD SERVICE TYPE |
Basic service type. |
PIN_FLD_START_TIME |
Time the call was initiated. Note: The start time is not stored in UTC format. |
PIN_FLD_USAGE_TYPE |
Describes the call scenario, for example, customer-to-customer call, birthday call, closed-user-group call, or friends & family call. |
/suspended_usage/telco/gprs
This class stores call record data for generic GPRS (data) calls in the fields listed in Table 22-3:
Table 22-3 /suspended_usage/telco/gprs Storable Class
Field | Description |
---|---|
PIN_FLD_BYTES_IN |
Volume of data sent. |
PIN_FLD_BYTES_OUT |
Volume of data received. |
PIN_FLD_CALLED_TO |
Phone number being called. |
PIN_FLD_CALLING_FROM |
Phone number the call originated from. |
PIN_FLD_CALL_DURATION |
Call time duration. |
PIN FLD PRIMARY MSID |
Primary MSID. |
PIN FLD SERVICE TYPE |
Basic service type. |
PIN_FLD_START_TIME |
Time the call was initiated. Note: The start time is not stored in UTC format. |
PIN_FLD_USAGE_TYPE |
Describes the call scenario, for example, customer-to-customer call, birthday call, closed-user-group call, or friends & family call. |
PN_FLD_APN |
APN address. |
PIN_FLD_GGSN_ADDRESS |
GGSN address. |
PIN_FLD_NODE_ID |
Node ID. |
PIN_FLD_SECONDARY_MSID |
MSI number. |
PIN_FLD_SGSN_ADDRESS |
SGSN address. |
/suspended_usage/telco/gsm
This class stores call record data for generic GSM (voice) calls in the fields listed in Table 22-4:
Table 22-4 /suspended_usage/telco/gsm Storable Class
Field | Description |
---|---|
PIN_FLD_BYTES_IN |
Volume of data sent. |
PIN_FLD_BYTES_OUT |
Volume of data received. |
PIN_FLD_CALLED_TO |
Phone number being called. |
PIN_FLD_CALLING_FROM |
Phone number the call originated from. |
PIN_FLD_CALL_DURATION |
Call time duration. |
PIN FLD PRIMARY MSID |
Primary MSID. |
PIN FLD SERVICE TYPE |
Basic service type. |
PIN_FLD_START_TIME |
Time the call was initiated. Note: The start time is not stored in UTC format. |
PIN_FLD_USAGE_TYPE |
Describes the call scenario, for example, customer-to-customer call, birthday call, closed-user-group call, or friends & family call. |
PIN_FLD_CELL_ID |
Network cell ID where the call originated. |
PIN_FLD_DESTINATION_SID |
Destination MSC or switch ID. |
PIN_FLD_DIALED_NUMBER |
Number that was called. |
PIN_FLD_ORIGIN_SID |
Origin MSC or switch ID. |
PIN_FLD_SECONDARY_MSID |
IMSI field. |
All of the fields in subclasses of /suspended_usage are queryable.
Suspense Manager uses the /suspended_usage storable class to store failed call records in the BRM database. You must extend this class for each type of suspended call record that your business requires. Suspense Manager provides the /suspended_usage/telco, /suspended_usage/telco/gsm, and /suspended_usage/telco/gprs default subclasses to store data for suspended calls.
To add new types of call records to Suspense Manager:
Determine how to subclass /suspended_usage objects.
Create custom /suspended_usage objects.
Use the Storable Class Editor to add a subclass to /suspended_usage for each type of call record your business uses.
For more information, see "Creating Custom Fields And Storable Classes" in BRM Developer's Guide.
You use Suspense Management Center to correct these fields in failed EDRs, and then recycle and rate the calls.
Review these objects and create the list of fields you need to change to correct a failed call. All of the fields you added to /suspended_usage subclasses are eligible for editing. You can change this list any time by following the steps in "Loading Editable Fields into the Database".
To load your list of editable fields into the database for use by Suspense Management Center:
Review the list of fields you assembled in "Creating a List of Editable Fields Based on Your /suspended_usage Subclasses".
Add these fields to the BRM_Home/sys/data/config/pin_suspense_editable_flds file. BRM_Home is the directory where you installed BRM components.
Run the load_pin_suspense_editable_flds utility (located in BRM_Home/bin) to load the editable fields into the database:
%load_pin_suspense_editable_flds pin_suspense_editable_flds
For details, see "load_pin_suspense_editable_flds".
Suspense Manager adds the specific reasons for call failures to the EDRs it stores. These reasons, called suspense reasons, can be divided into more specific suspense subreasons. These suspense reasons and subreasons are stored in the call record along with the rest of the call record data. Because they are stored in the call records, you can search for them by using Suspense Management Center. For example, you can search for all the calls that could not be associated with a subscriber.
The Pipeline Manager error messages that actually cause call failures are mapped to these suspense reasons and subreasons. An extensive default error code-to-suspense reason mapping is provided in Suspense Manager. If your business requires different suspense reasons or subreasons, you can change them and their mappings. You can make these changes at any time, but because you may have to upgrade existing data, it is best to have this mapping in place before you go into production.
Each suspense reason covers a group of Pipeline Manager error codes. The strings that define these error messages are listed in the suspense_reason_code.en_US file (in the BRM_Home/sys/msgs/suspense_reason_code directory). These error code strings are mapped to Pipeline Manager error codes in the pin_suspense_reason_code file (in the BRM_Home/sys/data/config directory).
If you need to change the default mapping or add additional reasons or subreasons, continue with the instructions in "Changing the Suspense Reason and Subreason Lists" that describe the process. If the default suspense reasons and subreasons are appropriate for your business, then skip the rest of this section.
If the default error messages or error message mappings do not meet your business needs, follow the steps in this section to change them. You first edit the text file with your new suspense reasons and subreasons, and then load the mapping into the database.
Determine your new suspense reasons.
This is a list of the most common problems that cause calls to fail. It can be as extensive as you like. You can also look at these as categories of suspense reasons, because this is the first of two levels. For example, on this level you might use "Validation check failed," then use the next step to add more specific subreasons, such as "Call exceeds maximum time" or "Suspiciously long call."
Note:
Any Pipeline Manager error message without a suspense reason will use the default Pipeline Manager error message.Determine any new suspense subreasons.
Edit the BRM_Home/sys/msgs/suspense_reason_code.en_US file, adding suspense reasons as strings and mapping them to integers.
Sample entry for a suspense reason with the ID of 1:
STR ID = 1 ; VERSION = 1 ; STRING - "Unable to identify customer information" ; END
Sample entry for a suspense subreason for a suspense reason with the ID of 2:
DOMAIN = "suspense_subreason_1" ; STR ID = 2; VERSION = 1 ; STRING = "B number missing" ; END
Note:
The default string has an ID of 0. This string appears by default in the case of an error that is not mapped to a suspense reason.Important:
The reason code numbers 65535 and 65534 are reserved for use by BRM.The format of the suspense_reason_code.locale file is similar to that of the reasons.locale file.
Map your suspense reasons to Pipeline Manager error messages by editing the pin_suspense_reason_code (for CDRs) or pin_batch_suspense_reason_code (for CDR files) file in the BRM_Home/sys/data/config directory.
Excerpt from the default version of pin_suspense_reason_code:
#ErrorCodes SuspenseReason SuspenseSubReason # Default error (error that is not specified in this file) 00000 0 0 # Framework errors 00464 1 1 00479 1 1 00496 1 1 00497 1 1 00480 1 1 00481 1 1 00482 1 1 00208 9 0 00209 7 0
Load your localized strings into the database by using the load_localized_strings utility.
Important:
The load_localized_strings utility requires a configuration file to function correctly. For details, see "Creating Configuration Files for BRM Utilities" in BRM System Administrator's Guide.Example syntax:
%load_localized_strings suspense_reason_code.en_US
Note:
If you're loading a localized version of this file, use the correct file extension for your locale. For a list of file extensions, see "Locale Names" in BRM Developer's Guide.Load your suspense reason code mapping into the database by using the load_pin_suspense_reason_code or load_pin_batch_suspense_reason_code utility (in the BRM_Home/bin directory). For details, see "load_pin_suspense_reason_code" or "load_pin_batch_suspense_reason_code".
Important:
The load_pin_suspense_reason_code and load_pin_batch_suspense_reason_code utilities require configuration files to function correctly. For details, see "Creating Configuration Files for BRM Utilities" in BRM System Administrator's Guide.Example syntax for CDRs:
%load_pin_suspense_reason_code pin_suspense_reason_code
Example syntax for CDR files:
%load_pin_batch_suspense_reason_code pin_batch_suspense_reason_code
Verify that the strings were loaded by displaying the /strings objects using the Object Browser or the robj command with the testnap utility. See "Reading objects by using Object Browser" in BRM Developer's Guide for information on how to use Object Browser. See "Using Testnap" in BRM Developer's Guide for general instructions on using testnap.
Stop and restart the Connection Manager (CM). See "Starting and Stopping the BRM System" in BRM System Administrator's Guide.
Stop and restart Suspense Management Center.
Your suspense reason and subreason strings are now loaded into the BRM database to be displayed and used by Suspense Management Center.
The following Pipeline Manager configuration steps are required for Suspense Manager.
Follow the instructions in "Configuring Standard Recycling" for your initial Pipeline Manager setup. The Suspense Manager Pipeline Manager configuration builds on the steps used to create a standard recycling pipeline.
The following configuration steps are required to configure a rating pipeline.
You added FCT_PreSuspense as the first function module of the pipeline during standard recycling configuration. For details, see "Configuring Standard Recycling".
The FCT_PreSuspense registry requires additional configuration for Suspense Manager. This module requires information from the object class definition you created in "Adding /suspended_usage Subclasses with Queryable Fields".
The example FCT_PreSuspense registry below shows queryable fields for the /suspended_usage/telco, /suspended_usage/telco/gsm, and /suspended_usage/telco/gprs objects.
PreSuspense { ModuleName = FCT_PreSuspense Module { Active = True QueryableFields { # table name. If more than one table, use a separate block SUSP_USAGE_TELCO_INFO_T { # format : <database_column_name> = <edr_conatiner_field_name> BYTES_IN = DETAIL.VOLUME_RECEIVED BYTES_OUT = DETAIL.VOLUME_SENT CALLED_TO = DETAIL.B_NUMBER #CALLING_FROM = DETAIL.B_NUMBER CALL_DURATION = DETAIL.DURATION PRIMARY_MSID = DETAIL.A_NUMBER SERVICE_TYPE = DETAIL.BASIC_SERVICE START_TIME = DETAIL.CHARGING_START_TIMESTAMP USAGE_TYPE = DETAIL.USAGE_TYPE } SUSP_USAGE_TELCO_GPRS_INFO_T { # format : <database_column_name> = <edr_conatiner_field_name> APN = DETAIL.ASS_GPRS_EXT.APN_ADDRESS GGSN_ADDRESS = DETAIL.ASS_GPRS_EXT.GGSN_ADDRESS NODE_ID = DETAIL.ASS_GPRS_EXT.NODE_ID SECONDARY_MSID = DETAIL.ASS_GPRS_EXT.PORT_NUMBER SGSN_ADDRESS = DETAIL.ASS_GPRS_EXT.SGSN_ADDRESS } SUSP_USAGE_TELCO_GSM_INFO_T { APN = DETAIL.ASS_GSMW_EXT.APN_ADDRESS CELL_ID = DETAIL.ASS_GSMW_EXT.CELL_ID DESTINATION_SID = DETAIL.ASS_GSMW_EXT.TERMINATING_SWITCH_IDENTIFICATION DIALED_NUMBER = DETAIL.ASS_GSMW_EXT.DIALED_DIGITS ORIGIN_SID = DETAIL.ASS_GSMW_EXT.ORIGINATING_SWITCH_IDENTIFICATION SECONDARY_MSID = DETAIL.ASS_GSMW_EXT.PORT_NUMBER } } } }
For details on the syntax, see "FCT_PreSuspense".
Configure the suspense create output module as one of the output modules for this pipeline.
You can use the sample output module in "Configuring Standard Recycling" in a rating pipeline with one change. You need to change the EventType entry from /suspended_usage to /suspended_usage/type, where type is the subclass you created in "Adding /suspended_usage Subclasses with Queryable Fields".
This example shows the /suspended_usage/telco being used:
SuspenseCreateOutput { ModuleName = OUT_GenericStream EventType = /suspended_usage/telco ...
You configured a pre-recycling pipeline as part of standard recycling configuration.
The pre-recycling pipeline uses the INP_Recycle module. This module reads suspended usage records from the BRM database, restores original EDRs, applies edits to them, and pushes EDRs into the pre-recycling pipeline.
For Suspense Manager, the INP_Recycle module does the following:
Sets the process status to either recycling or test recycling, depending on the processing mode selected in Suspense Management Center.
Sets override reasons in the DETAIL.ASS_SUSPENSE_EDT.OVERRIDE_REASONS field, and the batch ID to DETAIL.ORIGINAL_BATCH_ID.
Provides feedback to DAT_Recycle about the status of recycling (commit, cancel, or rollback).
Takes the original batch ID (from a routing switch, mediation system, or other source) from the /suspended_usage object and copies it to DETAIL.ORIGINAL_BATCH_ID. This module also creates a new batch ID for each batch of recycled records, and set it in the HEADER.BATCH_ID and DETAIL.BATCH_ID fields of those records. FCT_PreSuspense appends DETAIL.BATCH_ID with more information to ensure that it remains unique.
To configure a pre-recycling pipeline, see "Configuring a Pre-Recycling Pipeline". These additional steps are also required for Suspense Manager:
In the INP_Recycle module, change this EXT_InEasyDB entry:
SqlDetail = StdRecycleDetail.sql
to this:
SqlDetail = RecycleDetail.sql
This file is used by EXT_InEasyDB for reading queryable fields in /suspended_usage objects.
Edit the Pipeline_Home/database/Oracle/Scripts/Suspense/RecycleDetail.sql script. Pipeline_Home is the directory where you installed Pipeline Manager.
Add any custom queryable fields that you added in "Adding /suspended_usage Subclasses with Queryable Fields".
Remove any non-editable fields from the SELECT statement to improve performance.
This section explains the configuration steps necessary to load suspended CDRs into the BRM database. You used the steps in "Configuring SE Loader for Standard Recycling" to configure the SE Loader for standard recycling. Follow these steps to configure your Infranet.properties file and store your Suspense Manager customizations in /suspended_usage objects:
Append the contents of suspense_Infranet.properties to your Infranet.properties file:
% cd BRM_Home/apps/pin_rel
% cat suspense_Infranet.properties Infranet.properties
Edit the BRM_Home/apps/pin_rel/Infranet.properties file to create new event types for each of your /suspended_usage or /suspended_batch subclasses and for temporary objects. Use the /suspended_usage/telco section of BRM_Home/apps/pin_rel/Infranet.properties as a guide.
You use the queryable fields you set up in "Selecting a List of Queryable EDR Fields" in this step.
This section explains the SB Loader configuration steps necessary to load CDR files into the BRM database.
Follow these steps to configure SB Loader:
Add FCT_BatchSuspense as the first functional plugin of the pre-processing pipeline. See "FCT_BatchSuspense".
Note:
This module can be added to any pipeline doing file-level validation, but this is most likely the pre-processing pipeline.Specify the object you will use to store suspended CDR file information using the StorableClass registry entry in FCT_BatchSuspense. The default object is /suspended_batch/cdr. For details, see "FCT_BatchSuspense".
Add these entries to your CM's pin.conf file to provide connection to the database to store your suspended CDR files:
- nap cm_ptr ip_host port_no - nap login_type 1 - - userid 0.0.0.1 /service/pcm_client 1 - nap login_name root.0.0.0.1 - nap login_pw password
By default, Suspense Manager does not include any database indexes for searches other than indexes based on POID IDs. You can improve database performance by creating indexes for your most common searches. The example below guides you through the process.
Tip:
If there are many indexes on the tables for /suspended_usage objects, you run the risk of degrading SE Loader performance during bulk loading of /suspended_usage objects. Experiment to find the right balance of indexes for your system.Example search template:
#Suspense Management Template #Fri Nov 14 09:16:53 PST 2003 PIN_FLD_CALL_DURATION.max= PIN_FLD_SUSPENSE_REASON.value=<All> PIN_FLD_CALL_DURATION.selected=false PIN_FLD_EDITED.value=<All suspended> PIN_FLD_TEST_SUSPENSE_SUBREASON.value=<All> PIN_FLD_RECORD_TYPE.selected=true PIN_FLD_FILENAME.selected=true PIN_FLD_TEST_ERROR_CODE.min= PIN_FLD_STATUS.value=Suspended PIN_FLD_RECORD_TYPE.text= PIN_FLD_PIPELINE_NAME.text= datadictionary.class=/suspended_usage/telco PIN_FLD_PIPELINE_ERROR_CODE.max= PIN_FLD_TEST_SUSPENSE_SUBREASON.selected=false PIN_FLD_SUSPENSE_SUBREASON.selected=false PIN_FLD_SERVICE_CODE.text= PIN_FLD_NUM_RECYCLES.max=0 PIN_FLD_PIPELINE_NAME.selected=false PIN_FLD_SUSPENSE_REASON.selected=true PIN_FLD_TEST_SUSPENSE_REASON.value=<All> PIN_FLD_START_TIME.selected=false PIN_FLD_CALLING_FROM.text= PIN_FLD_CALL_DURATION.min= PIN_FLD_NUM_RECYCLES.selected=true PIN_FLD_FILENAME.text= PIN_FLD_EDITED.enabled=true PIN_FLD_CALLED_TO.selected=true PIN_FLD_STATUS.selected=false PIN_FLD_TEST_SUSPENSE_REASON.selected=false PIN_FLD_RECYCLE_T.selected=false PIN_FLD_TEST_ERROR_CODE.selected=false PIN_FLD_CALLING_FROM.selected=true PIN_FLD_CALLED_TO.text= PIN_FLD_TEST_ERROR_CODE.max= PIN_FLD_BATCH_ID.selected=false PIN_FLD_BATCH_ID.text= PIN_FLD_PIPELINE_ERROR_CODE.min= PIN_FLD_SERVICE_CODE.selected=false PIN_FLD_EDITED.selected=false PIN_FLD_SUSPENSE_SUBREASON.value=<All> PIN_FLD_NUM_RECYCLES.min=0 PIN_FLD_PIPELINE_ERROR_CODE.selected=true
The example search template translates into this SQL statement:
SQL> select st.called_to, st.calling_from, s.filename, s.error_code, SQL> s.suspense_reason, s.num_recycles from suspended_usage_t s, SQL> susp_usage_telco_info_t st where s.status = 0 and s.num_recycles SQL> >= 0 and s.num_recycles <= 0 and s.poid_id0 = st.obj_id0;
For Oracle databases, use the statements below to determine which indexes would improve performance.
To evaluate this SQL statement, turn on autotrace and run this statement.
This is the output:
SQL> set autotrace on; SQL> select st.called_to, st.calling_from, s.filename, s.error_code, SQL> s.suspense_reason, s.num_recycles from suspended_usage_t s, SQL> susp_usage_telco_info_t st where s.status = 0 and s.num_recycles SQL> >= 0 and s.num_recycles <= 0 and s.poid_id0 = st.obj_id0; ... 13 rows selected. Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (FULL) OF 'SUSP_USAGE_TELCO_INFO_T' 3 1 TABLE ACCESS (BY INDEX ROWID) OF 'SUSPENDED_USAGE_T' 4 3 INDEX (UNIQUE SCAN) OF 'I_SUSPENDED_USAGE__ID' (UNIQUE) Statistics ---------------------------------------------------------- 176 recursive calls 0 db block gets 38 consistent gets 0 physical reads 0 redo size 1218 bytes sent via SQL*Net to client 430 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 4 sorts (memory) 0 sorts (disk) 13 rows processed
The Execution Plan shows a listing of TABLE ACCESS (FULL), indicating that search performance would be better if you had created the indexes. Based on the select statement, add appropriate indexes. In this example add them to both num_recycles and the status in suspended_usage_t. This sample statement creates those indexes:
SQL> create index i_susp_usage_test on suspended_usage_t (status, SQL> num_recycles);
After creating the indexes, rerunning the select statement results in a more efficient Execution Plan:
Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'SUSPENDED_USAGE_T' 3 2 INDEX (RANGE SCAN) OF 'I_SUSP_USAGE_TEST' (NON-UNIQUE) 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'SUSP_USAGE_TELCO_INFO_T' 5 4 INDEX (UNIQUE SCAN) OF 'I_SUSP_USAGE_TELCO__ID' (UNIQUE) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 19 consistent gets 0 physical reads 0 redo size 1218 bytes sent via SQL*Net to client 430 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 13 rows processed
The table scan does not read FULL this time, and there are no recursive calls and fewer consistent gets. The result is a more efficient call.
Follow these procedures to configure and customize the Suspense Management Center application. See Suspense Management Center Help for instructions about using the application.
Before you can use Suspense Management Center, you must first set up its user permissions in Permissioning Center.
For general information on setting up permissions, see "Setting Up Permissions In BRM Applications" in BRM System Administrator's Guide.
For details on setting up Suspense Management Center permissions, see "Permission Types" in BRM System Administrator's Guide.
Edit custom.properties in the BRM_Home/Program Files/Portal Software/SuspenseManagementCenter/lib directory, adding any custom fields from your /suspended_usage subclasses. Suspense Management Center displays the fields defined in the custom.properties files.
This example defines a new field called Record Type: to display in Suspense Management Center:
#1. Specify the display name:
#
#field.<dd_field_name>.name = <display name>
field.PIN_FLD_RECORD_TYPE.name = Record Type:
Edit the SuspenseManager_en.jnlp file (in the Web_Start_Home directory), adding any custom fields from your /suspended_usage subclasses. The Web version of Suspense Management Center displays the fields that are defined in SuspenseManager_en.jnlp.
This example defines a new field called Record Type: to display in Suspense Management Center:
<resources> <j2se version="1.4*"/> ... ... <jar href="lib/Suspense_Management_Help_en.jar"/> <extension name="JavaHelp" href="3plibs/jsoft.jnlp"/> <property name="suspensemanagement.home" value="f:/apache/apache2/htdocs" /> <property name="field.PIN_FLD_RECORD_TYPE.name" value="Record Type:" /> <property name="field.PIN_FLD_RECORD_TYPE.column" value="Record Type" /> </resources>
When suspended EDRs are recycled or written off, Suspense Manager uses event notification to call opcodes that perform the appropriate follow-up operations.
Although any subclass of the /event class can be used to trigger event notification (see "About Notification Events" in BRM Developer's Guide), Suspense Manager generates the following nonpersistent events specifically to use for event notification:
/event/notification/suspense/recycle: By default, when this event occurs, the EAI framework publishing opcode is called.
/event/notification/suspense/writeoff: By default, when this event occurs, PCM_OP_PROCESS_AUDIT_CREATE_WRITEOFF_SUMMARY is called.
/event/notification/suspense/delete: By default, when this event occurs, no opcode is called. To enable this event to trigger an opcode call, see "Editing The Event Notification List" in BRM Developer's Guide.
/event/notification/suspense/edit: By default, when this event occurs, no opcode is called. To enable this event to trigger an opcode call, see "Editing The Event Notification List" in BRM Developer's Guide.
Before you can use Suspense Manager, you must configure the event notification feature as follows:
If your system has multiple configuration files for event notification, merge them. See "Merging Event Notification Lists" in BRM Developer's Guide.
Ensure that the merged file includes entries for these events:
(For Revenue Assurance Manager only) From BRM_Home/sys/data/config/pin_notify_ra:
/event/notification/suspense/writeoff
From BRM_Home/sys/data/config/pin_notify_ifw_sync:
/event/notification/suspense/recycle
(Optional) Add entries for these events to your final event notification list:
/event/notification/suspense/edit
/event/notification/suspense/delete
Note:
These events are not in a default event notification configuration file. You must manually add them to your final event notification list. See "Editing The Event Notification List" in BRM Developer's Guide.(Optional) If necessary to accommodate your business needs, add, modify, or delete entries in your final event notification list. See "Editing The Event Notification List" in BRM Developer's Guide.
(Optional) If necessary to accommodate your business needs, create custom code for event notification to trigger. See "Triggering Custom Operations" in BRM Developer's Guide.
Load your final event notification list into the BRM database. See "Loading The Event Notification List" in BRM Developer's Guide.
For more information, see "Using Event Notification" in BRM Developer's Guide.
This section explains how to set up the Suspense Management Center debugging information logs and the Suspense Management Center console. This task is optional.
Suspense Management Center provides the following ways for capturing and displaying debugging information:
The SuspenseManagementCenter_opcodes.log log file captures all opcode input and output flists used by Suspense Management Center.
The javapcm.log file contains detailed debugging information. By default, the logging level is set to 0, the lowest level. The highest level is 3. You must set the error buffer to true to enable javapcm logging.
The Dloglevel entry creates a console window for the Suspense Management Center that displays error messages and debugging information.
Set up Java PCM Logging by adding these entries to the Infranet.properties file (in the BRM_Home/Program Files/Portal Software/SuspenseManagementCenter/lib directory):
infranet.log.level=3 infranet.log.logallebuf=true infranet.log.opcodes.enabled=true infranet.log.opcodes.file=SuspenseManagementCenter_opcodes.log
Set up Suspense Management Center console logging by opening the RunSM.bat file (in the BRM_Home\Program Files\Portal Software\SuspenseManagementCenter\lib directory), and changing the javaw entry to java, and add this parameter:
java -Dloglevel="ALL".
Logging information is now:
Displayed in the Suspense Management Center console window.
Available in these files:
BRM_Home\Program Files\Portal Software\SuspenseManagementCenter\lib\javapcm.log
BRM_Home\Program Files\Portal Software\SuspenseManagementCenter\lib\SuspenseManagementCenter_opcodes.log
To configure the number of suspended records you want the suspense management operations to process in a transaction, perform the following tasks:
Edit the pin_suspense_params file in the BRM_Home/sys/data/config directory to specify the maximum number of records to process in a transaction. The file includes examples and instructions.
Load the contents of the file into the /config/suspense_params object in the BRM database by using load_pin_suspense_params.
Suspense Management Center and the pin_recycle utility read the /config/suspense_params file to get the number of records to process in each opcode call and determine the number of times to call the opcodes. For more information, see "Processing Suspended Records in Multiple Steps".