22 Configuring Suspense Manager

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:

About Configuring Suspense Manager

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".

  • Decide whether to extend the /suspended_usage class.

  • Select a list of queryable EDR fields.

  • Add /suspended_usage subclasses with queryable fields.

Create a list of editable fields.

See "Creating a List of Editable Fields Based on Your /suspended_usage Subclasses".

  • Create a list of fields that you want the ability to correct using Suspense Manager.

Load editable fields into the database.

See "Loading Editable Fields into the Database".

  • Edit the pin_suspense_editable_flds file.

  • Run the load_pin_suspense_editable_flds utility.

Change suspense reasons and subreasons (optional).

See "Changing the List of Suspense Reasons and Subreasons".

  • Decide whether to change the suspense reason lists.

  • Edit the suspense_reason_code.en_US file or the batch_suspense_reason_code.en_US file.

  • Edit the pin_suspense_reason_code or pin_batch_suspense_reason_code file.

  • Run the load_localized_strings utility.

  • Run the load_pin_suspense_reason_code or load_pin_batch_suspense_reason_code utility.

Configure the pipeline for Suspense Manager.

See "Configuring Pipeline Manager for Suspense Manager".

  • Configure the standard recycling pipeline.

  • Configure the rating pipeline.

  • Configure the pre-cycling pipeline.

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".

  • Edit the Infranet.properties file.

Create indexes for search templates.

See "Creating Indexes for Search Templates".

  • Create indexes.

Configure and customize Suspense Management Center.

See "Configuring and Customizing Suspense Management Center".

  • Set permissions using Customer Center.

  • Add custom fields (edit the custom.properties file).

  • Add custom fields to Web Start (edit SuspenseManagement_en.jnlp) (Optional).

  • Set up permissions for Suspense Management Center.

Configuring event notification for Suspense Manager.

See "Configuring Event Notification for Suspense Manager".

  • Consolidate event notification operations.

Configure debugging (optional).

See "Configuring Debugging (Optional)".

  • Set up Java PCM logging (edit the Infranet.properties file).

  • Edit RunSM.bat.

Configure the number of records to process in a transaction (optional).

See "Configuring the Number of Suspended Records to Process in a Transaction".

  • Edit the pin_suspense_params file and run load_suspense_params.


Planning and Setting up Your Database for Suspense Manager

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.

Deciding Whether You Need to Extend the Suspense Subclasses

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.

Selecting a List of Queryable EDR Fields

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.

Adding /suspended_usage Subclasses with Queryable Fields

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:

  1. Determine how to subclass /suspended_usage objects.

  2. 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.

Creating a List of Editable Fields Based on Your /suspended_usage Subclasses

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".

Loading Editable Fields into the Database

To load your list of editable fields into the database for use by Suspense Management Center:

  1. Review the list of fields you assembled in "Creating a List of Editable Fields Based on Your /suspended_usage Subclasses".

  2. 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.

  3. 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".

Changing the List of Suspense Reasons and Subreasons

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.

Deciding whether to Change the Suspense Reason and Subreason Lists

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.

Changing the Suspense Reason and Subreason Lists

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.

  1. 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.
  2. Determine any new suspense subreasons.

  3. 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.

  4. 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
    
  5. 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.
  6. 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
    
  7. 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.

  8. Stop and restart the Connection Manager (CM). See "Starting and Stopping the BRM System" in BRM System Administrator's Guide.

  9. 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.

Configuring Pipeline Manager for Suspense Manager

The following Pipeline Manager configuration steps are required for Suspense Manager.

Configuring a Standard Recycling Pipeline

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.

Configuring a Rating Pipeline

The following configuration steps are required to configure a rating pipeline.

Configuring FCT_PreSuspense

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".

Configuring SuspenseCreateOutput

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

...

Configuring a Pre-Recycling Pipeline

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:

  1. 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.

  2. Edit the Pipeline_Home/database/Oracle/Scripts/Suspense/RecycleDetail.sql script. Pipeline_Home is the directory where you installed Pipeline Manager.

Setting Up Suspended Event (SE) Loader for Suspense Manager

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:

  1. Append the contents of suspense_Infranet.properties to your Infranet.properties file:

    % cd BRM_Home/apps/pin_rel
    % cat suspense_Infranet.properties Infranet.properties
    
  2. 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.

Setting Up Suspended Batch (SB) Loader for Suspense Manager

This section explains the SB Loader configuration steps necessary to load CDR files into the BRM database.

Follow these steps to configure SB Loader:

  1. 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".

  2. 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
    

Creating Indexes for Search Templates

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.

Configuring and Customizing Suspense Management Center

Follow these procedures to configure and customize the Suspense Management Center application. See Suspense Management Center Help for instructions about using the application.

Setting Up Permissions for Using Suspense Management Center

Before you can use Suspense Management Center, you must first set up its user permissions in Permissioning Center.

Adding Custom Fields to Suspense Management Center

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: 

Adding Custom Fields to Suspense Management Center Web Start

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>

Configuring Event Notification for Suspense Manager

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:

  1. If your system has multiple configuration files for event notification, merge them. See "Merging Event Notification Lists" in BRM Developer's Guide.

  2. 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

  3. (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.
  4. (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.

  5. (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.

  6. 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.

Configuring Debugging (Optional)

This section explains how to set up the Suspense Management Center debugging information logs and the Suspense Management Center console. This task is optional.

About Logging Debugging Information

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.

Setting Up Logging of Debugging Information

  1. 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
    
  2. 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

Configuring the Number of Suspended Records to Process in a Transaction

To configure the number of suspended records you want the suspense management operations to process in a transaction, perform the following tasks:

  1. 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.

  2. Load the contents of the file into the /config/suspense_params object in the BRM database by using load_pin_suspense_params.

    See "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".

What's Next

Your Suspense Management Center is now ready to accept call records.