This chapter covers the following topics:
This chapter describes setup tasks that you perform to Oracle Configurator that are specific to the Oracle Telecommunications Service Ordering (TSO) solution.
Before you can set up Oracle Configurator for use with the Oracle TSO solution, you must set up Oracle Bills of Material, Oracle Installed Base, and Oracle Order Management.
In addition to this chapter, there is another chapter on setting up Oracle Configurator for use with the TSO solution, Set Up Oracle Configurator Extensions.
Following is the setup checklist for implementing TSO-specific functionality for Oracle Configurator.
Setup Step | Required/Optional |
---|---|
Implement Oracle Configurator | Required |
Create Configuration Model | Required |
Publish Container Model | Required |
Define Profile Options | Required |
Disable Pricing | Optional |
Customize Oracle Configurator | Optional |
For more information on functionality, setting up, or using Oracle Configurator, refer to:
Oracle Configurator Developer User's Guide
Oracle Configurator Implementation Guide
Oracle Configurator Installation Guide
Oracle Configurator Extensions and Interface Object Developer's Guide
Oracle Configurator Methodologies
Oracle Configurator About documentation
This section discusses Oracle Configurator concepts you need to be familiar with before implementing a TSO solution.
Some of the diagrams that appear in this chapter show the structural relationship between Connectors and Components of a Model. The following sample diagram and table show and describe the conventions for the Model diagrams.
The following table refers to the preceding diagram.
You can mark Oracle Bills of Material (BOM) Models within a Container Model as trackable. You can also mark BOM Option Classes and BOM Standard Items as trackable if they are inside a BOM Model. Tracking enables Oracle Installed Base to record information about an instance of that item, including its location, status, current configuration, change history, and so on. You must define the Container Model itself as non-trackable. Oracle Installed Base does not record information about non-trackable items. For more information about making an item Installed Base trackable, see the chapter, Set Up Installed Base.
Before an end user can reconfigure any of a Container Model's installed configurable instances, the Container Model must meet certain requirements, such as a valid Container Model structure, Connectors, and rules, to ensure that the configured items are trackable in Oracle Install Base. For more information about the necessary requirements, see the section, "Container Model Settings and Structure", below, and the chapter, Set Up Install Base.
The following list identifies the requirements for a Container Model in Oracle Inventory and Oracle Bills of Material.
A Pick-to-Order (PTO) BOM Model
Be trackable
Reference another Container Model. In other words, a Container Model cannot be a Component within another Container Model
Contain more than one effective reference to the same trackable BOM Model; for more information about references and effectivities, see the Oracle Configurator Developer User's Guide.
Contain a non-trackable BOM Model with trackable children--one or more BOM Option Classes or BOM Standard Items
Contain any BOM Models or BOM Option Classes that have a default quantity greater than 1.
Have any trackable BOM Standard Items or trackable BOM Option Classes as direct children
For example, the following figure shows BOM trackable items StndItem1, StndItem2, and BOM OC 1. This structure is invalid because these BOM items are all direct children of the Container Model.
Invalid Container Model Structure
Container models can contain Standard Items that are tangible. See Tangible Items for details.
For more information on creating or specifying Container Models, see the chapter, Set Up Inventory.
To develop a Container Model in Oracle Configurator Developer, you must import the Oracle Inventory and BOM data into the Oracle Configurator (CZ) schema of the Oracle Applications database. For information about populating the CZ schema, see the Oracle Configurator Implementation Guide.
The concurrent programs under Populate and Refresh Configuration Models in Oracle Applications import the completed bills of material into the Oracle Configurator schema. Run the concurrent programs from the Oracle Configurator Administrator menu.
These concurrent programs import BOM structure (assemble-to-order, PTO, or Container Models, structure, and rules) and require complete BOMs that are identified at the desired root.
The concurrent programs under Populate and Refresh Configuration Models in Oracle Applications include:
Populate Configuration Models: Populates the CZ schema online tables with data that is appropriate for creating configuration Models that are based on existing BOM or legacy data.
Refresh a Single Configuration Model: Updates a specific BOM Model with any changes that may have been made in Oracle Applications since the time the BOM was first imported into the CZ schema.
Refresh all Imported Configuration Models: Updates all of the BOM Models that were imported into the specific database instance that the user is logged into.
Disable/Enable Refresh of a Configuration Model: Enables the user to prevent specific configuration Models from being refreshed if the Refresh all Imported Configuration Models concurrent program is run.
When importing a container BOM Model, the system creates a Model node in Oracle Configurator Developer. If the imported Model has Components that are assemble-to-order (ATO) or PTO Models, then the import process creates:
If a Standard Item is marked as Shippable, Inventory Transactable, and Serializable, then it is imported as a tangible item. See Tangible Items for details.
Note that the importing of a BOM Model into Oracle Configurator Developer is not TSO-specific functionality. The preceding section sets the context for what may happen when a BOM Model that is also a container is imported or refreshed into Oracle Configurator Developer.
The concurrent programs under Populate and Refresh Configuration Models do not verify that all of the settings that you selected when defining a Container Model in Oracle Applications are correct. If a Container Model violates any of the requirements listed in this section, an error occurs only when you generate logic in Configurator Developer, not when you import or refresh the Model.
The Refresh a Configuration Model and the Refresh all Imported Configuration Models concurrent programs check only two settings that you specify in Oracle Applications. When you refresh a Container Model, the concurrent program displays:
A warning, if the Configuration Model Type changed from Container to Standard. The Refresh concurrent programs do not display a warning if you changed the Configuration Model Type from Standard to Container.
An error, if any of the Container Model's child BOM Models capable of multiple instances changed from a PTO to an ATO BOM model. For example, the Instantiability Initial Minimum and Initial Maximum values for Model X (a PTO Model) are not equal in Configurator Developer. In Oracle Inventory, you change Model X from a PTO Model to an ATO Model. When you refresh the Container Model, the concurrent program displays an error.
In a Container Model, if one of the trackable child Models does not have a trackable parent or ancestor, there cannot be a limit on how many instances of that trackable child Model can be created at runtime. In other words, the trackable BOM Model's Instantiability setting must be Multiple or Variable Instances with an Initial Minimum of 0 and Initial Maximum of null in Configurator Developer.
If the Initial Minimum and Initial Maximum values are not 0/null, respectively, for a trackable item, Configurator Developer displays an error when you generate logic. A trackable item can contain both trackable and non-trackable items, such as BOM Models and Option Classes, as well as Components created in Configurator Developer.
Note: The first time you import a Container Model, the Populate Configuration Models concurrent program sets the Initial Minimum and Initial Maximum values to 0/null, respectively, for all trackable child BOM Models. However, refreshing a Container Model does not reset these values if you change them in Oracle Configurator Developer. If the Model's structure violates any of the requirements listed in this section, Oracle Configurator Developer displays an error when you generate logic.
Because you can create multiple instances of such a BOM Model during configuration, and Oracle Install Base tracks these instances when they are installed, a BOM Model matching this criteria is a trackable item. An example of a trackable item appears in the figure below.
Remember that you can only track BOM items, and that Oracle Install Base only records information about trackable BOM items.
Example of Trackable Items
In the above figure, PTO Trackable1 and PTO Trackable3 are trackable items because they are themselves trackable and do not have a trackable parent or ancestor. Therefore, you must set the Instantiability Initial Minimum and Initial Maximum values to 0 and null, respectively. The figure shows these settings as 0/null.
Note that the Initial Minimum and Initial Maximum values for PTO Trackable 2 and PTO Trackable 4 are not set to 0/null. This is because a trackable Model that is a child or a descendant of a trackable item does not have the same configuration requirements as a trackable item. That is, the trackable child item does not have to obey the rule when no instances exist, as long as the following is true:
The configuration session begins
There is no limit to how many instances the end user can create
Refer to the Oracle Configurator Developer User's Guide for more information about creating multiple instances of Components during configuration.
This section provides examples of how trackable items can impact the validity of a Container Model's structure in Oracle Configurator Developer.
In a Container Model, a trackable descendant Model can be a child of a non-trackable Model only if the non-trackable Model's Initial Minimum and Initial Maximum values are both set to 1, and:
The trackable Model's Initial Minimum and Initial Maximum values are 0/null (see the figure, Valid Model Structure: Non-Trackable Parent and Trackable Child, below)
or
Another trackable Model whose instances values are 0/null is the parent of the non-trackable Model (see the figure, Valid Model Structure: Trackable Child and Trackable Ancestor, below)
Valid Model Structure: Non-Trackable Parent and Trackable Child
In the figure above, the Model structure is valid because the Initial Minimum and Initial Maximum for Trackable2 equals 0/null.
Valid Model Structure: Trackable Child and Trackable Ancestor
Although Trackable2 is a child of NonTrackable2, the structure shown in the second figure is valid because the Initial Minimum and Initial Maximum for Trackable1 equal 0/null and Trackable1 is an ancestor of Trackable2. Because Trackable1 is a trackable item, an Oracle Install Base or Oracle Quoting user can select an installed instance of Trackable1 and launch Oracle Configurator to reconfigure it.
The following shows an invalid structure. It is invalid because NonTrackable's Initial Minimum equals 0.
Invalid Model Structure: Non-Trackable Parent and Trackable Child
If an Oracle Install Base or Oracle Quoting user selects an instance of Trackable2 for reconfiguration, its parent (NonTrackable) is not part of the configuration when the Oracle Configurator session begins. Therefore, Oracle Configurator cannot add an instance of Trackable2 to the configuration either.
In the following figure, Trackable2 is the first trackable BOM Model in the Container Model's structure. However, its instances values are not 0/null.
Invalid Model Structure: Non-Trackable Parent and Trackable Child
This structure is invalid because although you can configure and track Trackable2 in Oracle Install Base, there is a restriction on how many instances of Trackable2 are allowed at runtime.
Oracle Install Base tracks the relationships that connections form between Components. Oracle Install Base keeps a record only of trackable BOM items, so any connections made at runtime must be from an instance of a trackable BOM Model to instances of other trackable BOM Models.
Because Oracle Install Base keeps a record of connected instances only if they are trackable, any Connectors that you create within a Container Model in Oracle Configurator Developer must be valid. If a Container Model contains Connectors that violate any of the requirements listed in this section, Oracle Configurator Developer displays an error when you generate logic.
Connectors enable you to define rules that include nodes from trackable items as participants. For more information, see the section, "Using Configuration Rules", above.
When working in a Container Model in Oracle Configurator Developer, you must create Connectors only from:
A trackable BOM Model to another trackable BOM Model
A non-trackable BOM Model to another non-trackable BOM Model
You must not create Connectors:
From the Container Model's root node to any Model that is a child of a trackable Model
For example, a Container Model references a trackable Model named PTO1. PTO1 references a non-trackable Model named PTO2. You create a Connector from the Container Model to PTO2. Because you created a Connector from the Container Model to a Model that is a child of a trackable Model, Oracle Configurator Developer displays an error when you generate logic.
Within a trackable Model to a non-trackable Model that has the trackable Model as an ancestor (see the following figure)
Invalid Connectors
In the above figure:
Connectors C1, C2, and C3 are invalid because you cannot connect a trackable Model and a non-trackable Model.
Connectors C4 and C5 are allowed because the Connectors' parent and target are both non-trackable Models (in other words, they do not cause an error when you generate logic)
But there are differences. Connector C5 has only a non-trackable target in NonTrackable5. Connector C4 has a non-trackable target with Model NonTrackable4 being a child of the Container. The Model NonTrackable4 is also a child of Trackable4, but these instances would be excluded from consideration by the Connector, and will not appear in the list of eligible targets.
Note: In Oracle Configurator Developer, when you select a BOM Model node, the BOM Item Type field indicates whether it is an ATO, PTO or Container Model. Additionally, when you select any BOM node, the Trackable check box indicates whether the item is trackable. You can expand the Definition attribute to view these settings.
A network Link item is a BOM Model that connects trackable items. At runtime, an instance of a Link item connects instances of trackable items. In the TSO context, a Link item has only one unique aspect: it does not require that a location be assigned to it. For an explanation of the need for location information, see Locations.
An item is defined as a Link in Oracle Inventory, as described in Set Up Link Items. To determine at runtime whether a trackable item instance is a Link, Oracle Configurator checks whether the item's link flag is set to true. The link flag is described in Link Items Column. The link flag setting for a BOM Model is part of the structure that is imported with the Model.
In Oracle Configurator Developer, you must complete the definition of a Link by adding exactly two child Connectors to a BOM Model having a link flag set to true, to specify the connections that are valid between trackable items at runtime.
A transient item is a BOM Standard Item used for the purpose of pricing a non-recurring service or fee. This concept is narrower than that of a one-time charge.
The ordering of a wireless phone may be a one-time charge that requires a 1-time fulfillment. This charge can also be trackable, in which case it reappears during a subsequent reconfiguration of the service. Another type of charge associated with changing a service, such as an installation fee or a service termination fee, is also a 1-time charge, but should never reappear during a subsequent reconfiguration of a service. Such items are termed transient.
Transient items are not trackable. They are never installed as instances in Installed Base. They do not appear in Oracle Configurator when the item they were initially ordered with is reconfigured. To ensure that these items do not appear during reconfiguration (where they might confuse the end user), you must use the transient flag to designate the transient items in your configuration Model.
Transient items can never be discontinued. Consequently, the method RuntimeNode.isDiscontinued() always returns false when used on a node that is a transient item or attribute. See About Discontinued Items for an explanation of discontinuation.
Since only BOM Standard Items can be transient, and since BOM Standard Items are always leaf nodes (i.e., nodes without children) in a configuration Model hierarchy, transient items are always leaf nodes.
Flagging Transient Items
You flag items as transient in Oracle Configurator Developer.
If a node satisfies all of the following criteria, then the Transient checkbox is enabled:
Is a BOM Standard Item (not a BOM Model or BOM Option Class)
Being a BOM Standard Item requires that the node is a leaf node (has no child nodes)
Is not trackable (the Trackable flag is not set)
To mark an item as transient:
In Main area of the Repository, edit the BOM Model containing the BOM Standard Item.
Navigate to the Structure area of the Workbench.
Edit the BOM Standard Item.
In the Details page for the BOM Standard Item, select the Transient checkbox.
Click Apply.
See the section, "Transient Items Column", below for related database details.
A transient attribute is conceptually similar to a transient item. After a service is fulfilled, attributes that are transient are not restored during the reconfiguration of the service.
You model transient attributes in Configurator Developer, with Features. Any type of Feature (Integer, Decimal, Boolean, Text, or Option Feature) can be used as a transient attribute.
During the reconfiguration of a trackable instance, Oracle Configurator ignores any inputs that are values of features flagged as Transient.
Attributes are assigned by implementing the IBAttribute Configurator Extension. See the chapter, Set Up Configurator Extensions, for details.
Flagging Transient Attributes
You flag attributes as transient in Oracle Configurator Developer. If node satisfies all of the following criteria, then the Transient checkbox is enabled.
Is a Feature (Integer, Decimal, Boolean, Text or Option Feature)
Is not an Option of an Option Feature
Is not a Resource or a Total
Do not choose an Option Feature with a Maximum greater than 1. This will cause an error at runtime.
To mark an item as transient:
In Main area of the Repository, edit the Model containing the Feature.
Navigate to the Structure area of the Workbench.
Edit the Feature.
In the Details page for the Feature, select the Transient checkbox.
Click Apply.
During the design and testing phases of your solution, you must ensure that the following issues do not cause problems.
When a saved configuration of a trackable instance is restored for reconfiguration, the Oracle Configuration Interface Object (CIO) ignores all configuration inputs that have been flagged as transient, and does not report any deltas for the transient entity.
The removal of transient items or attributes at reconfiguration can result in changes to the set of selected items. In addition, if you have defined constraint rules between transient and non-transient entities, then logical contradictions may result when the transient participants to the rules are not restored.
Assertions to transient items or attributes must be performed by end user selections or by Configurator Extensions. Transient items or attributes should not participate in constraint rules. (Assertions are changes to the state, value, or quantity of an entity.)
Physical BOM standard items (or Kits) in a container model that are shippable, inventory transactable, and serializable are called tangible items.
See "Specify Install Base Tracking" in the chapter "Set Up Oracle Inventory" for details on how to make an item tangible.
This functionality enables a sales representative to provide customers with the option to purchase shippable items (such as wireless handsets or Customer Premises Equipment (CPE)) while ordering services.
Oracle Configurator allows the end user to perform these actions related to tangible items:
Create new configurations with tangible items in a Container model.
Return tangible items while there are pending orders.
Reconfigure trackable component instances that contain returned tangible items.
When restoring a configuration that has items that are flagged as returned, the CIO restores the "returned" state on the corresponding runtime node. This state is then used to remove the tangible item from the configuration. The removal is not permanent until the reconfiguration order is booked and fulfilled.
If the model's configuration rules require the existence of a tangible item, but that item has previously been returned (removed from the configuration), then a failure message informs the user that this item was previously returned but is still required by the system and that the item is treated as a newly repurchased item in the current (reconfiguration) session. If the user does not want this item in the configuration, then he or she must explicitly remove it. To avoid this scenario, avoid defining rules that require the existence of tangible items, or define rules in such a way that they can be relaxed during the reconfiguration flow through Configurator Extensions.
Note that associating extended attributes to tangible items is not supported.
In order to be a tangible item in a Container Model, an item must meet the following restrictions:
Must be a non-ATO standard item, or a kit
Must be flagged as Shippable, Inventory Transactable, and Serializable
Tangible items must be flagged as Serializable in all inventory organizations. Otherwise, there may be errors in the configuration flow that introduce corruption into Install Base. Since the Inventory Transactable flag can only be set in the master organization, this restriction does not apply to it.
Does not have any extended attributes on it
Has a maximum quantity of 1
Does not have any Connectors to it
If a tangible item is discontinued then only the transaction relationship (which will have relationship type "Component-Of") corresponding to that item is discontinued. The discontinued shippable item remains in Oracle Install Base.
You can only add or delete tangible items from a configuration. You cannot change the state of tangible items relative to their state in Oracle Install Base.
When defining configuration Rules in Oracle Configurator Developer, Since a tangible item cannot have a quantity greater than 1, you cannot define a numeric rule in Oracle Configurator Developer that contributes to or consumes from the quantity of a tangible item.
It is possible for Oracle Install Base data to become corrupted if orders become stacked. In previous releases, a stacked order could occur when a trackable instance of an item was reconfigured before the fulfillment of the previous revision of the instance was complete. This situation could arise when the previous fulfillment failed or was still pending when the item was reconfigured and booked for fulfillment.
To prevent data corruption, Oracle Configurator locks instances until they are completely fulfilled, to ensure the integrity of their revision data. Specifically:
When an order is booked, the instance being reconfigured is locked against further reconfiguration until fulfillment is completed.
When a booked order is cancelled or when it is fulfilled and processed through to Install Base, the locked instance is unlocked.
If the instance has been locked by a previous order, the new order cannot be booked, and the reconfiguration is invalidated. The end user is informed of the invalidation by a message.
A locked instance cannot be updated directly in Install Base.
Item instances connected to locked instances are also locked.
The CIO provides the method ITrackableInstance.isLocked(), which returns true if an instance is locked.
Oracle Quoting and Oracle Install Base end users typically need to reconfigure only a few Components within a network of connected Components. To facilitate this process and improve runtime performance, you can view only the following Components when an Oracle Configurator session begins:
The Components selected for reconfiguration
Any Components required to enforce constraints defined in the Model
When an end user reconfigures an installed configuration, Oracle Configurator may need to add Components to the configuration session to ensure the validity of all connections and the entire configuration. At runtime, only rules that you define using Connectors can propagate to Component instances that may not be visible in the configuration session. For this reason, it is important to define rules using Connectors when any rule participants are not part of the same trackable item. In other words, no parent-and-child or ancestor-and-descendant relationship exists between the trackable items. For more information on trackable items, see the section, "Structuring Container Models", above.
Note: If two trackable items are part of the same trackable item, it is not necessary to create a Connector between them in order to define a rule in which they are both participants. For example, Model A is a trackable BOM Model that has two children, Model B and Model C. Since Model A references these Models (thus they are Model A's children), you can use nodes from both Model B and Model C when defining rules.
When a rule defined using Connectors propagates to instances that are not visible in the configuration session, Oracle Configurator prompts you to add instances to the configuration session so other required changes are applied and the configuration remains valid.
For more information on using Connectors to define rules, see the Oracle Configurator Developer User's Guide.
The following are examples of valid configuration rules for trackable Models within a Container Model.
A rule can contain participants from a trackable Model and one of its trackable child Models.
You can create a rule between Connectors that have the same trackable Model as their target.
A rule that includes nodes from two non-trackable Models is valid as long as neither Model is a child of a trackable Model, or they are both children of the same trackable Model.
Using the structure in the following figure as an example, you can create rules using nodes from Connector A and Connector B, even though their targets are the same. (You can also create rules using nodes from Connector A and Connector B if their targets are different.)
Connectors to the Same Trackable Model
If a configuration rule violates any of the requirements in this section, Oracle Configurator Developer displays an error when you generate logic.
The following are examples of invalid configuration rules for trackable Models within a Container Model.
A numeric rule that dynamically changes how many allowable instances of a trackable child BOM Model can exist at runtime. This type of rule changes how many instances of a Model are allowed at runtime.
A numeric rule in which a Container Model node contributes to or consumes from the minimum or maximum number of allowed instances at runtime for another Model (regardless of the Model's type). For more information about this type of numeric rule, see the Oracle Configurator Developer User's Guide.
A rule that uses nodes from sibling trackable Models (that is, the Models exist at the same level in the Container Model's structure).
A rule between a trackable Model and a non-trackable Model that is not one of the trackable Model's children (see example below).
A rule with participants from one trackable Model and any other node from a non-trackable child of the Container Model.
A numeric rule with a tangible BOM Standard Item that is as a participant in Operand 2. You cannot define a numeric rule that contributes to or consumes from the quantity of a tangible item, because a tangible item cannot have a quantity greater than 1.
Invalid Container Model Structure Examples
Example 1: A rule between a trackable Model and a non-trackable Model that is not one of the trackable Model's children.
Using the structure shown in the following figure, create a rule containing participants from Trackable1 and NonTrackable1. This rule is invalid and causes an error when you generate logic. This restriction does not apply to Configurator Extensions.
Container Model Structure
Example 2: A rule with participants from one trackable Model and any other node from a non-trackable child of the Container Model.
For example, in the structure appearing in the following figure, both PortSpeed and Speed are Features. A rule using PortSpeed and Speed is invalid because Port is trackable, PortSpeed is a Feature in Port, and Speed is a direct child of the Container Model.
Container Model Structure
Example 3: An invalid rule in a referenced Model.
In the structure appearing in the following figure, the Container Model contains a tangible item, and the referenced model RefModel_3 contains a numeric rule that contributes a quantity greater than 1 to the tangible item. The numeric rule is invalid, because a tangible item cannot have a quantity greater than 1. This invalid rule causes an error when you generate logic in RefModel_3, which contains the rule. However, this invalid rule does not cause an error when you generate logic in Container_Model, if the logic in the referenced model RefModel_3 is already up-to-date. You can force Oracle Configurator to generate and validate the logic of all referenced models, regardless of whether their logic is up-to-date, by setting the value of GenerateUpdatedOnly in the CZ_DB_SETTINGS table to NO.
See the Oracle Configurator Implementation Guide for background on viewing or editing the values in the CZ_DB_SETTINGS table.
This section contains information about implementing Oracle Configurator in the TSO solution.
This section explains how to define a configuration Model specifically for an Oracle TSO solution. In the procedure below, you log in to Oracle Forms with Configurator Administrator responsibility and navigate to Populate/Refresh Configuration Models, Populate Configuration Models.
Steps
Import the Container Model by running the Import Configuration Models concurrent program.
After importing the Container Model, verify that its structure is valid by opening the Model for editing in Configurator Developer and choosing Generate Logic from the General area of the Workbench.
Add the Model structure and define configuration rules. For transient items and attributes, set the transient flag.
Generate a User Interface and optionally create Activate Instance UI controls on specific UI windows.
Important: Oracle Configurator does not provide any User Interfaces in your installation. Since User Interfaces are based on specific model structure and configuration rules, you must generate your User Interfaces with Oracle Configurator Developer, or construct your own custom UIs.
An Activate Instance UI control is a button or picture to which you assign the Activate Instance action.
Customizing the User Interface consists of adding Activate buttons, creating Connection List buttons, hiding Configurator Extensions, and altering the format in the UI Editor.
To help end users to navigate when updating an installed configuration, you may also want to display the Navigation Tree in a Container Model's User Interface.
The Activate Instance UI control appears in a UI window only if you create the control on the selected Component's UI window. When you make the Oracle Configurator UI window editable, the Activate Instance control does not appear.
Define Line Types in Oracle Order Management. In Oracle Order Management, Transaction Types are the source of various attributes on a sales order's header and lines. When you reconfigure an installed configuration, Oracle Configurator uses Line transaction types to describe the type of change made to each item.
Use the following Configurator Extensions. These Configurator Extensions should be suitable without modification, but you may adapt them if necessary.
Line Type: Identifies the Line Type for use in the Summary window, and for use in downstream quoting and fulfillment activities. The Line Type column in the Summary window lists the type of change made to each item during the reconfiguration session.
Interactive Location Search: Sets the Location ID and Location Type Code for BOM trackable root instances and passes this information to downstream applications.
IBAttribute: Collects configuration attributes of configured Components.
See the chapter, Set Up Configurator Extensions, for more information on these extensions.
Publish the Container Model and specify the hosting applications that you want the Model available to (e.g., Oracle Install Base, Oracle Quoting, Oracle Order Management, or Oracle iStore) in the list of hosting applications. For a list of Oracle Applications short names, see the Oracle Configurator Implementation Guide. For information about publishing, see the Oracle Configurator Developer User's Guide.
To allow users of downstream applications to reconfigure installed configurations, you must include these applications when publishing the Model from Configurator Developer. Additionally, you must make the publication available to Oracle Order Management. For more information about publishing, see the Oracle Configurator Developer User's Guide.
You must define some profile options before uses of other applications can reconfigure installed configurations using Oracle Configurator. The following Oracle Configurator profile options affect how Oracle Configurator integrates with Oracle Install Base, or how Oracle Configurator saves data internally and returns it for use by the host application:
These profile options have default values, but you may want to modify them for your installation. For more information, see the Oracle Configurator Installation Guide.
You should also set certain profile options to disable pricing, as described in Disable Pricing.
You must also define some additional profile options to allow other applications to integrate with Oracle Configurator. For more information, refer to:
Set Up Oracle iStore chapter of this guide
Oracle Install Base Implementation Guide
Oracle Quoting Implementation Guide
Oracle iStore Implementation and Administration Guide
Pricing attributes sourced from Oracle Configurator output configuration attributes are not available to the pricing engine until you have exited the Configurator by clicking Done. Therefore, if you are sourcing pricing attributes from Oracle Configurator output configuration attributes, you should disable pricing display within the Configurator.
If your application that supports reconfigurations of installed configurations includes pricing that depends on the Line Type (action) or configuration attributes of the line item, then you should disable pricing. Since such a dependency is likely to be common, it is recommended that you disable pricing in Oracle Configurator if your application supports reconfigurations of installed configurations.
To disable pricing in Oracle Configurator, set the following profile options to the value No:
For more information on setting these profile options, see the Oracle Configurator Installation Guide.
If you are using extended attributes with the TSO solution, you must map the following to each other for all trackable items:
The extended attributes that you define in Oracle Install Base
The configuration attributes that you define on your configuration Model in Configurator Developer
The result of this mapping is that the values of configuration attributes produced during a session in Oracle Configurator remain associated with their trackable items in Oracle Install Base.
You may not need to map transient attributes to Install Base Extended Attributes. You should map them if they are needed during fulfillment. See the section, "Transient Attributes", above, for background.
In the following procedure, log in to Oracle Forms with Oracle Installed Base Admin responsibility and navigate to Setups, Extended Attribute Template.
Steps
Define the desired extended attributes, associating them at the item group level. For information on defining Oracle Install Base attributes, see Create Extended Attributes in the chapter on setting up Oracle Install Base, and the Oracle Install Base Implementation Guide.
In Oracle Configurator Developer, modify your Model to add attribute Features and Properties. The methodology for modifying your Model is described in Oracle Configurator Methodologies, in the section on implementing configuration attributes for output. Consult that chapter for guidance, with these essential differences:
Instead of descriptive flexfield segments and contexts, use Oracle Install Base extended attributes and groups.
In place of the Property names, ATTR_CONTEXT and ATTR_n_CONTEXT, use ATTR_GROUP and ATTR_n_GROUP.
Example:
In Oracle Install Base, define an extended attribute at the Inventory Item group access level with:
Note: The Attribute Name must be unique, for extended attributes used in the TSO flow.
In Configurator Developer, in a trackable BOM Model, define an attribute Feature with:
Feature Name = Port_Speed
Feature Options = 192 Kbps, 256 Kbps, 640 Kbps
For the Feature named Port_Speed, define a Property with:
Property Name = ATTR_NAME
Property Value = PORT_SPEED
For the trackable BOM Model, define a Property with:
Property Name = ATTR_1_PATH
Property Value = Port_Speed
For the trackable BOM Model, define a second Property with:
Property Name = ATTR_1_MODE
Property Value = 2
For the trackable BOM Model, define a third Property with:
Property Name = ATTR_1_GROUP
Property Value = EAST
For your enhanced understanding of the TSO solution, this section describes some ways in which the Oracle Configurator (CZ) schema is adapted for TSO.
Using the DISPLAY_SUMMARY_FULFILLMENT_ACTION parameter, you can control whether the Line Type column appears in the Oracle Configurator Summary window during a reconfiguration session. Following are the settings of this parameter in the CZ_DB_SETTINGS table:
Setting ID: DISPLAY_SUMMARY_FULFILLMENT_ACTION
Section Name: UISERVER
Data Type: String
Default Value: True
Note: This parameter affects only reconfiguration scenarios, not new configurations. In a new configuration, the Line Type column never appears.
If the parameter is True or is not defined, then the Line Type column appears in the Summary window, if a reconfiguration. If set to False, the Line Type column does not appear.
More information on Line Types can be found in the chapter, Set Up Configurator Extensions.
See the Oracle Configurator Implementation Guide for background on viewing or editing the values in the CZ_DB_SETTINGS table.
The table, CZ_CONFIG_EXT_ATTRIBUTES, is the intermediate store of configuration attribute data between Oracle Configurator and Oracle Install Base. Oracle Configurator writes output data to the table when the IBAttribute Configurator Extension runs. Oracle Configurator compares the attribute values written to CZ_CONFIG_EXT_ATTRIBUTES with the values of the corresponding columns in the Oracle Install Base tables.
For more information about this Configurator Extension, see the chapter, Set Up Configurator Extensions.
The following table shows the layout and description of the CZ_CONFIG_EXT_ATTRIBUTES table.
Column Name | Null? | PK? | Type | Comments |
---|---|---|---|---|
CONFIG_HDR_ID | N | Y | NUMBER | Instance Header ID. Corresponds to CZ_CONFIG_ITEMS.INSTANCE_HDR_ID. |
CONFIG_REV_NBR | N | Y | NUMBER | Instance Revision Number. Corresponds to CZ_CONFIG_ITEMS.INSTANCE_REV_NBR. |
CONFIG_ITEM_ID | N | Y | NUMBER | Configuration Item ID. Corresponds to CZ_CONFIG_ITEMS.CONFIG_ITEM_ID. |
ATTRIBUTE_LEVEL | N | Y | VARCHAR2(255) | Corresponds to CSI_I_EXTENDED_ATTRIBS.ATTRIBUTE_LEVEL. |
ATTRIBUTE_NAME | N | Y | VARCHAR2(255) | Corresponds to CSI_I_EXTENDED_ATTRIBS.ATTRIBUTE_CODE. |
ATTRIBUTE_GROUP | Y | N | VARCHAR2(255) | Corresponds to CSI_I_EXTENDED_ATTRIBS.ATTRIBUTE_GROUP. |
ATTRIBUTE_VALUE | Y | N | VARCHAR2(255) | Corresponds to CSI_I_EXTENDED_ATTRIBS.ATTRIBUTE_VALUE. |
SEQUENCE_NBR | Y | N | NUMBER | Sequence number for operations. |
The columns, CONFIG_HDR_ID, CONFIG_REV_NBR, CONFIG_ITEM_ID, ATTRIBUTE_LEVEL, and ATTRIBUTE_NAME, are the primary key for CZ_CONFIG_EXT_ATTRIBUTES.
The column SEQUENCE_NBR indicates a global sequence number for a batch validation session’s processing of configuration operations and extended attributes. This sequence number is used only during the batch validation of pseudo-configurations, such as when an item is validated by Oracle Contact Center. For more details, see the section, "Batch Validation Parameters"
For brevity, the preceding table does not include standard columns such as LAST_UPDATE_DATE.
When adding trackable data, the system adds the item into the Oracle Install Base table, CSI_T_TXN_LINE_DETAILS. If change occurs to a transaction value after a reconfiguration, then a comparison happens between CSI_T_TXN_LINE_DETAILS and CZ_CONFIG_ITEMS to report the change. The CSI_T_TRANSACTION_LINES table contains the transaction detail for the configured item. There is one transaction line for each source transaction.
The following table shows the mapping of the Oracle Configurator (CZ) tables to the Oracle Install Base (IB) schema.
The column, IB_LINK_ITEM_FLAG, indicates whether a node is a link item. This column is part of the tables, CZ_PS_NODES and CZ_IMP_PS_NODES. A true value for this column means that the node is a link item. This data is regarded as the link flag. For more information on links, see the chapter, Set Up Inventory and Network Link Items.
See the chapter, Configurator Extensions, for information on how the CIO uses the link flag.
For table details, see the CZ eTRM on MetaLink, Oracle's technical support Web site.
The column, TRANSIENT_FLAG, indicates whether a node is a transient item. This column is part of the table, CZ_PS_NODES. A true value for this column means that the node is a transient item. This data is regarded as the transient flag.
For table details, see the CZ eTRM on MetaLink, Oracle's technical support Web site.
The columns SHIPPABLE_ITEM_FLAG, INVENTORY_TRANSACTABLE_FLAG, SERIALIZABLE_ITEM_FLAG, and ASSEMBLE_TO_ORDER_FLAG indicate whether a node is a tangible item. These columns are part of the tables CZ_PS_NODES and CZ_IMP_PS_NODES.
The columns TANGIBLE_ITEM_FLAG and RETURNED_FLAG indicate whether a node is a tangible item that has been returned. These columns are part of the table CZ_CONFIG_ITEMS.
For table details, see the CZ eTRM on MetaLink, Oracle's technical support Web site.
This section describes parameters that are specific to the TSO solution.
For information on the use of parameters in the initialization message, see the Oracle Configurator Implementation Guide.
When configuring instances of trackable Components prior to their installation in Oracle Install Base, the system uses the following parameters:
instance
validation_context
For background on updating configuration instances, see the chapter, Oracle TSO Business Process.
instance
The system uses the instance parameter when configuring instances of trackable Components. This parameter lets you configure multiple instances in the same configuration session. In a host application, this corresponds to the end user's ability to select multiple Components for configuration.
This is the only initialization parameter that can be specified multiple times in the initialization message.
In order to specify each instance that requires configuration, provide the Configuration Header ID (CZ_CONFIG_DETAILS_V.CONFIG_HDR_ID) as the value of the header_id sub-parameter. For example:
<instance header_id="17848"/> <instance header_id="18333"/> <instance header_id="23445"/>
validation_context
The system uses the validation_context parameter when configuring instances of trackable configuration Components. The value sets the context in which the following occur:
Validation of the current instances
Comparison of the current instances to the installed instances in Oracle Install Base
Batch validation uses the validation_context parameter. For more information, see the section, Batch Validation Parameters.
The only allowed value for the validation_context parameter is INSTALLED. This value compares the revisions of the current instances only to the revisions of those instances that have been installed in Oracle Install Base.
For background and details about batch validation, see the Oracle Configurator Implementation Guide.
TSO implementers must use one of the following optional values for the p_validation_type parameter to the CZ_CF_API.VALIDATE procedure. (For details on the VALIDATE procedure used by batch validation, see VALIDATE Procedure.)
Values are:
validate_order: The process should pass this value when validating orders, such as what Oracle Order Management does. This is the default value.
validate_fulfillment: The process should pass this value when validating fulfillment status, such as what Oracle Install Base does.
Example
<batch_validate validation_type="validate_order">
You can use certain programmatic tools to help manage TSO instance configurations. This section describes the following tools or procedures modified for use with the TSO solution:
For full background and details about these programmatic tools for development, see the Oracle Configurator Implementation Guide.
The versions of these procedures described in this section are adapted to operate on configurations that have connectivity, as well as on those that do not.
These procedures use the custom data type, CZ_API_PUB.NUMBER_TBL_TYPE, which is a table of number type. For background on custom data types, see the appropriate references in the Oracle Configurator Implementation Guide and in Custom Data Types in the Package CZ_CF_API.
This procedure, COPY_CONFIGURATION in the CZ_CONFIG_API_PUB package, makes a copy of a saved configuration in the Oracle Configurator schema.
This procedure, created for use with the TSO solution, is a variation of COPY_CONFIGURATION in the CZ_CF_API package. For a description of the CZ_CF_API package, see the Oracle Configurator Implementation Guide. The most important difference is that this TSO procedure has two additional OUT parameters: x_orig_item_id_tbl and x_new_item_id_tbl. These parameters inform host applications about changes to the Configuration Item IDs (CZ_CONFIG_ITEMS.CONFIG_ITEM_ID) in the configuration in a case where you are copying Component instances that are not yet installed in Oracle Install Base. These parameters are of type CZ_API_PUB.NUMBER_TBL_TYPE, which is a table of the NUMBER type. As used by the COPY_CONFIGURATION procedure, these output tables are indexed from 1 to n, where n is the number of Configuration Item IDs changed from the source configuration to the new configuration. You can use the index number of the IDs stored in the tables to map the Configuration Item IDs in the original configuration to the Configuration Item IDs in the new copy of that configuration. The following example shows how a host application might process these outputs using Oracle Configurator.
Example: Mapping Original Configuration Item IDs to New IDs When Copying a Configuration
... FORALL i IN x_orig_item_id_tbl.FIRST..x_orig_item_id_tbl.LAST UPDATE my_order_lines SET config_item_id = x_new_item_id_tbl(i) WHERE my_order_header = l_header AND config_hdr_id = x_config_hdr_id AND config_rev_nbr = x_config_rev_nbr AND config_item_id = x_orig_item_id_tbl(i); ...
The non-TSO version of COPY_CONFIGURATION, in the package CZ_CF_API, has been modified to create an exception if it generates any new Configuration Item IDs. This averts data corruption in Oracle Order Management, Order Capture, and Order Contracts. If you encounter this exception, you must apply the appropriate patch for your host application that invokes the new COPY_CONFIGURATION procedure from CZ_CONFIG_API_PUB.
For background on configurations, see the chapter on managing configurations in the Oracle Configurator Implementation Guide.
Keep the following considerations in mind when running COPY_CONFIGURATION.
Prerequisites
The configuration that you are copying must exist. If the configuration has been logically deleted, then you can pass 0 as the value of p_handle_deleted_flag to enable copying.
Timing
You should use this procedure every time you copy a configuration. The procedure ensures copying of all inputs, outputs, attributes, and messages.
Warnings
If the configuration does not exist, or if the copy fails, x_msg_count will be greater than zero, and x_msg_data will contain error information. Check x_return_status for the return status.
The syntax for this procedure is:
PROCEDURE copy_configuration(p_api_version IN NUMBER ,p_config_hdr_id IN NUMBER ,p_config_rev_nbr IN NUMBER ,p_copy_mode IN VARCHAR2 ,x_config_hdr_id OUT NOCOPY NUMBER ,x_config_rev_nbr OUT NOCOPY NUMBER ,x_orig_item_id_tbl OUT NOCOPY CZ_API_PUB.number_tbl_type ,x_new_item_id_tbl OUT NOCOPY CZ_API_PUB.number_tbl_type ,x_return_status OUT NOCOPY VARCHAR2 ,x_msg_count OUT NOCOPY NUMBER ,x_msg_data OUT NOCOPY VARCHAR2 ,p_handle_deleted_flag IN VARCHAR2 := NULL ,p_new_name IN VARCHAR2 := NULL );
The following table describes the parameters for the COPY_CONFIGURATION procedure.
Keep the following considerations in mind after running COPY_CONFIGURATION.
Results
This procedure copies all database records associated with a configuration to a new Configuration Header ID and Configuration Revision Number. The changes that the procedure made are not automatically committed. When you call this procedure, you must check x_return_status and commit the transaction if the copy was successful.
Troubleshooting
Examine x_return_status. If it does not indicate success, then examine x_msg_count for the number of error messages, and x_msg_data for the error messages themselves.
This procedure runs COPY_CONFIGURATION within an autonomous transaction. If the copy is successful, new data will be committed to the database without impacting the caller's transaction.
This section describes a new parameter signature for the VALIDATE procedure in the CZ_CF_API package. For a description of the previous signature for the VALIDATE procedure, see the Oracle Configurator Implementation Guide. Existing calls to the previous signature will continue to operate correctly, and do not need to be changed.
For TSO, you must call this procedure with the parameter, p_validation_type. When Oracle Configurator calls this procedure during batch validation, it uses the following values for that parameter:
CZ_API_PUB.VALIDATE_ORDER: This value should be passed when validating orders, such as what Oracle Order Management does. This is the default value.
CZ_API_PUB.VALIDATE_FULFILLMENT: This value should be passed when validating fulfillment status, such as what Oracle Install Base does.
The syntax for this procedure is:
procedure validate(p_api_version IN NUMBER ,p_config_item_tbl IN config_item_tbl_type ,p_config_ext_attr_tbl IN config_ext_attr_tbl_type ,p_url IN VARCHAR2 ,p_init_msg IN VARCHAR2 ,p_validation_type IN VARCHAR2 ,x_config_xml_msg OUT NOCOPY CFG_OUTPUT_PIECES ,x_return_status OUT NOCOPY VARCHAR2 ,x_msg_count OUT NOCOPY NUMBER ,x_msg_data OUT NOCOPY VARCHAR2 );
The following table describes the parameters for the new parameter signature of the VALIDATE procedure. Several parameters are new, as indicated. Parameters retained from the previous signature are described in more detail in the Oracle Configurator Implementation Guide
The parameter p_validation_type has special meaning for the TSO solution, as noted elsewhere.
Parameter | Data Type | Mode | Note |
---|---|---|---|
p_api_version | number | in | Required. See the description of API Version Numbers in the Oracle Configurator Implementation Guide. |
p_config_item_tbl (new) |
config_item_tbl_type (new) See Custom Data Types in the Package CZ_CF_API |
in | List of input selections. Can be null if only updating attributes. Individual field can be null, FND_API.G_MISS_NUM or FND_API.G_MISS_CHAR, or another value |
p_config_ext_attr_tbl (new) |
config_ext_attr_tbl_type (new) See Custom Data Types in the Package CZ_CF_API |
in | List of extended attributes to be updated. |
p_url | varchar2 | in | The URL of the Oracle Configurator Servlet. If null, the value of the profile option CZ_UIMGR_URL is used. Same as previous parameter url |
p_init_msg | varchar2(2000) | in | The XML initialization message for Oracle Configurator. Cannot be null. Same as previous parameter init_message |
p_validation_type | varchar2 | in | Validation type. The possible values are CZ_API_PUB.VALIDATE_ORDER, CZ_API_PUB.VALIDATE_FULFILLMENT, and CZ_API_PUB.INTERACTIVE. The default is CZ_API_PUB.VALIDATE_ORDER. |
x_config_xml_msg | CFG_OUTPUT_PIECES | out nocopy | A table of the output XML messages produced by validating the configuration. Same as previous parameter config_messages |
x_return_status (new) |
varchar2 | out nocopy | Standard out parameter. Value is: FND_API.G_RET_STS_SUCCESS, FND_API.G_RET_STS_ERROR, or FND_API.G_RET_STS_UNEXP_ERROR. |
x_msg_count (new) |
number | out nocopy | Standard out parameter. Number of log messages. |
x_msg_data (new) |
varchar2 | out nocopy | Standard out parameter. If x_msg_count equals 1, contains message. |
This version of the VALIDATE procedure uses standard Oracle Applications (FND) logging. If logging is enabled, the following information will be written into the log:
Input selections (statement level)
External attributes (statement level)
Final return status of the batch validation session (procedure level)
New configuration info generated in the batch validation session (procedure level)
Error message(s) (procedure level)
Some parameters of the VALIDATE procedure use custom data types. These are described in Custom Data Types in the Package CZ_CF_API. For background, see the section on Custom Data Types in the Oracle Configurator Implementation Guide.
Custom Type | Description |
---|---|
config_item_tbl_type | Table of config_item_rec_type, indexed by BINARY_INTEGER |
config_ext_attr_tbl_type | Table of config_ext_attr_rec_type, indexed by BINARY_INTEGER |
config_item_rec_type | Record consisting of:
config_item_id cz_config_items.config_item_id%TYPE component_code cz_config_items.node_identifier%TYPE sequence_nbr cz_config_items.sequence_nbr%TYPE operation NUMBER quantity cz_config_items.item_num_val%TYPE instance_name cz_config_items.name%TYPE location_id cz_config_items.location_id%TYPE location_type_code cz_config_items.location_type_code%TYPE |
config_ext_attr_rec_type | Record consisting of:
config_item_id cz_config_ext_attributes.config_item_id%TYPE component_code VARCHAR2(1200) sequence_nbr NUMBER attribute_name cz_config_ext_attributes.attribute_name%TYPE attribute_group cz_config_ext_attributes.attribute_group%TYPE attribute_value cz_config_ext_attributes.attribute_value%TYPE |
Constants |
BV_OPERATION_UPDATE CONSTANT NUMBER := 1; BV_OPERATION_DELETE CONSTANT NUMBER := 2; |
For an example of how you might call the VALIDATE procedure, see Calling the VALIDATE Procedure. This example is not ready to run as shown. You must replace some of the placeholder values in it to fit your own implementation.
Calling the VALIDATE Procedure
-- sample_bvapicall.sql set serveroutput on; DECLARE l_config_item_rec CZ_CF_API.config_item_rec_type; l_config_item_tbl CZ_CF_API.config_item_tbl_type; l_config_attr_rec CZ_CF_API.config_ext_attr_rec_type; l_config_attr_tbl CZ_CF_API.config_ext_attr_tbl_type; l_url VARCHAR2(100); l_init_msg VARCHAR2(2000); l_validation_type VARCHAR2(1) := CZ_API_PUB.VALIDATE_ORDER; l_config_xml_msg CZ_CF_API.CFG_OUTPUT_PIECES; l_return_status VARCHAR2(1); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); l_user_id number := 1111; -- your user id l_resp_id number := 2222; -- responsibility id l_appl_id number := 3333; -- application id BEGIN l_url := 'http://www.mysite.com:myportnumber/configurator/oracle.apps.cz.servlet.UiServlet'; l_init_msg := '<initialize>' || '<param name="database_id">mydbhost_mydbname</param>' || '<param name="responsibility_id">2222</param>' || '<param name="calling_application_id">3333</param>' || '<param name="context_org_id">4444</param>' || '<param name="model_id">5555</param>' || '<param name="config_creation_date">'||to_char(sysdate)||'</param>' || '<param name="config_header_id">6666</param>' || '<param name="config_rev_nbr">1</param>' || '<param name="save_config_behavior">new_revision</param>' || '<param name="read_only">FALSE</param>' || '<param name="terminate_msg_behavior">brief</param>' || '</initialize>'; -- update instance name l_config_item_rec.config_item_id := 1000; l_config_item_rec.component_code := '123-456'; l_config_item_rec.operation := CZ_CF_API.bv_operation_update; l_config_item_rec.sequence_nbr := 1; l_config_item_rec.instance_name := 'new instance name'; l_config_item_tbl(l_config_item_tbl.count+1) := l_config_item_rec; -- clear out location_id and location_type_code l_config_item_rec := null; l_config_item_rec.config_item_id := 1011; l_config_item_rec.component_code := '123-456-789'; l_config_item_rec.operation := CZ_CF_API.bv_operation_update; l_config_item_rec.sequence_nbr := 3; l_config_item_rec.location_id := fnd_api.G_MISS_NUM; l_config_item_rec.location_type_code := fnd_api.G_MISS_NUM; l_config_item_tbl(l_config_item_tbl.count+1) := l_config_item_rec; -- delete an instance l_config_item_rec := null; l_config_item_rec.config_item_id := 1001; l_config_item_rec.component_code := '123-456'; l_config_item_rec.operation := CZ_CF_API.bv_operation_delete; l_config_item_rec.sequence_nbr := 4; l_config_item_tbl(l_config_item_tbl.count+1) := l_config_item_rec; l_config_attr_rec.config_item_id := 1010; l_config_attr_rec.component_code := '123-456-678'; l_config_attr_rec.sequence_nbr := 2; l_config_attr_rec.attribute_name := 'an attr name'; l_config_attr_rec.attribute_group := 'an attr group'; l_config_attr_rec.attribute_value := 'a new attr value'; l_config_attr_tbl(l_config_attr_tbl.count+1) := l_config_attr_rec; fnd_global.apps_initialize(1111,2222,3333); CZ_CF_API.VALIDATE(1.0 ,l_config_item_tbl ,l_config_attr_tbl ,l_url ,l_init_msg ,l_validation_type ,l_config_xml_msg ,l_return_status ,l_msg_count ,l_msg_data ); dbms_output.put_line('Return status: ' || l_return_status); if l_return_status = fnd_api.G_RET_STS_SUCCESS then -- parse xml output msg else dbms_output.put_line('message count: ' || l_msg_count); if l_msg_count = 1 then dbms_output.put_line('message: ' || l_msg_data); else for i in 1 .. l_msg_count loop dbms_output.put_line('message ' || i || ': ' || fnd_msg_pub.get(i,fnd_api.g_false)); end loop; end if; end if; exception when others then dbms_output.put_line('Unexpected err: ' || SQLERRM); end; /