26Siebel Configurator API Reference
Siebel Product Configurator API Reference
This chapter summarizes the APIs available to Siebel Product Configurator and focuses on a segment of those APIs.
This chapter includes the following topics:
About Siebel Product Configurator APIs
This chapter introduces advanced users to Siebel Product Configurator APIs. It assumes that you know Siebel Product Configurator and Siebel server architecture. Implementing the APIs described in this topic also requires proficiency in Siebel EAI and Siebel Object Interfaces.
To use these APIs, the user must be familiar with the following:
Siebel Business Process Designer
Runtime Events (personalization) if invoked from the UI
Siebel Object Interfaces
A Siebel scripting language (Siebel VB or Siebel eScript)
Recursive programming techniques
Constraint satisfaction theory
Underlying behavior of Siebel Product Configurator
Siebel product definition data model
Siebel property set representation of data (creation and transformation)
EAI Transports and Interfaces
Available Siebel Product Configurator APIs
Three main groups of APIs are used for accessing Siebel Product Configurator:
Group 1: UI
CPRUI Service API as Siebel Web Template items.
DOM API within the browser inherent in JavaScript and HTML.
Group 2: Model
Scripts that execute in the context of the current session and are implemented as part of the configuration model in the Scripts view.
Group 3: Instance
This API is for using Siebel Product Configurator or for manipulating the configuration session from a place other than the Siebel Product Configurator runtime UI.
The Remote Complex Object Instance Service is a business service that is available for accessing the Instance API.
Instance APIs for the Complex Object Manager
Instance APIs for the Complex Object Manager follow these general rules:
The Remote Complex Object Instance Service (RCOIS) is a business service. It can be accessed by anything in the Siebel architecture that can use a business service. As a business service, it is used by invoking methods, passing in property sets with input arguments, and getting results from the Outputs property set.
Note: Before 7.8 the RCOIS was the API for using remote Siebel Product Configurator while Complex Object Instance Service (COIS) was the API for the embedded Siebel Product Configurator. In 7.8 and later versions the COIS and RCOIS are both proxies to the internal business service Siebel Product Configurator Service. All previous scripting efforts are still supported. Do all future scripting on the RCOIS.A session is uniquely identified by two ID values, the Object Id and the Root Id. In quotes, the Object Id is the Quote Id and the Root Id is the Quote Item Id for the top-level parent (the root). In assets, the Object Id and the Root Id are both the root Asset Id.
A session is unique only within its own user session on a given Object Manager.
A port is another name for a Relationship.
A complex product is another name for a customizable product.
The Port Id is the ID of the relationship as defined in the Complex Product Structure BusComp.
The Prod Item Id is the ID of the relationship item as defined in the Complex Product Structure BusComp.
The Path for an item is the Integration ID of the specific item.
Version arguments are used only when testing a customizable product version that is different from the currently released version.
Instance APIs include the following methods:
LoadInstance Method
This method loads the complex object into memory. This is the starting point for all configurations.
You cannot use this method unless you have first called the LoadEAI method, which is part of the Copy business service. For more information, see the topic about the ISS Copy Service business service in Siebel Order Management Infrastructure Guide.
LoadInstance must always be called with Product Id as an additional parameter. This will certify that the application can find the correct remote Siebel Product Configurator object manager based on the Product Id.
Input Arguments
ObjId. The unique identifier of the complex object header (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
IntObjName. The name of the integration object specified in Oracle's Web Tools.
TriggerEvent. The flag that determines if script events are triggered. Normally, it must be set to Y. Set it to N for special uses of the API where customizable product model script events are not desired.
-
(Optional) Product Id. This parameter is used to find the correct remote Siebel Product Configurator object manager if Siebel Product Configurator object manager is enabled and used with component or server-based routing.Note: Product Id is mandatory if the Siebel Product Configurator is setup in remote mode, and also for customized workflows where the LoadInstance method is not the first method in the workflow.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
(Optional) NewRecord. If set to Y, the instance will be populated with default values. The default is N.
(Optional) AutoSync. If set to Y, the instance will be synchronized to the database immediately after loading. The default is N.
(Optional) SearchSpec. Set this parameter to filter out all other hierarchical instances in the child buscomp. The default is an empty search specification. This parameter must have the following format:
"[Header Buscomp.Id] = 'Id' AND [Item Buscomp.Root Id] = 'Root Id'"
ex. [Quote.Id] = '10-4FR6D' AND [Quote Item.Root Id] = '10-81DUX'
(Optional) ExternalScript. Set this parameter to Y when running headless configurations (for example, through Siebel COM Data Server). Anything other than the Cfg Web UI Service is considered headless configuration. The difference is based on the Siebel user who is calling the service. The default is N.
(Optional) ClearValues. Y or N. Clears all cached Link Item Values. Use this parameter if you must clear values from the cache, for example because you the cached values are wrong and you must replace them.
Output Arguments
The following properties will be returned from the output property set:
CreateSession. If this property is set to Y the method CreateSession must be called after LoadInstance. CreateSession will be used with the input parameter Links to pass a set of links to the method.
(Optional) IsConfig. If this property is present and set to Y the configuration model has configuration rules defined.
(Optional) Links. If this property is set to Y the model has linked items.
(Optional) Links. If model has linked items, this parameter will hold linked items as child property set. This information shall be passed to CreateSession call in case there are any rules configured based on linked items.
(Optional) UnresolvedLinks. If this property is set to Y the model has unresolved linked items that must be calculated by the caller.
If NewRecord is set to Y in the input property set and CreateSession is set to N in the output property set, the output will have the instance property set returned as a child of type CxObj (see the output example below). Here is an example of a return property set:
< IsConfig='Y' UnresolvedLinks='Y' CreateSession='Y' Links='Y'> <Links 1-19D0X='10/19/2001' 1-1Z876='SADMIN' 1Z771='SADMIN'> </Links>" <UnresolvedLinks>" <UnresolvedLink DispName='Quote Name' Definition='<CfgVariableDef BUS_OBJ = ""Quote"" BUS_COMP = ""Quote"" FIELD_NAME = ""Name"" SEARCH_SPEC = """" SORT_SPEC = """" DEFAULT_VAL = """" EXECUTE = ""N""/>' Description='' DefValue='' Name='Quote Name' BusObj='Quote' Field='Name' ID='1-1Z875' BusComp='Quote'> </UnresolvedLink> </UnresolvedLinks> </>
Extracting the instance property set from LoadInstance. The instance property set can be extracted by first getting the child property set of type CxObj and then extracting its only child.
Handling Links. A child property set of type Links is returned if the model has linked items. The Links child property set must then be extracted and passed in to CreateSession's OUTPUT arguments as a child property set. Since version 7.0.4 this changed to the INPUT property set for CreateSession. Configuration rules may have been defined for these linked items, so the configuration session must know the link values. The linked items are represented as property-value pairs with link IDs as properties and link values as property values, as in this example:
<Links 1-19D0X='10/19/2001' 1-1Z876='SADMIN' 1-1Z771='SADMIN'>
A child property set of type UnresolvedLinks is returned if the model has linked items that the business service could not resolve. The children of this property contain the information necessary to calculate the value of the linked item.
<UnresolvedLinks>" <UnresolvedLink DispName='Quote Name' Definition='<CfgVariableDef BUS_OBJ = ""Quote"" BUS_COMP = ""Quote"" FIELD_NAME = ""Name"" SEARCH_SPEC = """" SORT_SPEC = """" DEFAULT_VAL = """" EXECUTE = ""N""/>' Description='' DefValue='' Name='Quote Name' BusObj='Quote' Field='Name' ID='1-1Z875' BusComp='Quote'> </UnresolvedLink> </UnresolvedLinks>
Only links that have the execute flag set or pull system parameters such as TODAY will be resolved by Siebel Product Configurator when used as headless configurations. The programmer must resolve all other links.
CreateSession Method
This method initializes a configuration session, which is necessary for products with components that have constraint rules. It is called immediately following LoadInstance where required.
Input Arguments
ObjId. The unique identifier of the complex object header (for example, Quote Id).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
IntObjName. The name of the integration object specified in Oracle's Web Tools.
TriggerEvent. The flag that determines if script events are triggered. Normally, it must be set to Y. Set to N for special uses of the API where script events are not desired. LoadInstance and CreateSession must have the same setting.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
(Optional) NewRecord. If set to Y, the instance will be populated with default values. The default is N.
(Optional) AutoSync. If set to Y, the instance will be synchronized to the database immediately after loading. The default is N.
(Optional) ExternalScript. This parameter must be set to Y when running headless configurations (for example, through Siebel COM Data Server). The default is N.
Output Arguments
If NewRecord is set to Y in the input property, the output will have the instance property set returned as a child of type CxObj. This is essentially the same output as the one that is returned from GetInstance.
SetInstance Method
This method creates a configuration session with the supplied property set, permitting configuration without directly writing to the database. The structure of the input property set does not need to correspond to a Siebel object, such as a quote that is indicated by the integration object specified.
When you use SetInstance, the input property set must be wrapped inside a parent property set.
For example, to use the following instance property set:
<PropertySet PrimaryRowId="42-56O78" OutputIntObjectName="7.7 Quote Integration Object"> ...... </PropertySet>
You must wrap it in another property set, as follows:
<PropertySet> <PropertySet PrimaryRowId="42-56O78" OutputIntObjectName="7.7 Quote Integration Object"> ...... </PropertySet> </PropertySet>
Input Arguments
Same arguments as LoadInstance but also requires the property set indicating the state to load. This property set must have the SiebelMessage object as the only first level child.
Output Arguments
Same arguments as LoadInstance.
SyncInstance Method
This method saves the complex object instance where it originated.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
IntObjName. The name of the integration object specified in Oracle's Web Tools.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
None
UnloadInstance Method
This method removes the existing configuration session from memory. It must be called after synchronizing the instance at the end of the configuration session.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root.
IntObjName. The name of the integration object that was used to load the instance.
Output Arguments
None.
GetAllPorts Method
This method retrieves a list of all ports and (possibly) their contents for a product. It gets all ports for a product but not for its child products. It retrieves the basic definition of the product and does not consider any current configuration session state, so every possible port is retrieved.
Input Arguments
Product Id. The ID of the product in Internal Product.
(Optional) Version. Version is used only in validate mode.
GetPortDomain. The flag that determines whether or not to also retrieve the domain of each port. Use Y or N to get the domain or not.
Output Arguments
All ports are returned as children of the output property set of type Port.
<GetAllPorts> <Port Class Id="<value>" MinCardinality="<value>" ClassName="<value>" MaxCardinality="<value>" Port Item Id="<value>" DefCardinality="<value>" Port Display Name="<value>" DefaultPortObjId="<value>" Name="<value>" ></Port> <Port Port Information here ></Port> </GetAllPorts>
Port information can be returned through GetProperty(). For example, GetProperty(Class Id).
EnumObjects Method
This method returns either all immediate objects under an object or all immediate objects under a specified port. This gets the items that are currently in the port, not the items that could be there.
Input Arguments
ObjId. The unique identifier of the complex object header (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
IntObjName. The name of the integration object specified in Oracle's Web Tools.
Parent Path. The path to the parent object whose child objects you want to enumerate. The path is the object's Integration ID.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
(Optional) Port Item Id. The ID of a specific port (for example, ORIG_ID of the port in S_PROD_ITEM table). If specified, only the items in this port are enumerated; otherwise, all items in all immediate ports are returned.
Output Arguments
Output can be in the form of two types of property sets, instance property sets and generic property sets.
Instance property sets return information about child items, as follows:
<Output> < Name="value" Product Id="value" Path="value" Sequence Number="value" /> … </Output>
Generic property sets send notifications to the user that there is a violation of the minimum or maximum required quantity for a one or more items within the relationship. A generic property set follows each instance property set, if there is a violation of the minimum or maximum required quantity for this instance.
GetAttribute Method
This method retrieves the value of an attribute.
Input Arguments
ObjId. The unique identifier of the complex object root.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item where you are retrieving an attribute.
Name. The attribute name.
Output Arguments
The value is returned as a property of the output property set, as follows:
<Output Value="value"> </Output>
GetFieldValues Method
This method retrieves field values for a product that exists in the complex product.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path - the path to the item.
Output Arguments
The output property set returned will have the field names as properties, as follows:
< Field="value" Field="value" ... Field="value"/>
GetInstance Method
This method gets the loaded instance as a property set. It returns the full structure of products and attributes.
Input Arguments
ObjId. The unique identifier of the complex object root.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
The entire property set output is the complex object instance.
GetParents Method
This method retrieves all the parents of an item.
Input Arguments
ObjId. The unique identifier of the complex object root.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item.
Output Arguments
The property set returned will have child property sets, each with the following properties:
< > < Product Id="value" Name="value" Sequence Number="value" Path="value"/> … </ >
GetPossibleDomain Method
This method retrieves selectable items from the configuration engine for a port
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Parent Path. The item parent path.
Port Item Id. The item port id.
Output Arguments
The property set returned will have the possible domain item product Ids as properties, each with the value 0, as follows:
< ProdId1="0" ProdId2="0" … ProdIdn="0" />
GetPossibleValues Method
This method retrieves selectable values from the configuration engine for an attribute.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
IntObjName. The name of the integration object.
Path. The Integration ID of the port to which this attribute is attached.
XA Id. The ID of the attribute for which the values need to be determined.
Output Arguments
The property set returned will have the possible values as the property names, as follows:
< [PossibleValue1]="Val1" [PossibleValue2]="Val2"/>
GetProductId Method
This method gets the root Product ID of the complex object instance.
Input Arguments
ObjId. The unique identifier of the complex object header (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
The product Id is returned as a property of the output property set, as follows:
< Product Id="value" />
GetRootPath Method
This method returns the path of the complex object instance root.
Input Arguments
ObjId. The unique identifier of the complex object header (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
The root path is returned as a property of the output property set, as follows:
< Path="value" />
HasGenerics Method
This method returns generics and children flags for an item. A port has generics if the required cardinality is greater than the current cardinality and no default product is specified.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row id).
IntObjName. The name of the integration object.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Port Item Id. The ID for the port item that will have either children or generics.
Path. The path to the parent item of interest.
Output Arguments
HasGenerics. Y is present if it does, not present if it does not.
HasChildren. Y is present if it does, not present if it does not.
GetConditionVal Method
This method allows users to call and retrieve the values of the named expression variables.
Input Arguments
CondName. The name of the condition variable.
IntId. The integration id of the product.
Output Arguments
If the condition variable is found and evaluates to true, the property Result is set to Y in the output arguments. If not, the Result is set to N.
For example, define a Product as follows:
Class1
-> Att1
Product: Child1 (associated with Class1)
Attribute: Att1 (which has the default value of one)
Constraints List:
Name: RuleOne
Constraint: The attribute SekAtt1 = one sets the value of the procedural condition variable to true
Product: Root (associated with Class1)
Re1: Child1
You can use the following script:
function Cfg_AttributeChanged (ChangedAttribute)
{
var Service = TheApplication().GetService("Configurator Service");
var Variable ="RuleOne";
var VariableVal = "";
var IntegrationID= AddItem("$.[Root]#1", "R1", "Child1", "1")
var InputArgs = TheApplication().NewPropertySet();
var OutputArgs = TheApplication().NewPropertySet();
InputArgs.SetProperty("CondName", Variable);
InputArgs.SetProperty("IntId", IntegrationID);
Service.InvokeMethod("GetConditionVal", InputArgs, OutputArgs);
Variable = OutputArgs.GetProperty("Result");
if (Variable == "Y")
{
TheApplication().RaiseErrorText("True" );
}
else
{
TheApplication().RaiseErrorText("False" );
}
}
Instance APIs to Interact with Conflicts and Messages
APIs to Interact with Conflicts and Messages include the following methods:
GetDetailedReqExpl Method
This method retrieves conflict messages.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
IntObjName. The name of the integration object.
Output Arguments
Expl#. The explanations for the conflicts. Substitute a number for #, such as Expl0, Expl1, and so on.
GetExplanations Method
This method retrieves configuration explanations for an item.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item.
Output Arguments
The property set returned will have child property sets, each with the property Value as the explanation, as follows:
<Output> <Expl Value="Explanation"/> <Expl Value="Explanation"/> ... <Expl Value="Explanation"/> </Output>
GetSignals Method
This method retrieves configuration engine signals.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Path. The integration ID where the item gets signals.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
The property set returned will have child property sets, as follows:
< > <Signal Expl="signal"/> <Signal Expl="signal"/> … <Signal Expl="signal"/> </ >
RemoveFailedRequests Method
This method removes all failed requests sent to the configuration engine.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
None.
UndoLastRequest Method
This method removes the last request sent to the configuration engine.
Input Arguments
ObjId. The unique identifier of the complex object root (for example, Quote ID).
RootId. The unique identifier of the complex object root (for example, Quote Line Item row Id).
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Output Arguments
None.
Instance APIs to Set Product and Attribute Values
The following methods are used for setting product and attribute values:
AddItem Method
This method adds an item to a specified port, creating a new instance of an item. If you want to change the quantity of an existing instance of an item, use SetItemQuantity.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
(Optional) AutoResolve. Automatically resolves port cardinality violations. The default is N.
Prod Item Id. Product Id. This is S_ISS_SUB_OBJ.SUB_OBJ_ID (in other words CFG_MODEL_ID of referred product).
Name. The name of the item.
Product Id. The product id in S_PROD_INT table.
Port Item Id. Port or domain information. This is:
S_ISS_SUB_OBJ.PAR_REL_ID if this field is not null. Port has type Domain of class or dynamic class relationships
S_ISS_SUB_OBJ.ORIG_ID if S_ISS_SUB_OBJ.PAR_REL_ID is null. Port has type Product (S_ISS_SUB_OBJ.SUB_OBJ_TYPE_CD = Product)
Quantity. The item quantity.
List Price. The item list price from Pricing Manager, which can be empty.
Current Price. The current price from Pricing Manager, which can be empty.
Parent Path. The path is the object's Integration ID of the Parent Line Item where this additem call will be acted on.
Output Arguments
None.
CopyInstance Method
This method copies an instance.
Input Arguments
ObjId. The unique identifier of the complex object header of the source instance.
RootId. The unique identifier of the complex object root of the source instance.
DestObjId. The unique identifier of the complex object header of the destination instance.
IntObjName. The name of the integration object specified in Oracle's Web Tools.
Output Arguments
None.
GetLinkItemValues Method
This method retrieves the linked item values. Use it as follows:
Clear the cache values if specified by the caller.
For the search specification set by the caller:
If only RootProductId is given and no child property sets are given, try to find only the values for LinkItems that are under the given RootProductId.
If both RootProductId and Child Property Sets are given, try to find only the values for LinkItems that are defined in the child property sets.
Input Arguments
ClearValues. Y or N. Clears all cached Link Item Values.
GetAllValues. Y or N. Gets all values from the cache or only the values passed in for the search specification.
RootProductId. Root Product Id.
LIVersionId. Root Product Version Id (optional).
Child Property Set (0) Type: LinkedItem:
ProductId. Product Id
VersionId. (optional) Version Id
InClass. Y or N.
LinkItemId. Link Item Id
Child Property Set (1) Type: LinkedItem:
ProductId
VersionId (optional) Version Id
InClass. Y or N.
LinkItemId. Link Item Id
Output Arguments
Each linked item is returned as a child property set as follows:
Child Property Set Type: LinkedItem:
CxLnkItmId. Link Item Id.
CxLnkItmName. Link Item Name.
CxLnkItmDesc. Description.
CxLnkItmDef. Definition.
CxLnkItmIsActive. IsActive Flag.
CxLnkItmValue. Value.
CxLnkItmDisplayValue. Display Value.
CxLnkItmType. Type.
CxLnkItmProductId. Product Id where this linked item is defined.
CxLnkItmVersionId. Version Id of the previous product.
RemoveItem Method
This method removes an item from the instance.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item.
Output Arguments
None.
ReplaceItem Method
This method replaces an existing item with the new item on a specified port, removing the existing item from the port and creating a new instance for new item.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. Integration Id of the existing product (which is going to be replaced by new product)
Name. The name of the new item.
Product Id. The new product id in S_PROD_INT table.
Prod Item Id. The ID of the new item (for example, ORIG_ID in S_PROD_ITEM table).
Port Item Id. The ID of the item's port (for example, ORIG_ID of the port in S_PROD_ITEM table).
Quantity. The new item quantity.
(Optional) AutoResolve. Automatically resolves port cardinality violations. The default is N.
(Optional) List Price. The item list price from Pricing Manager, which can be empty.
(Optional) Current Price. The current price from Pricing Manager, which can be empty.
(Optional) Parent Path. Integration Id of the parent item the port belongs to.
(Optional) Parent Display Name. Display name of the parent product. This parameter and the display parameters that follow would be used in logging error messages in case of error.
(Optional) New Child Display Name. Display name of the new child product.
(Optional) Port Display Name. Display name of the Relationship of the child product.
Output Arguments
None.
RepriceInstance Method
This method updates the instance with values from the Pricing Manager service. A call to the Pricing Manager service's CalculatePriceCX method returns a property set that is the input to this method.
Input Arguments
ObjId. The unique identifier of the complex object header.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
The input property set has child property sets containing the repricing information. The format of the input property set is as follows:
< ObjId="value" RootId="value" Version="value" > < IntId="integration id" FieldName="value"… FieldName="value" > < IntId="integration id" FieldName="value"… FieldName="value" > … < />
In this context, the Integration ID is used to retrieve the instance item.
Output Arguments
None.
SetAttribute Method
This method sets the value of an item's attribute.
Input Arguments
ObjId. The unique identifier of the complex object root.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item with attribute to set.
Value. The attribute value.
Name. The attribute name.
XA Id. The extended attribute ID. This is the row ID of the attribute in the XA Attribute business component. This parameter is required, and you can use a dummy value instead of the actual row ID.
Property Type Code. The attribute type.
Output Arguments
None.
SetItemQuantity Method
This method sets the quantity of an item.
Input Arguments
ObjId. The unique identifier of the complex object root.
RootId. The unique identifier of the complex object root.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version.
Path. The path of the item.
Quantity. The quantity to set.
Output Arguments
None.
SetFieldValue Method
This method updates the value of a field in a line item.
Input Arguments
Path. The Integration Id of the line item (or of the parent line item in the case of an attribute).
FieldName. The field name. This must not be a field that is used and controlled by Siebel Product Configurator (such as: Quantity, Port Item Id, Integration Id, Attribute Value, and so on).
XA Id. (Optional) The attribute Id. Specify only if you are setting the value in an attribute field.
Value. The value of the field.
ObjId. A unique identifier of the complex object header (for example, quote ID).
RootId. A unique identifier of the complex object root (for example, quote line item row ID).
Output Arguments
None.
SetLinkItemValues Method
This method overwrites the linked item values for the specified linked items. It can be called multiple times and the effects are cumulative; when updating the same linked item, the latest call will supersede the previous calls.
Input Arguments
This can contain many child Property Sets of Type SetLinkItemValues. The Value of the child Property Set is the Product Id whose linked items need to be overwritten. The properties of each child Property Set specify the linked item name and value as the name value pairs.
For example:
InputPropSet Child PropSet (0) Type=LinkItemOverwrite Value=Prod1 Account City = San Francisco Account Country = USA Child PropSet (1) Type=LinkItemOverwrite Value=Prod2 Account = ABC Inc. // --------- Child Property Set // Type : SetLinkItemValues // Value :Product Id 1 value // Name - Value Pairs (Name is the Link Item Name. // Value is the value you want to set.) // --------- Child Property Set // Type : LinkItemOverwrite // Value :Product Id 2 value // Name - Value Pairs // --------- Child Property Set // Type : LinkItemOverwrite // Value :Product Id 3 value // Name - Value Pairs
Object Broker Methods
The following methods call the Cfg Object Broker business service, which functions as a wrapper for the Object Broker:
ResetSKC Method
This method posts a request to invalidate all cached object definitions. The application does this logically by going through the cached records in the ISS VOD Cache Sync business component and resetting the fields values for all the VOD objects versions that are recorded as been cached. For more information about how this method is invoked, see Clearing the Siebel Product Configurator Cache to Improve Performance.
Input Arguments
Not applicable.
Output Arguments
Not applicable.
ResetObjInSKC Method
This method posts a request to invalidate a specific cached object definition. The application does this logically by querying the ISS VOD Cache Sync business component to find the record based on the Type and VodId input parameters. If a record is found then the field values for that specific record are reset.
Input Arguments
Type. The type of the VOD object. Valid values are: ISS_ATTR_DEF, ISS_CLASS_DEF or ISS_PROD_DEF.
VodId. The value of the VOD object Id. This value must match the value found in either the S_VOD.OBJECT_NUM or the S_PROD_INT.CFG_MODEL_ID field.
Output Arguments
Not applicable.
GetProdStruct Method
This method returns the full structure of the customizable product.
Input Arguments
RootId. The unique identifier of the complex object root. If provided, RootName, Vendor, and Org are ignored. If not provided, RootName, Vendor, and Org are used to uniquely identify the product.
RootName. The root product name. Optionally, you can use Name together with Vendor and Org to uniquely identify a product.
(Optional) Version. Version arguments are used only when testing a customizable product version that is different from the currently released version. Specify 0 to return the work space.
(Optional) Vendor. Use with RootName to uniquely identify the product. By default, this is empty.
(Optional) Org. Use with RootName to uniquely identify the product. By default, this is empty.
Full. Y returns the full product structure. N returns the first level of the product.
Output Arguments
The output is in Property Set format.
<ProdStruct> RootId <ProdId> Name ClassId <Port> Name ClassName ClassId OrigId Type MinCard MaxCard DefltCard LocalType InternalType <Subobject Id/> ... </port> ... <Attribute> Name <Domain Value /> ... </Attribute> ... </ProdId> ... </ProdStruct>
DeltaQuote Method
This method performs a recursive tree comparison of two property sets to determine the difference between them based on supplied criteria. It returns a copy of the destination product instance, marked up to indicate changes. This preconfigured API is called from an external service only in SIS Order Management, which is the only way to see this API function for the API Discovery.
In one example, you start with a computer that has one hard drive and a 900 MHz processor. You upgrade it to add a second hard drive (quantity now = 2) and replace the processor with a 1000 MHz model. The result would be one existing hard drive, one new hard drive (the instance is split), one 900 MHz CPU removed, and one new 1000 MHz CPU.
If the output property set is empty and no error code is thrown, the most likely cause is that the instances were not recognized. Check the RootId parameters and the indenting of your source and destination SiebelMessages.
Input Arguments
SrcRootId. The root ID for the product in the source of the comparison. This is the "before" property set.
DestRootId. The root ID for the product in the destination of the comparison. This is the "after" property set.
DeltaSrcField. The Path field in the source instance.
DeltaDestField. The Path field in the destination instance.
SrcItemIntComp. The name of the integration component for the items in the source instance (for example, Quote Item).
DestItemIntComp. The name of the integration component for the items in the destination instance (for example, Quote Item).
SrcXAIntComp. The name of the integration component for the XA in the source instance (for example, Quote Item XA).
DestXAIntComp. The name of the integration component for the XA in the destination instance (for example, Quote Item XA.)
ITEM_MAPPING. This is a property set with type= "ITEM_MAPPING." It contains a list of those fields that must be copied when creating a new instance of an item in the destination property set. The property names are the fields in the source instance, and the property values are the names in the destination instance. Here is an example output from the API sniffers:
CHILD PROPERTY SET 3 Type: ITEM_MAPPING Value: Unit Price = Unit Price Action Code = Action Code Root Id = Root Id Port Item Id = Port Item Id Integration Id = Integration Id Discount Amount = Discount Amount Parent Id = Parent Id Product Id = Product Id Prod Item Id = Prod Item Id Quantity = Quantity
XA_MAPPING. This is a property set with type= "XA_MAPPING." It contains a list of those fields that must be copied for each of the attributes when creating a new instance of an item in the destination property set. The property names are the fields in the source instance, and the property values are the names in the destination instance. Here is an example output from the API sniffers:
CHILD PROPERTY SET 2 Type: XA_MAPPING Value: Action Code = Action Code Value = Value Read Only = Read Only Name = Name Property Type Code = Property Type Code XA Id = XA Id
ITEM_COMPARE. This is a property set with type= "ITEM_COMPARE." It defines what constitutes a unique instance of an item in the source and destination instances. For the service, it answers the question "How do I know if these two things are the same?" Here is an example output from the API sniffers:
CHILD PROPERTY SET 1 Type: ITEM_COMPARE Value: Port Item Id = Port Item Id Product Id = Product Id
XA_COMPARE. This is a property set with type= "XA_COMPARE." It defines what constitutes a unique instance of an attribute in the source and destination instances. For the service, it answers the question "How do I know if these two things are the same?" Here is an example output from the API sniffers:
CHILD PROPERTY SET 0 Type: XA_COMPARE Value: Value = Value Name = Name Property Type Code = Property Type Code XA Id = XA Id
SrcInst. This is the Source Instance ("before") that will be used in the delta comparison. It is a double-indented SiebelMessage with a type of SrcInst. The first section of the output from the API sniffers is shown here for reference. Note the indenting of the SiebelMessage.
CHILD PROPERTY SET 4 Type: SrcInst Value: CHILD PROPERTY SET 0 Type: Value: CHILD PROPERTY SET 0 Type: SiebelMessage Value: MessageId = 1-12949 IntObjectFormat = Siebel Hierarchical MessageType = Integration Object IntObjectName = CX Product Validation CHILD PROPERTY SET 0 Type: ListOfCX Product Validation Value: CHILD PROPERTY SET 0 Type: Product Header Value: Name = 1-12950 Price List Id = 1-ZEC Id = 1-12951 CHILD PROPERTY SET 0 Type: ListOfProduct Item Value: CHILD PROPERTY SET 0 Type: Product Item Value: Action Code = Existing Port Item Id = Integration Id = 1-12744 Cfg Type = Configurator Name = System Chassis Product Id = 1-1M9Y Prod Item Id = null Quantity = 1.0 Id = 1-12744
DestInst. This is the Destination Instance ("after") that will be used in the delta comparison. It is a double-indented SiebelMessage with a type of DestInst. The first section of the output from the API sniffers is shown here for reference. Note the indenting of the SiebelMessage.
CHILD PROPERTY SET 5 Type: DestInst Value: CHILD PROPERTY SET 0 Type: Value: CHILD PROPERTY SET 0 Type: SiebelMessage Value: MessageId = 123 IntObjectFormat = Siebel Hierarchical MessageType = Integration Object IntObjectName = CX Product Validation CHILD PROPERTY SET 0 Type: ListOfCX Product Validation Value: CHILD PROPERTY SET 0 Type: Product Header Value: Name = 1-12950 Price List Id = 1-ZEC Id = 1-12951 CHILD PROPERTY SET 0 Type: ListOfProduct Item Value: CHILD PROPERTY SET 0 Type: Product Item Value: Has Generics Flag = Y Action Code = Existing Integration Id = 1-12744 Port Item Id = Sequence Number = Name = System Chassis Cfg Type = Configurator Product Id = 1-1M9Y Quantity = 1.0 Prod Item Id = null Id = 1-12744
The destination instance is returned as a SiebelMessage, modified and marked up with status information. The status (new, modified, existing, removed) is indicated in the Action Code field of each item and attribute.
Instance APIs to Select the Siebel Product Configurator User Interface
The following methods allow you to select the Siebel Product Configurator User Interface:
These methods are part of the Cfg Web UI Service Loader business service.
SelectCfgUIService Method
Syntax
SelectCfgUIService (inputArgs as Property Set, outputArgs as Property Set)
Input Arguments
CxVersion. The version of the product that you are validating or customizing. Empty means latest version.
ComplexProductId. The product id (in S_PROD_INT) for the product that you are validating or customizing.
Output Arguments
Cfg UI Option Id. Optional. If empty, Siebel Product Configurator will use the default templates.
High Interactivity. Required. The value is Y.
Usage
For any method you call on the UI service, you can call SelectCfgUIService to determine which UI Service to load.
You must specify the name of your business service in the User Property of the UI Service (Cfg Web UI Service (JS) and Cfg Web UI Service) as follows:
Loader Service Name = <your business service name>
You must also modify all the related workflows (such as Validate and Customize) to first call this customized method in your business service.
Example
For example, you can use the LoadInstance method to call SelectCfgUIService as follows:
function LoadInstance (inputArgs, outputArgs) { var oUIService; var oService = TheApplication().GetService("Cfg Web UI Service Loader"); var oOutputs = TheApplication().NewPropertySet(); oService.InvokeMethod("SelectCfgUIService", inputArgs, oOutputs); var optionId = oOutputs.GetProperty ("Cfg UI Option Id"); var strSupportJS = oOutputs.GetProperty ("High Interactivity"); with(inputArgs) { SetProperty ("Cfg UI Option Id", optionId); SetProperty ("High Interactivity", strSupportJS); } [if (strSupportJS == "Yes")] { oUIService = TheApplication().GetService ("Cfg Web UI Service (JS)"); } else { oUIService = TheApplication().GetService ("Cfg Web UI Service"); } oUIService.InvokeMethod("LoadInstance", inputArgs, outputArgs); }
SetUIOption Method
SetUIOption method is used to display Siebel Product Configurator interface.
Syntax
SetUIOption (inputArgs as Property Set, outputArgs as Property Set).
Input Arguments
A property set that contains the name or value pairs representing the value of the Product Id and UI Option Name fields.
Usage
Because this method is part of a cached Business Service, you can call this method at any time before Configurator is called.
The values you use as input arguments indicate which UI option to use for each product you specify.
Example
Add a workflow step at the beginning of the Siebel Product Configurator Load Workflow. This step calls a custom business service that determines which UI option to use for the Product that is being customized. After determining which UI option to use, the workflow uses the SetUIOption method to set the appropriate UI option.
The sample custom business service has the following features:
Business Service Name: SIS OM Workflow Utility
Business Service Method Name: Force_UI
Business Service Method Arguments
Argument Name | Data Type | Storage Type | Type |
---|---|---|---|
Product_Id |
String |
Property |
Input |
UI_Name |
String |
Property |
Input |
Business Service Server Script:
function Service_PreInvokeMethod (MethodName, Inputs, Outputs) { Outputs.SetProperty("ErrorCode", ""); Outputs.SetProperty("ErrorText", ""); Outputs.SetProperty("Error Code", ""); Outputs.SetProperty("Error Message", ""); switch(MethodName) { case "Force_UI": var strProdId = Inputs.GetProperty("Product_Id"); var strUI_Name = Inputs.GetProperty("UI_Name"); var oService = TheApplication().GetService("Cfg Web UI Service Loader"); var oInputs = TheApplication().NewPropertySet(); var oOutputs = TheApplication().NewPropertySet(); with(oInputs) { /* The input argument name is passed as a string (the product id)*/ /*****************************************************************/ SetProperty(strProdId,strUI_Name); } /* Force Configuration session UI */ /*********************************/ oService.InvokeMethod("SetUIOption", oInputs, oOutputs); return (CancelOperation); break; default: return (ContinueOperation); break; } }
In the previous code, consider the scenario where product KG1 and KG2 are to be displayed. Assume both products have the following properties.
Argument Name | Data Type | Storage Type |
---|---|---|
UI Options |
Open UI Option 1, Open UI Option 2, Open UI Option3 |
Open UI Option 1, Open UI Option 2, Open UI Option3 |
Product Id |
12-12345 |
12-67890 |
To set Open UI Option 1 for KG1 and Open UI Option 3 for KG2, replace the code SetProperty(strProdId,strUI_Name) with the following lines:
SetProperty("12-12345", "Open UI Option 1"); SetProperty("12-67890", "Open UI Option 3");
In the workflow that launches the Siebel Product Configurator UI (which is Configurator Load for non-ABO or SIS OM Edit for ABO), the customer might add two steps before launching Siebel Product Configurator:
One to invoke the sample script
One to invoke the SetUIOption method to preset the UI option
Then Siebel Product Configurator uses this preset option during end-user configuration sessions.
Instance API to Validate Customizable Products
The following method allows you to batch validate customizable products.
BatchValidate Method
There are three options for using this method:
LoadInstance option where the instance is already loaded in the context service. This is for validating an existing quote, order, agreement, or asset. A workflow step to load the instance into the context service must be done before calling BatchValidate.
LoadInstance option where the BatchValidate API will handle loading the instance into the context service. This is for validating an existing quote, order, agreement, or asset. The instance does not have to be in the context service already.
SetInstance option. This option allows the user to pass in the customizable product instance as a property set.
Input Arguments
The following are the input arguments:
Mode. Quote, Order, Agreement, or Asset.
IntObjName. The name of the integration object specified in Oracle's Web Tools (for example, 7.7 Quote Integration Object, 7.7 Order Entry Integration Object, 7.7 Asset Integration Object, 7.7 Service Agreement Integration Object, SIS OM Asset, SIS OM Quote, SIS OM Order).
ProductId. The unique identifier of the product. This ID is required when using Siebel Product Configurator with remote enabled.
ObjId. The unique identifier of the complex object header (for example, Quote Id, Asset Id, Order Id).
RootId. The unique identifier of the complex object root (for example, Quote Line Item Id, when Mode = Asset, Obj Id and Root Id point to Asset Id).
InstanceName. The name of the instance being pushed to the context service. The value of this argument must be:
The name of the instance in the context service if using Option 1
Empty if using Option 2
Optional for Option 3
SetInstance. (Optional) Specifies whether to use the SetInstance or LoadInstance option. Value can be Y or N. If set to Y, the first child property set of the input argument must be the CP instance being validated in its property set representation form. N by default.
DetailedExpl. (Optional) Specifies whether to return a detailed explanation if there's a conflict. Value can be Y or N. N by default.
AutoSync. (Optional) Specifies whether to synchronize changes back to the database. Value can be Y or N. N is the default. The output property set does not synchronize to the database if the BatchValidate Status is Invalid.
Note: The AutoSync option must not be used for asset-based ordering. Instead, use delta processing, like the asset-based ordering workflow. For more information, see the workflow reference in Siebel Order Management Guide.DisablePricing. (Optional) Specifies whether to do pricing or not. Value can be Y or N. N by default.
OutOriginalInstance. (Optional) Specifies whether to return the original instance as a property set. Value can be Y or N. Y by default.
OutCompletedInstance. (Optional) Specifies whether to return the validated instance as a property set. Value can be Y or N. Y by default.
OutDelta. (Optional) Specifies whether to return a delta quote representing the difference between the original and validated instance as a property set. Value can be Y or N. Y by default.
IgnoreNewOptionalAttr (Optional). Specifies whether to ignore Optional Attributes. If the value is Y, then the output status is Valid even if optional attributes are omitted. If the value is not Y, then the status is Incomplete and an error message is displayed if optional attributes are omitted.
ExternalScript (Optional). Set this parameter to Y when Linked Items must be calculated. The default is N
Output
The output of BatchValidate is a Siebel Message containing:
Batch Validation Status. This property returns the status of BatchValidate. The return values can be:
Valid. No violations were found.
Incomplete. The constraint engine has found and corrected errors, but does not display an error message. The engine returns Invalid only if it can make a clear decision about how to correct the errors, which is the case for:
All violations of the maximum quantity where the engine detects unnecessary child products and deleting these child products brings the quantity below the maximum.
All violations of the minimum quantity where there is only one child product (that is, Domain = Product or Domain = Class/Dynamic Class where the domain has one product as a member).
Invalid. The engine does not have enough information to correct errors. This is true of violations of the minimum quantity where the there is more than one child product that can be used to correct the error.
Original Instance. A property set representation of the original instance being validated.
Completed Instance. A property set representation of the validated instance.
DeltaQuote. A property set representation of the difference between the original instance and the completed instance.
Generic Info. A property set containing generics and children relationship information for all ports. For example, batch validate the following three children as part of a parent product:
Parent prod Child prod 1 Child prod 2 Child prod 3
The generic information in batch validate output is as follows:
<Generic_spcInfo> <<_6SIA-4HSO8 _6SIA-4HQ0M="01" _6SIA-4HQ0L="01" _6SIA-4HQ0K="01" /> <<_6SIA-4HSR5 /> <<_6SIA-4HSR6 /> <<_6SIA-4HSR7 />
where:
6SIA-4HSO8 is the order line item ROW_ID of the Parent Product.
6SIA-4HQ0M, 6SIA-4HQ0L, 6SIA-4HQ0K are the relationship ROW_ID's for the child products.
The code mapped against the relationship ROW_ID's indicates whether the relationship has generics and children.
When 1st bit is set, relationship has generics
When 2nd bit is set, relationship has children
for example:
01. no generics, has children
11. has generics, has children
Use this code to determine minimum cardinality violations.
MissingRequiredAttr. A property set returning required attribute violations.
Error Message. A property set containing the error messages, if any, encountered during batch validation.
Note: Eligibility & Compatibility is automatically enforced by BatchValidate based on the EligibilityDisplayMode parameter setting on Object Manager. There is no additional parameter needed to enforce eligibility and compatibility during batch validate.
In addition, if PRESERVE_ENGINE_AND_USER_PICKS environment variable is enabled, the value in the CFG_STATE_CD column will effect the Batch Validate result. The PRESERVE_ENGINE_AND_USER_PICKS environment variable is enabled by default from 8.1 onwards.
For information about the user pick and engine pick setting in CFG_STATE_CD column, see 477087.1 (Doc ID) on My Oracle Support. This document was previously published as Siebel Alert 749.
Reset CFG_STATE_CD for all line items and attributes to user pick or leave empty if you want to preserve the content in the input instance.
Sample Code
The following code is an example of how BatchValidate can be used.
function Service_PreInvokeMethod (MethodName, Inputs, Outputs) { if (MethodName == "BatchValidate_Quote") { var head = "8SIA-81CQ4"; //QuoteId var item = "8SIA-81CVG"; // Line Item Id var io = "7.7 Quote Integration Object"; // Integration Object var s = TheApplication().GetService("Remote Complex Object Instance Service"); var inp = TheApplication().NewPropertySet(); var out = TheApplication().NewPropertySet(); inp.SetProperty("Mode","Quote"); inp.SetProperty("IntObjName", io); inp.SetProperty("ObjId",head); inp.SetProperty("RootId",item); inp.SetProperty("DetailedExpl","Y"); s.InvokeMethod("BatchValidate",inp,out); var s2 = TheApplication().GetService("EAI XML Write to File"); var inp2 = TheApplication().NewPropertySet(); var out2 = TheApplication().NewPropertySet(); inp2.SetProperty("FileName","c:\\ab.xml"); inp2.AddChild(out); s2. InvokeMethod("WritePropSet", inp2, out2); TheApplication().RaiseErrorText("Finished ..."); }