NMS JBot Tool Configuration
The ${NMS_BASE}/dist/baseconfig/product/ops folder contains sub-folders with each tool’s configuration information. Tool folders typically contain the following sub-folders:
images: contains images used by the tool
properties: contains Java .properties files
xml: contains .xml and .inc files
 
This section includes the following topics:
User Permissions
The USER_PERMISSIONS table stores currently licensed products and grants permissions to system features and functionality based on user types.
Licensed Products
Licensed products are listed with an action value of LICENSED.
System Mode
The USER_PERMISSIONS table can also define what modes a user type has access to. In this case, any of the following actions can be defined for a user type:
Value
Description
ACCESS_REAL_TIME
Allow the user to access the Real Time model.
ALL_EXECUTE, ALL_INSTRUCT
Some users can only execute switching steps inside certain types of blocks, such as Isolate. If so, they should be configured to Isolate_EXECUTE. Other users can execute steps in any block type (ALL_EXECUTE). Similar logic applies for instructing actions (ALL_INSTRUCT).
CREATE_STUDY_SESSIONS
Allow the user to create their own study sessions.
DMS_STUDY_MODE
Some users and user types do not automatically request PFService study sessions, which helps to conserve memory (in a service that is already memory intensive).
 
DMS_STUDY_MODE provides a user or user type with automatic access to DMS in study mode. Other users will need to request it by checking the DMS Study checkbox.
USE_SHARED_STUDY_SESSION
Force the user to use a single shared study session called SHARED_STUDY_SESSION. Normally study sessions are named based on the user's login ID. Thus, this ID cannot be given to a user for login purposes. Also, since this option forces this user or user type to share a single study session, then this user or user type should have limited control to the Control Tool or any actions that result in a change to the model.
VIEW_SCADA
Allow the user to access the SCADA Status and SCADA Commissioning tools.
SCADA_MAINTENANCE
Allow the user to perform maintenance actions in the SCADA Status tool.
SCADA_COMMISSIONING
Allow the user to perform commissioning actions in the SCADA Commissioning tool.
SCADA_CONTROL_PERMISSION
Allow the user to perform control actions in the SCADA Status tool. Actions include enabling, disabling, resetting, and issuing demand scans for IED's and reseting FEP statistics.
 
For Product configured Web Workspace:
Start Real-time and Start Study mode buttons/menus are only visible when user has both CREATE_STUDY_SESSIONS and ACCESS_REAL_TIME permissions.
Reset Study Session menu is only visible when user has CREATE_STUDY_SESSIONS permission.
Close Study Session menu is only visible when user has both CREATE_STUDY_SESSIONS and ACCESS_REAL_TIME permissions.
 
Example:
INSERT INTO user_permissions (seq_permission_id, user_name, action)
VALUES( SEQ_USER_PERMISSION.NEXTVAL, 'Switching Entry', 'ACCESS_REAL_TIME');
The Switching Entry users cannot create study sessions and will be in a sense always stuck in Real Time. If the user type is given access to a viewer and control tool, projects should consider using the USE_SHARED_STUDY_SESSION option instead.
These options are in place to minimize the demand on the services to keep track of individual study sessions used by users. The more study sessions that are active, the higher the burden on the services. Keeping the study sessions to a minimum is highly recommended and these rules should be used to do that.
Web Workspace Editing Permissions
Web Workspace defines access rights to elements within a switching sheet based on user type. This allows certain parts of the application or switching sheet to be edited by one user type and not by other user types. For user type permissions within Web Workspace, the user_name should indicate the user type and the action should be the actions that user type has permissions over within the sheet.
Example:
INSERT INTO user_permissions (seq_permission_id, user_name, action)
VALUES( SEQ_USER_PERMISSION.NEXTVAL, 'Full Operations plus Web Switching', 'ALL');
This would give the Full Operations plus Web Switching user type permissions over every aspect of a switching sheet. Use the ALL action to define this.
Example:
INSERT INTO user_permissions (seq_permission_id, user_name, action)
VALUES( SEQ_USER_PERMISSION.NEXTVAL, 'Switching Prep', 'SWITCHING');
INSERT INTO user_permissions (seq_permission_id, user_name, action)
VALUES( SEQ_USER_PERMISSION.NEXTVAL, 'Switching Prep', 'Isolate_EXECUTE');
 
This gives the Switching Prep user type permission to use Web Switching as well as execute permissions for steps, but only when the steps are in an Isolate block. The format of the action string is: <Step Block Name>_<Step Action Name>.
User Type Configuration
There are two approaches to configuring user environments by user types. The first method creates project configuration directories for each specific user type/role/privilege; the second sets rules within configuration files to enable different tools or views based on the user type/role/privilege. The first method works best if there are significant differences between the two versions; the second method is useful with small changes to the existing configuration.
In either method, user types must be defined in the ENV_CODE table.
ENV_CODE Table
 
Column
Data Type
Null-able
Comments
PRODUCT
VARCHAR2
(32 CHAR)
No
The current codes are:
CREW (Web Workspace)
FLEX (Flex Operations Client)
MODEL (Model Management)
OMS_CONFIG_TOOL (Configuration Assistant)
SERVICE_ALERT (Service Alert)
STORM (Storm Management)
WCB (Web Callbacks)
WCE (Web Call Entry)
CODE_NAME
VARCHAR2
(32 CHAR)
No
Same as the environment above
CODE_SCRIPT
VARCHAR2
(32 CHAR)
Yes
The directory name of the overrides for this role
DISPATCH_GROUP
VARCHAR2
(32 CHAR)
Yes
Dispatch_groups.name
DGROUP_AUTH
VARCHAR2
(1 CHAR)
Yes
'Y'=allowed to change filtering dgroup
Example: NMS Standard ENV_CODE Table
Product
Code_Name
Code_Script
CREW
Administration
admin
CREW
Crew Operations
crew_ops
CREW
Full Operations
 
CREW
Full Operations plus Switching
 
CREW
Full Operations plus Switching and SCADA Control
 
CREW
Switching Request
request
CREW
Trainer
trainer
CREW
Trouble Maintenance
trbl_mnt
CREW
View Only
viewonly
CREW
SCADA Maintenance
 
CREW
SCADA Commissioning
 
CREW
SCADA Maintenance plus Commissioning
 
FLEX
Flex Full Operations plus Switching
 
FLEX
Flex Full Operations
 
FLEX
Flex Crew Operations
 
FLEX
Flex Switching Request
 
FLEX
Flex View Only
 
MODEL
Model Validation
 
OMS_CONFIG_TOOL
Administration
 
SERVICE_ALERT
Administration
 
STORM
Full Operations
 
STORM
Storm Administration
admin
STORM
View Only
viewonly
WCB
Full Operations
 
WCE
Web Call Entry
 
 
Configuring User Roles with Subdirectories
1. Create a subdirectory of the project configuration directory that would be used for a specific user type/role/privilege (for example, view-only).
2. Copy each *.xml (or properties) file, which needs to be different for that user type, into this directory. Everything would be at the same level in the subdirectory; in other words, the directory would contain all *.xml, *.inc, and *.properties files that are specific for that user.
3. Edit the files to make the desired changes.
4. Have an entry in the ENV_CODE table for the user type and include the subdirectory name containing the configuration for the user type.
For example, for the Crew Operations environment, the ENV_CODE table would use the following SQL statement:
INSERT INTO env_code ( product, code_name, code_script, dispatch_group, dgroup_auth )
VALUES ( 'CREW', 'Crew Operations', 'crew_ops', '', '' );
The configuration files for the environment would be located in the $NMS_BASE/[project]/jconfig/crew_ops directory.
Example
Creating a view-only subdirectory and changing the viewer background color for them.
1. Create the view-only directory in the project configuration directory. For example:
$NMS_CONFIG/jconfig/ops/view-only/
2. Copy VIEWER_GLOBAL_PROPERTIES.inc from:
${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/
to
${NMS_CONFIG}/jconfig/ops/viewonly/.
3. Modify the viewer.background_color line from:
<StringProperty name="viewer.background_color" value="$viewer_canvas_background"/>
to
<StringProperty name="viewer.background_color" value="0,0,0"/>
4. Run nms-install-config --java
5. Restart WebLogic.
6. Start Web Workspace, open a Viewer, and verify that the background color is now black.
User Role Constraints on Configuration
As in the other method, each application or tool that requires different access or a separate view for a user type will need to be configured for that user type.
1. If a project version of the tool configuration does not exist, copy it the appropriate project configuration directory.
2. You’ll need to add restrictions, as appropriate, in the configuration files to turn on or off features for a user type.
Example: Restricting the ability to create a switching sheet for view only user.
<Menu name="MNU_FILE">
<SubMenu name="MNU_NEW">
<MenuItem name="MNU_NEW_SHEET" icon="new.png"
accelerator="control N" hide_icon="true">
 
<Visible initial="false" when="!USER_VIEW_ONLY and
DS_LOGIN_ENTRY.WEB_SWITCHING_ENABLED == 'true'"/>
 
<Enabled initial="false" when="!USER_VIEW_ONLY"/>
 
<PressPerform>
<Command value="DisplayNewNMSDialogCommand"
when="DS_LOGIN_ENTRY.ENV == 'WEB' and
DS_LOGIN_ENTRY.TYPE == '&UserSwitchingEntry;'">
<Config name="dialog" value="DLG_NEW_NMS_DIALOG"/>
<Config name="check_authority" value="false"/>
</Command>
 
<Command value="DisplayNewNMSDialogCommand"
when="DS_LOGIN_ENTRY.ENV == 'WEB' and
DS_LOGIN_ENTRY.TYPE != '&UserSwitchingEntry;'">
<Config name="dialog" value="DLG_NEW_NMS_DIALOG"/>
</Command>
</PressPerform>
 
</MenuItem>
...
</Menu>
Login Tool Configuration
The Login Tool is responsible for determining which user type the user should log in as and verifying the password (if LDAP integration is turned off).
To configure an application (for example, Web Workspace or Configuration Assistant) to use the Login Tool, the product_name global property should be set in the tools configuration to the value as it exists in product column of the ENV_CODE table.
The following example demonstrates configuring Web Call Entry (WCE) to use the login tool:
<JBotTool width="830" height="900">
<GlobalProperties>
<StringProperty name="product_name" value="WCE"/>
</GlobalProperties>
...
User Session Configuration
The Login Tool has a configuration option that handles user sessions when a user logs into the system from a different client.
Login Bean Properties
File: ./jconfig/server/CentricityServer.properties
LoginEJB.force_relogin = <true | false>
When set to false, if a user is currently logged into the application (or has abnormally exited within two minutes), the user will receive an error message saying the user is already logged in. The user can be released using the Configuration Assistant to reset the login.
When set to true, if another log in occurs for the same application and user, the original session will be automatically logged off. The system will not allow the user to save their work. The system will return a dialog box informing that the existing user was logged off, and that they should retry the log in. Clicking the Login button again will then log the user into the system and the new user (session) will begin.
Client Inactivity Timeouts
If a user does not interact with a client after a certain amount of time, the user can be logged off automatically. This is controlled by these settings in CentricityTool.properties:
# This is the inactivity timeout configured in seconds.
# If the user does not perform a mouse click or key press within
# this timeout, then the application will automatically log out.
# If this is set to 0, then it is disabled.
 
inactivity.timeout = 7200
 
# This is the time in seconds to display the automatic logout
# warning before exiting the system. If this is 0,
# then there will be no warning.
 
inactivity.notice = 120
 
Master Window Configuration (Oracle Fusion Client Platform)
The main client application window for Web Workspace can be configured by using a separate XML file. For example:
<dockingPositions xmlns="http://nms.oracle.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://nms.oracle.com http://
localhost/xml/docking.xsd"
bounds="30,0,1220,942" maximized="false">
<WEST floatSize="1003" dockSize="1210">
<box>
<leafBox height="300" width="400">
<dockable dockWidth="400" floatHeight="300"
floatOrientation="-1" dockHeight="300"
ID="com.splwg.oms.client.crew.CrewIcons"
floatWidth="400"/>
<dockable dockWidth="400" floatHeight="300"
floatOrientation="-1" dockHeight="300"
ID="com.splwg.oms.client.authority.Authority"
floatWidth="400"/>
</leafBox>
</box>
</WEST>
<EAST floatSize="180" dockSize="275">
<box>
<leafBox height="300" width="400">
<dockable dockWidth="400" floatHeight="300"
floatOrientation="-1" dockHeight="300"
ID="com.splwg.oms.client.workspace.Workspace"
floatWidth="400"/>
</leafBox>
</box>
</EAST>
<NORTH floatSize="180" dockSize="490">
<box>
<leafBox height="300" width="400">
<dockable dockWidth="400" floatHeight="300"
floatOrientation="-1" dockHeight="300"
ID="com.splwg.oms.client.workagenda.WorkAgenda"
floatWidth="400"/>
</leafBox>
</box>
</NORTH>
<SOUTH floatSize="180" dockSize="250"/>
</dockingPositions>
 
The file should be saved as the name of the application, with docking. For example, the name of the file for Web Workspace would be Workspace_docking.xml.
The easiest way to modify this file is to arrange the windows the way you wish, then exit the system. Bring up Windows Explorer, and locate c:\Documents and Settings\[user] \.nms\system11.0.0.0.0\o.ide.11.1.1.1.33.53.67\windowinglayout.xml
From that file, cut and paste the dockingPositions element to the configuration file. Note that the <dockingPositions> element should include the attributes listed above, although they are not in the windowingLayout.xml.
The "bounds" dockingPositions attribute specifies the position and size of the master frame. The numbers are the x, y, width, and height of the master frame.
The "maximized" attribute specifies if the frame should start maximized.
The default docking for applications that do not have a specific docking configuration is defined by jconfig/global/xml/JbotTool_docking.xml.
Java Web Start Page
Configure a $NMS_HOME/[project]/jconfig/license.properties file. Follow the instructions in the file to configure which projects to display on the login web page, as well as their titles.
Table Export Configuration
The Table Export feature allows you to set up an action to export table data to a CSV file. The table export behavior is defined in the TableBehavior element; if not defined, the export behavior will be inherited from the system default settings found in the CentricityTool.properties file.
TableBehavior Elements
copy_mode: the copy_mode determines the behavior when the table is copied to the clipboard. Valid values:
TABLE: will copy the entire table, and CELL defines whether the entire table, the selected rows, or the selected cell is copied.
SELECTED: will only copy the selected rows
CELL: will only copy the selected cell.
copy_include_headers: defines whether the header cells should be copied. Valid values: true or false.
copy_include_hidden: defines whether hidden rows should be copied. Valid values: true or false.
Export to CSV
The Export Table functionality is assigned to a menu or button using the ExportToCSVCommand JBot command. In the following example, the Work Agenda’s export command [3] exports the entire table [5], including headers [6], but not hidden rows [7] and sets the default save as name.
[1] <MenuItem name="MNU_EXPORT_TABLE">
[2] <PressPerform>
[3] <Command value="ExportToCSVCommand">
[4] <Config name="table" value="TBL_WA_ALARMS"/>
[5] <Config name="mode" value="TABLE"/>
[6] <Config name="include_headers" value="true"/>
[7] <Config name="include_hidden" value="false"/>
[8] <Config name="default_name" value="Workagenda.csv"/>
[9] </Command>
[10] </PressPerform>
[11] </MenuItem>
Copying to the Clipboard
Besides the functionality listed in the previous Table Export Configuration, Tables can also be configured to use a panel with different copy options. This is helpful when different copy options are needed. To add this panel to a table, add the following include under the table:
<Include name="PNL_CLIPBOARD_PANEL.inc"/>
Work Agenda Configuration
Work Agenda configuration files are found in ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/.
GlobalProperties
The WORKAGENDA_GLOBAL_PROPERTIES.inc file contains the following tool properties:
String Properties
work_agenda.status_icon.##REPLACE.STATUS_<status>: Icon to display for the configured status. This can be configured for every status that needs an icon. Leave the value blank if no icon is desired.
Example:
<StringProperty name="work_agenda.status_icon.##REPLACE.STATUS_ASN" value="qual_wrench_arrowup_16.svg"/>
<StringProperty name="work_agenda.status_icon.##REPLACE.STATUS_NEW" value=""/>
Integer Properties
work_agenda.default_ert_offset: - If configured, the number of ms to use as the default ERT, as calculated from the current time
work_agenda.maximum_views: The maximum number of Work Agendas
work_agenda.reading_pane_population_delay: Delay in milliseconds between row selection in the Work Agenda treetable and start of the population of the Reading Pane panel for the selected row. Default: 1000 ms -->
work_agenda.requested_completed_outage_visible_time: The complete retain period requested from the server, for display of completed rows, in number of days
Boolean Properties
work_agenda.always_show_fuzzy_outages: Whether to display outages in the fuzzy zone, even if the user is not subscribed to the Fuzzy zone. Default: false
work_agenda.keep_restored_cmi: Whether to continue calculating the CMI for restored events. Default: false
work_agenda.show_completed_outages: Whether the tool should automatically load completed events. Default: false.
work_agenda.use_active_outage_as_lead: By default, a "No" answer in the WORKAGENDA.INCLUDE_SUB_EVENTS dialog will execute the action on the lead event, even if it's a non-outage. Set this to true to perform the action on the lead active outage event, when the lead event is a non-outage or is inactive. This also affects actions that don't display the dialog, like crew assignments.
String Array Properties
work_agenda.completed_testates: States that should be considered as completed
work_agenda.grouping_dialog_columns: List of DS_WA_ALARMS columns to be copied when event is added to the DS_EVENTS_TO_GROUP datastore. These columns will be available for display in the DLG_EVENT_GROUP (Group Events) dialog.
work_agenda.in_progress_testates: States to be considered as in progress
work_agenda.incomplete_testates: States to be considered as incomplete
work_agenda.summaryrow_feederclass: Device class named to be considered feeder heads, for the summary table
work_agenda.summaryrow_recloserclass: Device class named to be considered reclosers, for the summary table
work_agenda.summaryrow_fuseclass: Device class named to be considered fuses, for the summary table
work_agenda.to_do_testates: States to be considered as to do
Changing a Column Heading
Scenario: You want to change a column heading from Feeder to Circuit.
Column headings are defined in ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/properties/WorkAgenda_en_US.properties in the alarms panel section. You find the line:
################
# alarms panel #
################
...
 
TBL_WA_ALARMS.FEEDER_ALIAS.text = Feeder
1. Create a new blank WorkAgenda_en_US.properties file in the appropriate project or testing configuration directory (for example, C:\OracleNMS\[your_project_name]\jconfig\ops\
workagenda\properties\WorkAgenda_en_US.properties
).
2. Add the line: TBL_WA_ALARMS.FEEDER_ALIAS.text = Circuit
3. In a terminal window, enter the following:
cd c:\OracleNMS\<your_project_name>\jconfig
4. Build the configuration using ANT:
ant config
5. Log into Web Workspace to verify the column heading change. See Testing the Java Client Configuration for details on configuring and starting Web Workspace in a testing environment.
Adding a Column
Scenario: You want to add a column to the Work Agenda.
If you wish to add a project specific column, do the following:
1. Add the column to the JOBS table.
2. Also add the column with the same name, datatype, and size to the UNTIED_OUTAGES table.
3. Add the column name to the GENERIC_EVENT_FIELDS table.
4. Restart services.
For further information, see JMService Configuration.
The next step is to configure it to show up in Work Agenda:
1. Copy ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/xml/WORKAGENDA_TBL_WA_ALARMS.inc to C:\OracleNMS\<your_project_name>\jconfig\ops\
workagenda\xml\.
2. Add a new line following the line:
<Column key="CTRL_ZONE_NAME_4"/>.
3. On the new line, add:
<Column key="mds_id"/>
4. Open the project version of WorkAgenda_en_US.properties, created in the previous example.
5. Add the following lines:
TBL_WA_ALARMS.mds_id.text = MDS Id
TBL_WA_ALARMS.mds_id.width = 50
6. Build the configuration using ANT:
ant config
7. Log into Web Workspace to verify the column has been added.
Alarms and Devices Configuration
All of the alarms in the Web Workspace Tools menu's Alarms and Devices Lists submenu are versions of the DDSAlarms tool that have different filters. The configuration files are found in ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/.
If a project wants to separate them differently, or create two instances of a list, you need to create a <StatusChangePerform> filter for the tool matching the rows to display in the table.
The following keys are used by product configuration:
Abnormal Devices: ABN_DEVS:
Device Operations: DEV_OPS
SCADA Alarms: SCADA_ALARMS
System Alarms: SYS_ALARMS
DMS Alarms: DMS_ALARMS
Crew Actions Configuration
The Crew Actions Tool configuration files are found in ${NMS_BASE}/dist/baseconfig/product/ops/crew/.
Crew Actions provides a mechanism for filtering crews based on control zone level; this filtering is capable of listening to the Work Agenda and filtering crews based on the event zone. The functionality is found in a Filter sub-menu description in CREW_ICONS_MENUBAR.inc:
<SubMenu name="MNU_FILTER_EVENT_ZONE">
<RadioButtonMenuItem name="RBG_EVENT_ZONE_ALL" hide_icon="true"
button_group="RBG_EVENT_ZONE"
true_value="ALL" data_source="DS_EVENT_ZONE.LEVEL">
<Enabled initial="true" when="ZONE_FILTER_ENABLED"/>
<PressPerform>
<Command value="FilterSelectedZoneCommand"/>
</PressPerform>
</RadioButtonMenuItem>
<RadioButtonMenuItem name="RBG_EVENT_ZONE_DISTRICT" hide_icon="true"
button_group="RBG_EVENT_ZONE" true_value="CTRL_ZONE_NAME_2"
data_source="DS_EVENT_ZONE.LEVEL">
<Enabled initial="true" when="ZONE_FILTER_ENABLED"/>
<PressPerform>
<Command value="FilterSelectedZoneCommand"/>
</PressPerform>
</RadioButtonMenuItem>
<RadioButtonMenuItem name="RBG_EVENT_ZONE_OFFICE" hide_icon="true"
button_group="RBG_EVENT_ZONE"
true_value="CTRL_ZONE_NAME_3" data_source="DS_EVENT_ZONE.LEVEL">
<Enabled initial="true" when="ZONE_FILTER_ENABLED"/>
<PressPerform>
<Command value="FilterSelectedZoneCommand"/>
</PressPerform>
</RadioButtonMenuItem>
<Enabled initial="true" when="ZONE_FILTER_ENABLED"/>
</SubMenu>
Related files and settings:
The Work Agenda WORKAGENDA_TBL_WA_ALARMS.inc includes the FilterSelectedZoneCommand that interacts with Crew Actions to apply the filter in Crew Actions when one (or more) Work Agenda row(s) is selected.
The Crew Actions CREWICONS_TOOLBEHAVIOR.inc also includes the FilterSelectedZoneCommand.
CREW_DATASTORES.inc contains the datastore class name for the event zone:
<DataStoreClass name="DS_EVENT_ZONE"/>
The CrewIcons.xml configuration file sets the tool behavior when filtered in the PNL_CrewFilters sub-panel.
Removing the Event Filter Submenu
Scenario: Your project does not require filtering by event zone.
1. Copy ${NMS_BASE}/dist/baseconfig/product/ops/crew/xml/CREW_ICONS_MENUBAR.inc to C:\OracleNMS\[your_project_name]\jconfig\ops\
crew\xml\
.
2. Remove the entire <SubMenu name="MNU_FILTER_EVENT_ZONE"> section.
3. Run ant config.
4. Log in to Web Workspace. The sub-menu will no longer be included under the Filter menu.
Event Details Configuration
Event Details configuration files are found in ${NMS_BASE}/dist/baseconfig/product/ops/eventdetails/.
Adding a Drop‑Down List
Scenario: You need to add a new drop-down list to the Event Details window. You will create a value called animals that will contain choices of lions, tigers, and bears.
Note that while the Configuration Assistant can add new values to an event details drop-down menu, it cannot create the new list. Therefore, for the first option, you need to add it directly to the database using SQL Developer or an alternative SQL tool of your choice.
1. Add the following entry to the PICKLIST_GUI table.
Lion, animals_om, pushbutton, non_outage, 100
2. Add a column called animals_om (VARCHAR2(20)), to the PICKLIST_INFO_UPD_TR table.
3. Start Configuration Assistant. Select animals_om and add entries for Outage for lions, tigers, and bears. Select non-outage and add tigers and bears.
4. Copy the following files from:
${NMS_BASE}/dist/baseconfig/product/ops/eventdetails/xml/
to
C:\OracleNMS\<your_project_name>\jconfig\ops\eventdetails\xml\:
EVENTDETAILS_DATASTORES.inc
EVENTDETAILS_GLOBAL_PROPERTIES.inc
EVENTDETAILS_PNL_ACTIONS.inc
5. To the copied file, EVENTDETAILS_DATASTORES.inc, add the following datastore:
<DataStoreClass name="DS_ANIMALS_OM" class="com.splwg.oms.client.eventdetails.PicklistGUIDataStore" table="picklist_gui"/>
6. Next, in the EVENTDETAILS_GLOBAL_PROPERTIES.inc file, find the line that defines eventdetails.populate_datastores and add DS_ANIMALS_OM to the list.
7. Next, find the eventdetails.categories section and add ANIMALS_OM to the list.
8. In the EVENTDETAILS_PNL_ACTIONS.inc file, add the following section before the LBL_WEATHER definition:
Note: the ComboBox display_menu and submenu attributes should only be added when there are submenus defined using the Configuration Assistant.
<Label name="LBL_ANIMALS">
<LabelPlacement start="2,0" height="1" width="1" weight="0,0"
fill="NONE" insets="2,2,10,2" anchor="EAST"/>
</Label>
<ComboBox name="CMB_ANIMALS">
<ComboBoxPlacement start="3,0" height="1" width="1" weight="1,0" fill="HORIZONTAL"/>
<ComboBoxBehavior data_source="DS_EVENT_DETAILS.ANIMALS_OM" keys_data_source="DS_ANIMALS_OM.PANE_NAME" default_value="PROPERTY.UNSELECTED" display_menu="DISPLAY_MENU" submenu="SUBMENU">
<Editable initial="false"/>
<Enabled initial="false" when="!USER_VIEW_ONLY"/>
<SelectPerform>
<Command value="SetStatusFlagCommand">
<Config name="flag_names" value="EVENT_DETAILS_EDITED"
/>
<Config name="flag_values" value="true" />
</Command>
</SelectPerform>
</ComboBoxBehavior>
</ComboBox>
9. Create, or append to, the file EventDetails_en_US.properties with the following:
LBL_ANIMALS.text = Animals
10. If a menu title is changed or added, the post completion log properties need to be updated. In $NMS_CONFIG/jconfig/global/properties/JBotFormat_en_US.properties, search for this section:
# Substitutions for field name in the Post-Completion Edit Log
FIELD_NAME.REF_ID = Event #
FIELD_NAME.EMERG_SW_ORDER_TEXT = Switching Plan #
FIELD_NAME.DEVICE_TEXT = Device
FIELD_NAME.CONTROL_ZONE_TEXT = Zone
FIELD_NAME.SYSTEM_OM = System
FIELD_NAME.CAUSE_OM = Sub-System
FIELD_NAME.TYPE_OM = Type
FIELD_NAME.FAILURE_OM = Failure
FIELD_NAME.INTERRUPT_DEV_OM = Interrupting Device
FIELD_NAME.ADV_WEATHER_OM = Weather
FIELD_NAME.ADV_ENVIRON_OM = Environment
FIELD_NAME.VEGETATION_OM = Vegetation
FIELD_NAME.FOREIGN_INTERF_OM = Foreign Interference
FIELD_NAME.DEF_EQUIP_OM = Defective Equipment
Update the names to reflect the names you are using.
11. Run ant config.
12. Log into Web Workspace. You should now see the new option when you launch the Event Details window for an event.
Adding a Validation Rule
Scenario: You want to create a validation rule that requires the user to choose an animal in order to close Event Details.
1. Copy EVENTDETAILS_VALIDATION.inc from: ${NMS_BASE}/dist/baseconfig/product/ops/eventdetails/xml/ to the project eventdetails/xml folder.
2. Add the following line to the copied file:
<ValueCheck group_names="VERIFY_COMPLETE_FORM" check_type="value" fail_type="fail" ignore_blank="false" match_on="false" values="Unselected" prompt="Must fill in a value for Animals" widget_name="CMB_ANIMALS"/>
Note that in the EVENTDETAILS_MENUBAR.inc file, there is the following section which runs the validation:
<Command value="RunValidationCommand" when="!SWITCHING_EVENT">
<Config name="group" value="VERIFY_COMPLETE_FORM"/>
</Command>
Update Events Configuration
The Update Events window is a Work Agenda dialog box that allows users to update Event Details information for multiple jobs at the same time. The Update Events configuration files are found in ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/.
Adding Drop-Down Lists
1. Copy DLG_EVENTDETAILS_UPD.xml from: ${NMS_BASE}/dist/baseconfig/product/ops/workagenda/xml/ to the project workagenda/xml folder.
2. Add local DataStores definitions to the copied DLG_EVENTDETAILS_UPD.xml for each of the OM datastores used in Event Details. These DataStores should be renamed with a _DLG suffix so they do not conflict with those used in Event Details. For example:
<DataStoreClass name="DS_SYSTEM_OM_DLG" class="com.splwg.oms.client.eventdetails.PicklistGUIDataStore" table="picklist_gui" scope="local">
<PrimaryKey value="PARENT_PANE"/>
<PrimaryKey value="PICK_ENV"/>
</DataStoreClass>
3. Use these datastore names along with the categories in the calls to PopulateEventDetailsDlgCommand used in the dialog. These will usually correspond to the datastores and categories found in found in EVENTDETAILS_GLOBAL_PROPERTIES.inc. For example:
<Command value="PopulateEventDetailsDlgCommand">
<Config name="datastores" value="DS_SYSTEM_OM_DLG,DS_CAUSE_OM_DLG,DS_FAILURE_OM_DLG,DS_INTERRUPT_DEV_OM_DLG,DS_TYPE_OM_DLG,DS_ADV_WEATHER_OM_DLG,DS_ADV_ENVIRON_OM_DLG,DS_VEGETATION_OM_DLG,DS_FOREIGN_INTERF_OM_DLG,DS_DEF_EQUIP_OM_DLG,DS_SCHEDULED_DEV_OM_DLG,DS_HUMAN_ELEM_OM_DLG,DS_OTHER_CAUSE_OM_DLG,DS_REMEDY_OM_DLG,DS_PRIMARY_CAUSE_OM_DLG"/>
<Config name="categories" value="SYSTEM_OM,CAUSE_OM,FAILURE_OM,INTERRUPT_DEV_OM,TYPE_OM,ADV_WEATHER_OM,ADV_ENVIRON_OM,VEGETATION_OM,FOREIGN_INTERF_OM,DEF_EQUIP_OM,SCHEDULED_DEV_OM,HUMAN_ELEM_OM,OTHER_CAUSE_OM,REMEDY_OM,PRIMARY_CAUSE_OM"/>
</Command>
4. Configure the drop-downs to point to the datastore, and also add an associated check box, which should be set to toggle a <category name>_CHECKED field in the miscellaneous datastore. For example:
<ComboBox name="CMB_SYSTEM">
<ComboBoxPlacement start="1,0" height="1" width="1" weight="1,0" fill="HORIZONTAL"/>
<ComboBoxBehavior data_source="DS_EVENT_DETAILS_DLG.SYSTEM_OM" keys_data_source="DS_SYSTEM_OM_DLG.PANE_NAME" default_value="PROPERTY.UNSELECTED">
<Editable initial="false"/>
<Enabled initial="true" when="DS_EVENT_DETAILS_MSCL_DLG.SYSTEM_OM_CHECKED == 'Y'"/>
<SelectPerform>
<Command value="SetStatusFlagCommand">
<Config name="flag_names" value="EVENTDETAILS_UPD_MODIFIED" />
<Config name="flag_values" value="true" />
</Command>
</SelectPerform>
</ComboBoxBehavior>
</ComboBox>
<CheckBox name="CHK_SYSTEM_OM">
<CheckBoxPlacement start="2,0" fill="NONE" insets="2,9,2,10" weight="0,0" anchor="WEST"/>
<CheckBoxBehavior initially_selected="true" data_source="DS_EVENT_DETAILS_MSCL_DLG.SYSTEM_OM_CHECKED">
<Enabled initial="true"/>
<PressPerform>
<!-- Revert the value when we uncheck -->
<Command value="SetDataStoreValuesCommand" when="DS_EVENT_DETAILS_MSCL_DLG.SYSTEM_OM_CHECKED == 'N'">
<Config name="sources" value="DS_EVENT_DETAILS_DLG.system_om_original"/>
<Config name="targets" value="DS_EVENT_DETAILS_DLG.SYSTEM_OM"/>
</Command>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
5. Optionally, you can also update Equipment Failure fields by using the DS_EQUIP_FAIL_DLG. The Check box should update the <field>_CHECKED flag.
For example:
<TextField name="TXTF_SERIAL">
<TextFieldPlacement start="7,5" height="1" width="1" weight="1,0" fill="HORIZONTAL" insets="2,2,2,30" anchor="WEST"/>
<TextFieldBehavior data_source="DS_EQUIP_FAIL_DLG.SERIAL_TEXT" modify_flag="EVENT_DETAILS_EDITED">
<ValidValues type="string" max_characters="24"/>
<Enabled initial="false" when="DS_EVENT_DETAILS_MSCL_DLG.SERIAL_TEXT_CHECKED == 'Y'"/>
</TextFieldBehavior>
</TextField>
<CheckBox name="CHK_SERIAL_TEXT">
<CheckBoxPlacement start="8,5" fill="NONE" insets="2,9,2,10" weight="0,0" anchor="WEST"/>
<CheckBoxBehavior initially_selected="true" data_source="DS_EVENT_DETAILS_MSCL_DLG.SERIAL_TEXT_CHECKED">
...
</CheckBoxBehavior>
</Checkbox>
6. If desired, you can also update generic JOBS table fields. For example:
<TextField name="TXTF_POWER_UP_COUNT">
<TextFieldPlacement start="7,7" height="1" width="1" weight="1,0" fill="HORIZONTAL" insets="2,2,2,30"
anchor="WEST"/>
<TextFieldBehavior data_source="DS_EVENT_DETAILS_MSCL_DLG.power_up_count" modify_flag="EVENT_DETAILS_EDITED">
<ValidValues type="string" max_characters="24"/>
<Enabled initial="false" when="DS_EVENT_DETAILS_MSCL_DLG.power_up_count_CHECKED == 'Y'"/>
</TextFieldBehavior>
</TextField>
<CheckBox name="CHK_POWER_UP_COUNT">
<CheckBoxPlacement start="8,7" fill="NONE" insets="2,9,2,10" weight="0,0" anchor="WEST"/>
<CheckBoxBehavior initially_selected="true" data_source="DS_EVENT_DETAILS_MSCL_DLG.power_up_count_CHECKED">
<Enabled initial="true"/>
</CheckBoxBehavior>
</CheckBox>
7. You can also configure other PICKLIST_INFO_UPD_TR fields. For example:
<CheckBox name="CB_NO_DTR_FLAG">
<CheckBoxPlacement start="7,6" height="1" width="1" weight="0,0" fill="NONE" insets="2,0,2,2" anchor="WEST"/>
<CheckBoxBehavior data_source="DS_EVENT_DETAILS_DLG.NO_DTR_FLAG" initially_selected="false">
<Enabled initial="false" when="DS_EVENT_DETAILS_MSCL_DLG.NO_DTR_FLAG_CHECKED == 'Y'"/>
</CheckBoxBehavior>
</CheckBox>
<CheckBox name="CHK_NO_DTR_FLAG">
<CheckBoxPlacement start="8,6" fill="NONE" insets="2,9,2,10" weight="0,0" anchor="WEST"/>
<CheckBoxBehavior initially_selected="true" data_source="DS_EVENT_DETAILS_MSCL_DLG.NO_DTR_FLAG_CHECKED">
...
</CheckBoxBehavior>
</Checkbox>
Trouble Summary Configuration
The data that is displayed in Trouble Summary is populated by TSService on a timer controlled by the -period command-line option. Product configuration counts all outage, non-outage, and planned outage jobs. Change your version of the TJ_JOBS view to exclude other job types, if desired. The Trouble Summary offers the following configurable parameters.
refresh_period
Period of time (in seconds) between automatic updates of the Outage Summary information. This only makes the tool reload information from the database. It has no effect on how often TSService recalculates the data.
If set to 0 then periodic updating of Outage Summary is disabled.
Default: 600 seconds
damage_population_delay
Delay in milliseconds between row selection in the Outage Summary tree-table and start of the population of the Damage Summary panel for the selected control zone.
Default: 1500 ms
control_zone_separator
Character string used as a separator between individual control zone names when constructing full zone name. For example, OPAL/Stark/Lake would be the full zone name for the Lake control zone when / used as a separator.
Default: '/'
control_zone_depth
Number of control zone hierarchy levels to be displayed in Outage Summary table.
Value '-1' would cause full control zone tree to be displayed.
Default: 4
 
Viewer Configuration
Viewer configuration consists of defining the various model layers and defining application properties that control the Viewer behavior. The Viewer configuration is read by the application server and, consequently, updates to Viewer configuration require restarting WebLogic to deploy.
Adding a Separate Layer for SCADA Fuses
Viewer configuration consists of defining the various device layers and defining various properties that control the Viewer behavior. The layer configuration is read by the application server.
The layer definitions are found in ${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/SPATIALLAYERS_LAYERS.inc.
Scenario: You want to remove all SCADA-controlled fuses from the Underground Fuses layer and add them to a new SCADA Fuses layer for display in the Viewer. (This scenario is based on the characteristics of the OPAL model.)
1. Copy SPATIALLAYERS_LAYERS.inc from: ${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/ to the project viewer/xml folder.
2. Search for the Underground Fuses layer definition:
<Layer name="Underground Fuses"
active_on_start="true"
screen_selectable="true"
annotation_only="false"
dxf_layer="true"
condition_layer="false"
electrical_layer="true"
draw_order="6">
<Class name="rack_fuse_ug_hd"/>
<Class name="scada_fuse_ug_hd"/>
<Class name="scada_rack_fuse_ug_hd"/>
<Class name="fuse_ug_hd"/>
<Class name="rack_fusr_ss_hd"/>
<Class name="scada_fusr_ss_hd"/>
<Class name="scada_rack_fusr_ss_hd"/>
<Class name="fusr_ss_hd"/>
</Layer>
3. Copy the definition and paste the copy above the current definition. Edit the file to add a new SCADA Fuses layer definition and a modified Underground Fuses layer that does not include the SCADA fuse classes.
<Layer name="SCADA Fuses"
active_on_start="true"
screen_selectable="true"
annotation_only="false"
dxf_layer="true"
condition_layer="false"
electrical_layer="true"
draw_order="6">
<Class name="scada_fuse_ug_hd"/>
<Class name="scada_rack_fuse_ug_hd"/>
<Class name="scada_fusr_ss_hd"/>
<Class name="scada_rack_fusr_ss_hd"/>
</Layer>
<Layer name="Underground Fuses"
active_on_start="true"
screen_selectable="true"
annotation_only="false"
dxf_layer="true"
condition_layer="false"
electrical_layer="true"
draw_order="6">
<Class name="rack_fuse_ug_hd"/>
<Class name="fuse_ug_hd"/>
<Class name="rack_fusr_ss_hd"/>
Class name="fusr_ss_hd"/>
</Layer>
4. Copy DLG_VIEWER_HIDE_DISPLAY_LAYERS.inc from: ${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/ to the project viewer/xml folder. Edit the file to add the new hide/display settings:
Add a check box to toggle this new layer.
<CheckBox name="CHK_SCADA_FUSES">
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0"/>
<CheckBoxBehavior>
<PressPerform>
<Command value="ToggleLayersCommand">
<Config name="layers" value="SCADA Fuses"/>
</Command>
<Command value="RedrawCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
Label the button:
CHK_SCADA_FUSES.text = SCADA Fuses
5. Run nms-install-config --java
6. Restart WebLogic.
7. Start Web Workspace, open a Viewer, and start the Hide/Display tool to verify that SCADA fuses is listed as a layer.
Configuring Conductor Priority
Conductor priority and highlight coloring is defined by SPATIALLAYERS_CONDUCTOR_PRIORITY.inc:
<ConductorPriority>
<ConductorPriority>
<Code state="MULTISTATE"/>
<Code state="FAULTED"/>
<Code state="GROUNDED"/>
<Code state="DELEGATED"/>
<Code state="SECURE"/>
<Code state="ISOLATED"/>
<Code state="BIDIRECTIONAL"/>
<Code state="PARALLEL"/>
<Code state="MESH"/>
<Code state="DEGRADED" highlight_color="$deenergized"/>
<Code state="PHASE"/>
<Code state="MULTISTATE"/>
<Code state="SUSPECT_OPEN"/>
<Code state="DEENERGIZED" highlight_color="$deenergized"/>
<Code state="ENERGIZED"/>
<Code state="DIST_GEN" highlight_color="LIMEGREEN"/>
</ConductorPriority>
The codes are listed in priority order. Therefore, if a conductor is both FAULTED (third line) and GROUNDED (fourth line), the conductor will color as FAULTED.
The highlight_color is an optional definition of the highlight that will appear around the conductor with the indicated status. The highlight color will display for the first matching status with a highlight color, regardless of the main conductor color being used. If no status with a highlight_color matches, no highlighting will occur. All RGB colors are supported.
 
 
Configuring Big Symbols for Digital Measurements Symbols
If you wish to set big symbols for digital measurement symbols, add the following Symbol definition to SPATIAL_LAYERS_BIG_SYMBOLS.xml:
<Symbol class="digital" scale=".25"/>
If you wish to only set big symbols for some measurement keys or if you wish to use different scales for different symbols, define each symbol using the following syntax:
<Symbol class="digital:#" scale=".25"/>
where # is the measurement key from the SCADA system. For example:
<Symbol class="digital:2" scale=".15"/>
<Symbol class="digital:3" scale=".25"/>
Note: you cannot set a separate definition for a particular symbol by adding it separately from the <Symbol class="digital" scale=".25"/> definition. For example, the following is not allowed:
<Symbol class="digital" scale=".25"/>
<Symbol class="digital:3" scale=".15"/>
Changing the Viewer Background Color
The Viewer's GUI configuration is defined in ${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/VIEWER_GLOBAL_PROPERTIES.inc.
Scenario: You want to change the background color of the Viewer drawing area.
1. Copy VIEWER_GLOBAL_PROPERTIES.inc from: ${NMS_BASE}/dist/baseconfig/product/ops/viewer/xml/ to the project viewer/xml folder.
2. Copy ColorSchemes.properties from: ${NMS_BASE}/dist/baseconfig/product/global/properties/ColorSchemes.properties to the project global/properties folder.
3. Modify the light.viewer_canvas_background line in ColorSchemes.properties from:
light.viewer_canvas_background=241,243,248
to
light.viewer_canvas_background=black
4. Run nms-install-config --java
5. Restart WebLogic.
6. Start Web Workspace, open a Viewer, and verify that the background color is now black. (If you aren't using the Light Theme, you'll need to set that in User Interface Settings, log out, and log in again to see the changes.)
Changing the Study Mode Border Color and Thickness
The color and thickness of the study mode border for light/dark themes can be modified by changing these properties of the ColorScheme.properties file:
default.StudyModeBorder.width=20
dark.StudyModeBorder.color=#25AA3FCC
light.StudyModeBorder.color=#1E8931CC
Note that the hex values above include an alpha value so it is semi-transparent and the border does not obscure the items underneath it.
Scenario: You want to change the background color of the Viewer drawing area.
1. Copy ColorSchemes.properties from: ${NMS_BASE}/dist/baseconfig/product/global/properties/ColorSchemes.properties to the project global/properties folder.
2. Modify the light.viewer_canvas_background line in ColorSchemes.properties from:
light.StudyModeBorder.color=#1E8931CC
to
light.StudyModeBorder.color=#38ACFFCC
3. Run nms-install-config --java
4. Restart WebLogic.
5. Start Web Workspace, open a Viewer, switch to study mode, and verify that the border color is now blue. (If you aren't using the Light Theme, you'll need to set that in User Interface Settings, log out, and log in again to see the changes.)
 
 
 
Configuring Hide-Display Conditions
The Hide/Display dialog can be configured to have the Viewer show (or not show) conditions based upon attributes or condition status.
Note: For technical reasons, crew status values must subtract one. So to match a crew status 3, you would use "2" as the value.
1. In VIEWER_HIDE_DISPLAY_CONDITIONS_SETUP.inc, add lines defining the status that should be controlled.
For example, adding Service and Trouble crew types to one layer:
<Command value="SetupConditionFilterCommand">
<Config name="column" value="crew_0_1"/>
<Config name="class" value="truck_location"/>
<Config name="status" value="0,1"/>
</Command>
<Command value="SetupConditionFilterCommand">
<Config name="column" value="crew_2"/>
<Config name="class" value="truck_location"/>
<Config name="status" value="2"/>
</Command>
<Command value="SetupConditionFilterCommand">
<Config name="column" value="crew_3"/>
<Config name="class" value="truck_location"/>
<Config name="status" value="3"/>
</Command>
<Command value="SetupConditionFilterCommand">
<Config name="column" value="crew_4"/>
<Config name="class" value="truck_location"/>
<Config name="status" value="4"/>
</Command>
where
column is an arbitrary name in the DS_VIEWER_DEFAULT datastore that the checkbox will be bound to.
class is the class of the condition.
status is a comma delimited list of statuses.
2. Modify DLG_VIEWER_HIDE_DISPLAY_CONDITIONS.inc to match this configuration:
<SubPanel name="PNL_CREWS_SUB_PANEL">
<PanelPlacement start="0,250" weight="1,0" insets="2,2,2,2"/>
<CheckBox name="CHBOX_HD_CREW_0_1" >
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0" />
<CheckBoxBehavior data_source="DS_VIEWER_DEFAULT.crew_0_1" data_source_value_type="true/false" initially_selected="true">
<PressPerform>
<Command value="RefreshCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
<CheckBox name="CHBOX_HD_CREW_1" >
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0" />
<CheckBoxBehavior data_source="DS_VIEWER_DEFAULT.crew_1" data_source_value_type="true/false" initially_selected="true">
<PressPerform>
<Command value="RefreshCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
<CheckBox name="CHBOX_HD_CREW_2" >
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0" />
<CheckBoxBehavior data_source="DS_VIEWER_DEFAULT.crew_2" data_source_value_type="true/false" initially_selected="true">
<PressPerform>
<Command value="RefreshCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
<CheckBox name="CHBOX_HD_CREW_3" >
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0" />
<CheckBoxBehavior data_source="DS_VIEWER_DEFAULT.crew_3" data_source_value_type="true/false" initially_selected="true">
<PressPerform>
<Command value="RefreshCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
<CheckBox name="CHBOX_HD_CREW_4" >
<CheckBoxPlacement start="0,relative" weight="0,0" insets="0,0,0,0" />
<CheckBoxBehavior data_source="DS_VIEWER_DEFAULT.crew_4" data_source_value_type="true/false" initially_selected="true">
<PressPerform>
<Command value="RefreshCommand"/>
</PressPerform>
</CheckBoxBehavior>
</CheckBox>
</SubPanel>
 
The key is to configure the data_source, which should match the previous step. The RefreshCommand will refresh the viewer with the new settings.
Configure Search Options
Adding a New Search
Add the search entry datastore. The name of the datastore must be in the format of DS_VIEWER_XX_SEARCH_DATA.
In VIEWER_SEARCH_DATASTORES.inc, add the line:
<DataStoreClass name="DS_VIEWER_MY_SEARCH_DATA" scope="local"/>
Next add the text field(s) for the user to enter the search criteria to DLG_VIEWER_SEARCH (modify a copy of an existing search):
<SubPanel name="PNL_SEARCH_BY_MY">
<PanelPlacement start="2,relative" height="1" width="2" weight="1,1" insets="2,2,5,2" fill="HORIZONTAL" anchor="CENTER"/>
<Label name="LBL_LEFT_DUMMY_SPACER">
<LabelPlacement start="0,0" width="1" height="1" weight="0,1" fill="BOTH"/>
</Label>
<Label name="LBL_RIGHT_SPACER">
<LabelPlacement start="4,0" width="1" height="1" weight="0,1" fill="BOTH" ipad="3,0"/>
</Label>
<Label name="LBL_SEARCH_TEXT_MY>
<LabelPlacement start="1,0" insets="2,2,0,2" anchor="WEST" fill="HORIZONTAL"/>
</Label>
 
<TextField name="TXTF_VIEWER_SEARCH_MY_NAME">
<TextFieldPlacement start="3,relative" height="1" weight="0,0" insets="1,1,1,1" fill="HORIZONTAL" anchor="WEST"/>
<TextFieldBehavior columns="20" data_source="DS_VIEWER_MY_SEARCH_DATA.MY_NAME ">
<ReturnPerform>
<Command value="ExecuteActionCommand">
<Config name="action" value="SEARCH_ACTION"/>
</Command>
</ReturnPerform>
<Perform name="Focus" category="focusGained">
<Command value="ExecuteActionCommand">
<Config name="action" value="CLEAR_SEARCHES"/>
<Config name="$ENABLED_FLAG$" value="MY_PARAM_ENABLED"/>
</Command>
</Perform>
<ValidValues max_characters="32"/>
</TextFieldBehavior>
</TextField>
</SubPanel>
Then add this to the SEARCH_ACTION section:
<Command value="ViewerSearchCommand" when="MY_PARAM_ENABLED">
<Config name="dialog" value="DLG_VIEWER_MY_SEARCH_RESULT"/>
<Config name="query" value=
"select h_cls, h_idx, my_name from my_table
where
$(my_name: DS_VIEWER_MY_SEARCH_DATA.MY_NAME)
order by my_name"/>
<Config name="device_alias" value="my_name"/>
<Config name="device_handle" value="h_cls.h_idx"/>
<Config name="partition_handle" value="p_cls.p_idx"/>
</Command>
The config options are:
query: The query to perform. Text in $(…) indicates replacements.
device_handle: Columns of the handle of the device. If the device class and index are in columns h_cls, and h_idx, the value will be: "h_cls.h_idx"
device_alias: The column of the alias of the device. The search can work with either the handle or the alias of the device. If the device_alias is configured, it will use it for the displayed alias in the viewer.
partition_handle: The columns of the device partition. It is in the format of p_cls.p_idx. If the device_handle is included but not the partition hande, it will focus on the first partition.
coordinates: If two coordinates are provided, it represents the upper left corner and lower right corners of the bounding box. otherwise it indicates the center.
coord_system: The column containing coordinate system to search. This is an optional parameter only used when the coordinates are specified. If not defined it will use 0.
area_name: The column containing the name of the area or intersection that should be displayed as the name in the viewer.
More information about the ViewerSearchCommand is available in the online JBot Command Reference; see page 17-15 for information on the online documentation.
Next, determine if you can use an existing _SEARCH_RESULT dialog or you need a new one. You can use an existing dialog if you the result set is compatible with an existing dialog. For example, if you have a special query that returns certain devices, you can use DLG_VIEWER_DEVICE_SEARCH_RESULT. However, if you wish to display different columns in the result, you will need to create a custom result dialog. In that case, copy and modify a dialog that is close to what you require.
Ensure that the dialog you require is configured in the ViewerSearchCommand under the "dialog" parameter.
Replacement Rules
The above matching syntax ($(my_name: DS_VIEWER_MY_SEARCH_DATA.MY_NAME) will translate into a like, equals, soundex, or upper() version of the columns as needed. However, if there is a need to not follow the sort options, but search for something directly, just use the datastore name as a replacement value without the colon:
<Config name="query" value=
"select h_cls, h_idx, my_name from my_table
where
my_name = $(DS_VIEWER_MY_SEARCH_DATA.MY_NAME)
order by my_name"/>
Configuring Condition Tooltips
When the mouse is hovered over a condition symbol (that is, a tag, note, document, call, clue, or damage assessment), it will display information about the condition. This can be modified by using a custom Java class that extends com.splwg.oms.client.viewer.Tooltip. See the example, demo.CustomTooltip, as part of the OPAL project. Variables are specified by enclosing them within ${}. They can either refer to text that is included in Viewer_en_US.properties, or else the datastore associated with the condition. To see all the available columns in the datastore run a datastore report (Creating the JBot DataStore Report).
Configuring a Specific Trace Type
If you desire additional Trace To <device> options, add them to the DLG_VIEWER_TRACE.xml in the following way:
1. Add a new keyword to the CMB_TRACE_TO ComboBox.
2. In the ACT_TRACE definition, add a <Command> that executes when DS_VIEWER_DEFAULT.TRACE_TO matches your new keyword. Pass the desired device class name as the "device_cls" argument to this Command.
3. Label the option in the DLG_VIEWER_TRACE_en_US.properties file using CMB_TRACE_TO.<keyword>.text
For example, we will use the new keyword EXAMPLE and a device class called example_device_cls.
In DLG_VIEWER_TRACE.xml
<ComboBox name="CMB_TRACE_TO">
...
+ <Key value="EXAMPLE"/>
...
<Action name="ACT_TRACE">
...
+ <Command value="TraceCommand" when="DS_VIEWER_DEFAULT.TRACE_TO == 'EXAMPLE'">
+ <Config name="type" value="TRACE_TO_DEVICE_CLASS"/>
+ <Config name="device_cls" value="example_device_cls"/>
+ </Command>
...
In DLG_VIEWER_TRACE_en_US.properties:
+ CMB_TRACE_TO.EXAMPLE.text = Example Device Class
Configuring Viewer Map Loading Limits
There are a few limits that work together:
<IntegerProperty name="viewer.max_maps_error" value="550"/>
This will be the largest number of maps that the client will try to request from the server.
<IntegerProperty name="viewer.max_devices" value="100000"/>
This is the largest number of devices that can be returned by the server. The server keeps a tally of the number of objects as it puts together the map list, and if it is exceeded, it returns an error. This means that there is some extra load put on the server to load the maps (especially if the maps have not been loaded before), but, because it fails before trying to send the results back to the client, it is still rather quick.
Finally, there is the WebLogic maxmessagesize, which is the maximum size of an object that can be transferred. This results in a failure after returning 50 MG to the client (or whatever the max is set to by the project).
The point of these settings is to keep the user from choosing too many maps, and minimizing the impact if too many are chosen. If the first limit is hit, there is no load on the server. If the second is hit, there is some load, but the server gives up before things get unreasonable. You do want to avoid routinely hitting the maxmessagesize; you will receive a more generic error message, and the server goes through all the work to return the maps, only to fail when the return size is too large.
You can determine how large the maps are by various debug settings.
Enabling the warn_if_over_bytes setting in CentricityTool.properties will log the size of large messages requests. You can see if the return values are close to the 50 MB default maxmessagesize.
Another helpful setting is the VIEWER_TIMING client debug, which Bug 26307332 added printing the number of object and vertices downloaded. This can be enabled through the help menu.
One thing to note: You really do need to experiment with those limits to determine the appropriate settings for max maps.
If a project has maps with less objects and vertices per map, then the limits can be safely raised. If the maps are large and many vertices, then the product values might be too high. So you cannot assume that the product values are safe (and raising them is risk) so you need to find a limit that works for the project.
Configuring Viewer Tooltips
Tooltips are rendered using html of various datastore values. The configuration can be modified by overriding Tooltip.java. To use a project specific configuration modify this line in the viewer configuration:
<StringProperty name="viewer.tooltip_class" value="com.splwg.oms.client.viewer.Tooltip"/>
There is an example in the opal configuration, which is a copy of the product configuration in OPAL/jconfig/java/src/demo/CustomTootip.java.
So to use that version, copy CustomTooltip.java to your project and modify the viewer configuration to:
<StringProperty name="viewer.tooltip_class" value="demo.CustomTooltip"/>
See CustomTooltip.java for details.
Trending Graphs Configuration
The data to display, most labels, and date ranges, etc, are configurable using standard JBot commands. However, if a project wants to customize the graph further, it can be done by overriding the Oracle JET components by saving project specific versions to $NMS_CONFIG/jconfig/public_html.
The files that generally could be overridden are:
js/views/chart.html
js/views/outage_chart.html
js/viewModels/chart.js
js/viewModels/outage_chart.js
 
The JBot Commands that populate this are PopulateGraphCommand and PopulateOutageGraphCommand.
Feeder Load Management Configuration
Feeder Load Management Global Properties may be modified as follows:
max_flm_tools: Set the maximum number of tools that may be started; default value is 2.
refresh_minutes: Set the number of minutes before the calculations are refreshed; default value is 3 using the IntegerProperty. Fractional values are allowed using the DoubleProperty element; see example that follows.
Scenario: Configure Feeder Load Management to refresh every 90 seconds.
The product configuration sets refresh_minutes using the IntegerProperty element. The refresh time for this scenario is equal to 1.5 minutes, a fractional time that is not valid for an IntegerProperty.
1. Copy FLMSummary.xml from: ${NMS_BASE}/dist/baseconfig/product/ops/flm/xml/ to the project flm/xml folder.
2. Open the new product version of FLMSummary.xml.
3. In the Global properties element:
<GlobalProperties>
<StringProperty name="product_name" value="FLM"/>
<IntegerProperty name="max_flm_tools" value="2"/>
<!-- How often you allow the FLM Summary to automatically
refresh, in minutes. -->
<IntegerProperty name="refresh_minutes" value="3"/>
</GlobalProperties>
4. Change:
<IntegerProperty name="refresh_minutes" value="3"/>
to
<DoubleProperty name="refresh_minutes" value="1.5"/>
Model Management Application Configuration
The Model Management application provides a user interface for viewing status of model build related events (full builds, patches, and pending maps) and initiating a model build scripts. The tool may be configured to run the model build scripts in the background or to run them synchronously and display the result in a dialog.
Scenario: You want to configure the Model Management application to rerun model build patches in the background.
This scenario relies on the behavior of the BuildPatchCommand command. Whenever the command is called, you may pass the nohup command (to make the command run in the background) along with the script to run. Model Management has two files that utilize the BuildPatchCommand:
DLG_BUILD_MAP.xml: controls the actions when Build Map... is selected from the Model Management tool’s Action menu.
ModelManagement.xml: the primary configuration file for the Model Management tool; includes the menu action for building a patch.
1. Copy ModelManagement.xml from: ${NMS_BASE}/dist/baseconfig/product/ops/model_management/xml/ to the project model_management/xml folder.
2. Add nohup to the MNU_RESUBMIT_PATCH popup menu command:
<PopupMenuItem name="MNU_RESUBMIT_PATCH"
class="javax.swing.JMenuItem">
<Enabled initial="false" when="TBL_PATCHES_SELECTED"/>
<PressPerform>
<Command value="BuildPatchCommand">
<Config name="command" value="nohup nms‑build‑maps"/>
<Config name="arg_01" value="-noVerify"/>
<Config name="datastore" value="DS_PATCHES"/>
</Command>
</PressPerform>
</PopupMenuItem>
 
Note: This example uses the standard nms‑build‑maps script, but you may substitute a custom version by copying the script to the project scripts folder and modifying that file.
 
DMS Summary Tool Configuration Guide
Rule Name
Valid values
Description
LEFT_PANE_DEVICES_QUERY
String
This is query to get devices from DB to display in left pane. The summary of these devices is shown in summary pane.
NO_OF_SUM_BUTTONS
Number Value
This is the number of different summaries to display in Summary panel
SUMMARY_QUERIES
Comma Delimited List of SQL query names
This is the list of SQL queries that need to be executed to get various summaries to display in summary panel
SUM_BTN.x.title
String
This is the title to display for the x button.
Where, x is between 1 and NO_OF_SUM_BUTTONS.
For example:
SUM_BTN.1.title = Grid Load
SUM_BTN.x.num_desc
Number Value
This is the number of different descriptions to display in button x.
Where, num_desc is between 1 and 3.
For example:
SUM_BTN.1.num_desc = 3
SUM_BTN.x.desc.y
String
This is the string for description y for button x.
Where y is between 1 and num_desc.
For example:
SUM_BTN.1.desc.1=Energized: (#DER_ON}
 
Where #DER_ON is a column defined in DS_SUMMARY data store. When the DMS Summary window is displayed and if the default format is followed, then the window shows the summary button SUM_BTN1 with a description something like:
Energized: 6 / 8
SUM_BTN.x.DEV_QUERY
String
This is the SQL query to be executed to get the list of devices for the summary button x when it is selected.
 
Example of summary definition in DMS Summary properties file.
LEFT_PANE_DEVICES_QUERY=SUMMARY_FDRS_QUERY
NO_OF_SUM_BUTTONS=6
SUMMARY_QUERIES=SUMMARY_GRID_SOURCE_QUERY,SUMMARY_DER_QUERY,SUMMARY_FDR_LOAD_QUERY,SUMMARY_SHUNT_CAPS_QUERY,SUMMARY_SWITCHES_QUERY,SUMMARY_XFMRS_QUERY
SUM_BTN.1.title=Grid Load
SUM_BTN.1.num_desc=1
SUM_BTN.1.desc.1=Total Load: {SRC_OUTPUT} MVA
SUM_BTN.1.DEV_QUERY=SUMMARY_GRID_SOURCE_DEV_QUERY
 
SUM_BTN.2.title=DERs
SUM_BTN.2.num_desc=3
SUM_BTN.2.desc.1=Energized: {#DER_ON}
SUM_BTN.2.desc.2=Capacity: {DER_RATED_SIZE} kVA
SUM_BTN.2.desc.3=Output: {DER_OUTPUT} kVA
SUM_BTN.2.DEV_QUERY=SUMMARY_DER_DEV_QUERY
 
The result of summary queries are stored in DS_SUMMARY data store and the column names are output of the queries executed. All columns are stored as string values. You can either use them as it is or provide your own definition like #DER_ON as below definition.
<DataStoreClass name="DS_SUMMARY" class="com.splwg.oms.jbot.DefaultDataStore" scope="local">
<Column name="#DER_ON" definition="#DER_ON,DER_CNT%JBotFormat.DMS_SUMMARY.X_OUT_OF_Y"/>
</DataStoreClass>
Understanding DmsSummaryParameters.properties File
All SQL queries that are being used by DMS Summary tool are defined in this file. You need to make sure these queries are executable without errors. The queries are having placeholders that are replaced by required data by the tool at run time as described below. Alternatively, you can replace the placeholders with the required data.
$USER_CONTROL_ZONES$
This is replaced by the control zones for which the user is subscribed to.
$SELECTED_FEEDERS_IN_CLAUSE$
This is replaced by the devices (feeders) selected in the left pane of the DMS Summary tool.
 
Note: The tool will not work as expected if the names of these placeholders are changed.
 
Right-To-Left Language Configuration
Application configuration for Right-To-Left languages, such as Arabic, is configured through the CentricityTool.properties and the ImageLocalize.properties files.
Note that symbology file tooltips may be localized by editing the .sym files. See Chapter 8, Building the System Data Model, for details on sym files.
CentricityTool.properties
Text direction is defined in ${NMS_BASE}/dist/baseconfig/global/properties/CentricityTool.properties.
1. Copy CentricityTool.properties from: ${NMS_BASE}/dist/baseconfig/product/global/properties/ to the project global/properties folder.
2. Modify the text.direction line from:
text.direction = LTR
to
text.direction = RTL
ImageLocalize.properties
The ImageLocalize.properties file is used to override the XML files that define images/icons. The file is located in ${NMS_BASE}/dist/baseconfig/global/properties/. The file has defined image files that will be flipped if RTL is set in CentricityTool.properties. You may also substitute other files by adding a substitution statement.
Scenario: You want to substitute an image for the info_ena.png () file.
1. Copy ImageLocalize.properties to the project global/properties folder.
2. Edit the file:
# The following lists those file that should be flipped or changed
# when displaying in another language.("flip" is used for "RTL"
# with arrows)
 
info_ena.png = your_file.png
 
oracle/javatools/icons/navigateBack.png = flip
oracle/javatools/icons/navigateForward.png = flip
textBigger.gif = flip
textSmaller.gif = flip