Click or drag to resize

Scripting Namespace

 
Classes
 ClassDescription
Public classAddItemArgument Represents an argument for adding an item to a collection.
Public classByteArrayContent Wrapper for System.Net.Http.ByteArrayContent.
Public classHttpContent Wrapper for System.Net.Http.httpContent.
Public classMultipartFormDataContent Wrapper for System.Net.Http.MultipartFormDataContent.
Public classStreamContent Wrapper for System.Net.Http.StreamContent.
Public classStreamReader Wrapper of System.IO.StreamReader for IronPython Scripting with limited set of features
Public classStringContent Wrapper for System.Net.Http.StringContent.
Interfaces
 InterfaceDescription
Public interfaceCode exampleIAction Quote Action
Example

Execute Reprice action

Python
for action in Quote.Actions:
    if action.Name == "Reprice" and action.IsPrimaryAction:
        Quote.ExecuteAction(action.Id)
        break
Public interfaceIActionCollection Quote action collection
Public interfaceIAddItemArgument Represents an argument for adding an item.
Public interfaceCode exampleIAdditionalDiscount Additional discount represent the additional discounts on the quote. User can add/remove/change additional discounts via Scripting.
Example

Adding new additional discount to quote

Python
ad = Quote.NewAdditionalDiscount();
ad.DiscountPercent = 10;
ad.Description = "New discount added via scripting";
Quote.AddAdditionalDiscount(ad);

Change additional discount

Python
ad = Quote.GetAdditionalDiscount("New discount added via scripting");
ad.DiscountPercent= 5;

Remove additional discount

Python
Quote.RemoveAdditionalDiscount("New discount added via scripting");
Public interfaceIAdditionalDiscountCollection Additional discount collection
Public interfaceIAliases Alias functions.
Public interfaceCode exampleIApiResponse This is abstract class which represent the response of custom API call. If ApiResponse is not provided within the script the result would be
  • Content type: application/json
  • Body: Ok
See IApiResponseFactory for more details about creating instance of this class.
Example
Remarks
This code define HTML response after logic in custom API script.
Python
#some custom logic
ApiResponse = ApiResponseFactory.HtmlResponse("some HTML");
Public interfaceIApiResponseFactory API Response
Public interfaceIApproversResponsibility Approvers Responsibility
Public interfaceIApproversResponsibilityCollection Approvers Responsibility Collection
Public interfaceIAssert Class containing helper assert methods. Primary usage should be for writing automated tests although it can be used also in production scripts for guard clauses.
Public interfaceIAssetAttribute Asset Attribute
Public interfaceIAssetConfiguration Asset Configuration
Public interfaceIAssetContainer Asset Container
Public interfaceIAssetContainerRow Asset Container Row
Public interfaceIAssetItem Asset line item
Public interfaceIAssetMainItem Asset main item
Public interfaceIAttachedDocument Attached document
Public interfaceIAttachedDocumentCollection Attached documents collection
Public interfaceIAttachment Represents an attachment to an email.
Public interfaceCode exampleIAuthorizedRestClient Client for communication with RESTful services using Authorization header built with credentials defined in Credentials Management
Example

Call current weather data for one location

Call service with providing city name and country/region code. API responds with a list of results that match a searching word.
API call:
http://api.openweathermap.org/data/2.5/weather?q={city name},{country/region code}
Parameters:
q city name and country/region code divided by comma, use ISO 3166 country/region codes
Python
#response is in JSON form of:
#{"main":{"temp":291.05,"pressure":1016,"humidity":88,"temp_min":288.15,"temp_max":296.15},
#"weather":[{"id":701,"main":"Mist","description":"mist","icon":"50n"}],
#"id":5391959,"name":"San Francisco","cod":200,"base":"stations"}
response = RestClient.Get('http://api.openweathermap.org/data/2.5/weather?q=SanFrancisco,usa')

Quote.GetCustomField('City').Content = response.name

Quote.GetCustomField('Weather Today').Content = str(response.weather[0].main)
Quote.GetCustomField('Weather Today Details').Content = str(response.weather[0].description)

Quote.GetCustomField('Weather Temperature MIX').Content = str(response.main.temp_max)
Quote.GetCustomField('Weather Temperature MAX').Content = str(response.main.temp_min)

Submit an HTTPS POST request with basic authentication using credentials defined in Credentials Management and JSON input data to the server

Submits JSON data to be processed to a specified resource and returns JSON response.
Response is deserialized, in order to be used as object in scripting.
Python
#example of url service
url = 'https://testcallidus.com/CallidusPortal/services/some-example-service'

headers = {}

#example of input JSON data
data = '[{"name": "SaaS Net New Revenue", "periodType": "month", "type": "Measurement", "value": { "amount": 100, "unitType": "USD" }}]'

#make HTTPS POST and receive response in form of dynamic entity
response = AuthorizedRestClient.Post('CredentialsFromStore', url, data, headers)

#Populate Quote custom fields
Quote.GetCustomField('Bonus type').Content = response.name
Quote.GetCustomField('Bonus amount').Content = str(response.value.amount)
Quote.GetCustomField('Bonut unit type').Content = response.value.unitType
Public interfaceIBeforeAddToQuoteEventArguments Argument provided when 'On AddToQuote' event occurs.
Public interfaceIBeforeConfigureEventArguments Argument provided when 'On Configure' event occurs.
Public interfaceIBeforeProductAddToQuoteEventArgument Context available for the event raised before product is being added/updated to the quote. Also raised after the item is being reconfigured and before updated back to the quote.
Public interfaceIBusinessPartner Business partner interface.
Public interfaceIBusinessPartnerPermission Business partner permission.
Public interfaceIBusinessPartnerRepository Business partner repository. Used to retrieve data about business partners.
Public interfaceCode exampleICompany Company information
Example

Check if user belongs to "SAP" company and notify user using IWorkflowContext within custom action script.

Python
if User.Company.Name == "SAP":
    WorkflowContext.ClientScript = "alert('Welcome to SAP!')";
Public interfaceCode exampleIContainer Container information
Example

Move container row up

Moving of container row has impact on the total order of container rows, so if row is identified while iterating through container rows
perform moving of row and add break to exit the current iteration. See following code as example.
Python
container = Product.GetContainerByName("Assets")

for row in container.Rows:
    if row['LicenceKey'] == 'Licence 2':
        container.MoveRowUp(row.RowIndex)
        break
Public interfaceCode exampleIContainerColumn Container column information
Public interfaceIContainerColumnCollection Container column collection
Public interfaceIContainerProperty Container property information
Public interfaceIContainerPropertyCollection Container property collection
Public interfaceIContainerRow Container row information
Public interfaceIContainerRowCollection Container row collection
Public interfaceIConvert Helper string conversion class.
Public interfaceICrmLandingEventArguments Argument provided when 'On Landing From Crm' event occurs.
Public interfaceICryptography Utility methods related to cryptography.
Public interfaceCode exampleICustomer Customer inforamtion
Example

Check if bill to customer is selected and show alert message using IWorkflowContext within custom action script.

Python
if Quote.BillToCustomer is not None:
WorkflowContext.ClientScript = "alert('" + Quote.BillToCustomer.FirstName + " " + Quote.BillToCustomer.LastName + "')";
Public interfaceICustomerHelper Customer helper interface
Public interfaceCode exampleICustomFieldChangedArgument Custom field change argument is passed when the custom field change event occurs. This class can be accessed via "arg" variable within the custom field change event handler.
Example

Using this argument on custom field change script

Python
diff = float(arg.NewValue) - float(arg.OldValue);
Quote.GetCustomField("CustomField1").Content = "You have changed custom field value for " + str(diff) + " points."
Public interfaceIDocumentPricingResponse Pricing condition data.
Public interfaceIFederationUtility Federation helper methods
Public interfaceIFileHelper File helper
Public interfaceIGeneratedDocument Generated document
Public interfaceIGeneratedDocumentCollection Generated documents collection
Public interfaceIHttpUtility Provides methods for encoding and decoding URLs when processing Web requests.
Public interfaceIHttpWebClientProtocol HttpWebClientProtocol
Public interfaceIItemAction Item Action
Public interfaceIItemActionCollection Item action collection
Public interfaceIItemActionId 
Public interfaceIItemCustomField Item custom field data. Contains additional data related to quote item custom field.
Public interfaceIItemCustomFieldCollection Item custom field collection
Public interfaceIItemInfo ItemInfo class is used to add additional information to cart item. These additional information can be added via administration.
Public interfaceIJsonHelper Represents an object with which we can serialize/deserialize JSON data.
Public interfaceCode exampleIKeyAttribute Key Attributes allow setting up an attribute as search criteria on the user side. This means that the user can search for quotes based on the value of their Key Attributes. User can set input value for Key Attribute via Scripting
Example

Setting input value without reconfigure for Key Attribute through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByAttributeName("Memory") is not None:
        item.GetKeyAttributeByAttributeName("Memory").SetInputValue("Memory key")

Setting input value with reconfigure for Key Attribute through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByAttributeName("Memory") is not None:
        item.GetKeyAttributeByAttributeName("Memory").SetInputValue("Memory key", True)
    if item.GetKeyAttributeByAttributeName("Processor") is not None:
        item.GetKeyAttributeByAttributeName("Processor").SetInputValue("Processor key", False)

Setting the key attribute value without reconfigure through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByAttributeName("Memory") is not None:
        item.GetKeyAttributeByAttributeName("Memory").SetInputValue("Memory_cpq")

Setting the key attribute value with reconfigure through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByAttributeName("Memory") is not None:
        item.GetKeyAttributeByAttributeName("Memory").SetInputValue("Memory_cpq", True)
    if item.GetKeyAttributeByAttributeName("Processor") is not None:
        item.GetKeyAttributeByAttributeName("Processor").SetInputValue("Processor_cpq", False)
Public interfaceIKeyAttributeCollection Key attribute collection
Public interfaceCode exampleILineItem Line Item
Example

Getting Key Attribute by attribute system id through Scripting

Python
for mainItem in Quote.MainItems:
    if mainItem.ProductName == "Laptop":
        for lineItem in mainItem.LineItems:
           if lineItem.ProductName == "Laptop bag":
               Quote.GetCustomField("Custom Field 1").Content = lineItem.GetKeyAttribute("laptop_bag_cpq").Label

Getting Key Attribute by attribute name through Scripting

Python
for mainItem in Quote.MainItems:
    if mainItem.ProductName == "Laptop":
        for lineItem in mainItem.LineItems:
           if lineItem.ProductName == "Laptop bag":
               Quote.GetCustomField("Custom Field 2").Content = lineItem.GetKeyAttributeByAttributeName("Laptop Bag").Label

Getting Key Attribute by attribute label through Scripting

Python
for mainItem in Quote.MainItems:
    if mainItem.ProductName == "Laptop":
        for lineItem in mainItem.LineItems:
           if lineItem.ProductName == "Laptop bag":
               Quote.GetCustomField("Custom Field 3").Content = lineItem.GetKeyAttributeByLabel("Laptop Bag").ParsedValue
Python
item = Quote.GetItemByQuoteItem("2.1")
Quote.GetCustomField("Custom Field 4").Content = item.AsLineItem.GetKeyAttributeByLabel("Memory").Label
Public interfaceILineItemCollection Line item collection
Public interfaceILog ILog class write messages to log
Public interfaceIMailAddress Represents the address of an electronic mail sender or recipient.
Public interfaceIMailMessage MailMessage used by SmtpClient to send mails.
Public interfaceCode exampleIMainItem Main item
Example

Check if copy action is available and execute it

In order to easy get item action id, use item action id constants in following format:
Quote.ItemActionId.CopyItemId, Quote.ItemActionId.EditItemId, Quote.ItemActionId.UpgradeToNewProductVersionItemId etc.
Python
for item in Quote.MainItems:
    if item.PartNumber == "PART-NUMBER-123":
        for action in item.Actions:
            if action.Id == Quote.ItemActionId.CopyItemId:
                item.Copy()

Getting Key Attribute by attribute system id through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttribute("Hard Drive") is not None:
        ka = item.GetKeyAttribute("Hard Drive")
        ka.Label = "Hard Drive"

Getting Key Attribute by attribute name through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByAttributeName("Hard Drive") is not None:
        ka = item.GetKeyAttributeByAttributeName("Hard Drive")
        ka.Label = "Hard Drive"

Getting Key Attribute by attribute label through Scripting

Python
for item in Quote.MainItems:
    if item.GetKeyAttributeByLabel("Hard Drive") is not None:
        ka = item.GetKeyAttributeByLabel("Hard Drive")
        ka.Label = "New label for Hard Drive"
Python
item = Quote.GetItemByQuoteItem("2.1")
Quote.GetCustomField("Custom Field 1").Content = item.AsMainItem.GetKeyAttributeByLabel("Memory").Label

Calculating Rolled Up values of Main Items

Python
miItems = []
for item in Quote.MainItems:
    miItems.append(item)
miItems.reverse()

for mi in miItems:
    mi.RolledUpListPrice = mi.ListPrice
    mi.RolledUpExtendedListPrice = mi.ExtendedListPrice
    mi.RolledUpNetPrice = mi.NetPrice
    mi.RolledUpExtendedAmount = mi.ExtendedAmount
    mi.RolledUpEndCustomerUnitPrice = mi.EndUserNet
    mi.RolledUpEndCustomerExtendedPrice = mi.EndUserExtendedAmount
    mi.RolledUpCost = mi.Cost
    mi.RolledUpExtendedCost = mi.ExtendedCost
    mi.RolledUpDiscountAmount = mi.DiscountAmount

    for li in mi.LineItems:
        if li.IsOptional:
            continue
        mi.RolledUpListPrice += li.ListPrice
        mi.RolledUpExtendedListPrice += li.ExtendedListPrice
        mi.RolledUpNetPrice += li.NetPrice
        mi.RolledUpExtendedAmount += li.ExtendedAmount
        mi.RolledUpEndCustomerUnitPrice += li.EndUserNet
        mi.RolledUpEndCustomerExtendedPrice += li.EndUserExtendedAmount
        mi.RolledUpCost += li.Cost
        mi.RolledUpExtendedCost += li.ExtendedCost
        mi.RolledUpDiscountAmount += li.DiscountAmount

Inline edit of existing configurable item on the quote

Configuration of quote main item can be updated automatically through scripting without leaving currently opened quote (for example, by clicking custom quote action with following script example).
All quote calculations will be executed in the same way as item is manually updated from the configurator.
Important note - rules will not be triggered when attribute values are modified through scripting.
To enforce standard CPQ rules' execution, add Product.ApplyRules() before doing update of configuration.
Python
for mainItem in Quote.MainItems:
    if mainItem.ProductName == 'Maintenance':
        mainItem.Edit()
        Product.Attributes.GetByName('Maintenance duration').SelectValue('5-YEARS')
        Product.Attributes.GetByName('Contract Type').AssignValue('Updated contract')
        if Product.Attributes.GetByName('1 Year Support').SelectedValue is not None:
            Product.Attributes.GetByName('1 Year Support').SelectedValue.IsSelected = False
        Product.UpdateQuote()
        break
Public interfaceIMainItemCollection Main item collection
Public interfaceIMarket Market
Public interfaceCode exampleImutualTLSRestClient Client for communication with RESTful services using client certificates generated/uploaded via Cerificate Management feature: Setup -> Security -> Certificate Management -> System Certificates (name of the certificate with Client Certificate Authentication purpose).
Example

Call current weather data for one location

Call service with providing city name and country/region code. API responds with a list of results that match a searching word.
API call:
http://api.openweathermap.org/data/2.5/weather?q={city name},{country/region code}
Parameters:
q city name and country/region code divided by comma, use ISO 3166 country/region codes
Python
#response is in JSON form of:
#{"main":{"temp":291.05,"pressure":1016,"humidity":88,"temp_min":288.15,"temp_max":296.15},
#"weather":[{"id":701,"main":"Mist","description":"mist","icon":"50n"}],
#"id":5391959,"name":"San Francisco","cod":200,"base":"stations"}
response = mTLSRestClient.Get('ApiCertificate', 'http://api.openweathermap.org/data/2.5/weather?q=SanFrancisco,usa')

Quote.GetCustomField('City').Content = response.name

Quote.GetCustomField('Weather Today').Content = str(response.weather[0].main)
Quote.GetCustomField('Weather Today Details').Content = str(response.weather[0].description)

Quote.GetCustomField('Weather Temperature MIX').Content = str(response.main.temp_max)
Quote.GetCustomField('Weather Temperature MAX').Content = str(response.main.temp_min)

Submit an HTTPS POST request with client certificate authentication and JSON input data to the server

Submits JSON data to be processed to a specified resource and returns JSON response.
Response is deserialized, in order to be used as object in scripting.
Python
#example of url service
url = 'https://testcallidus.com/CallidusPortal/services/some-example-service'

headers = { }

#example of input JSON data
data = '[{"name": "SaaS Net New Revenue", "periodType": "month", "type": "Measurement", "value": { "amount": 100, "unitType": "USD" }}]'

#make HTTPS POST and receive response in form of dynamic entity
response = mTLSRestClient.Post('AuthorizationCertificate' ,url, data, headers)

#Populate Quote custom fields
Quote.GetCustomField('Bonus type').Content = response.name
Quote.GetCustomField('Bonus amount').Content = str(response.value.amount)
Quote.GetCustomField('Bonut unit type').Content = response.value.unitType
Public interfaceINetworkCredential Provides credentials for password-based authentication.
Public interfaceINotifications Notifications.
Public interfaceIPartnerFunction Partner function interface.
Public interfaceIPartnerFunctionRepository Partner function repository. Used to retrieve data about partner functions.
Public interfaceIPartnerFunctionTranslation Partner function translation interface.
Public interfaceIPostedFile Posted File information
Public interfaceIProduct Product information
Public interfaceIProductAddEditArgument Product added/updated argument is passed when the product added/updated to the quote event occurs.
Public interfaceIProductAttribute Product attribute information
Public interfaceIProductAttributeCollection Product attribute collection
Public interfaceIProductAttributeValue Product attribute value information
Public interfaceIProductAttributeValueCollection Product attribute value collection
Public interfaceIProductBeforeAddToQuoteEventArgument Before product Add to quote argument is passed before 'Product is added to the quote' event occurs.
Public interfaceIProductErrorMessages Product error messages. Messages are shown in the responder part of the configurator as errors.
Public interfaceCode exampleIProductHelper Helper class which allow us to globally manipulate the products.
Example

Check if product is simple by product's system id

Python
if ProductHelper.IsSimpleProduct("Laptop_Computer_cpq"):
    Quote.GetCustomField("SimpleProducts").Content = "Laptop is simple product"
else:
    Quote.GetCustomField("SimpleProducts").Content = "Laptop is configurable product"

Inline adding new product with configuration to the quote

Product with configuration can be configured and added automatically through scripting without leaving currently opened quote (for example, by clicking custom quote action with following script example)
or can be inlined configured and added from other product's configurator through script attached on some product event
(When product rule execution ends, When product configuration is completed, Before Add to quote, When product is added to quote etc.).
All quote calculations will be executed in the same way as item is manually added from the configurator.
Important note - rules will not be triggered when attribute values are modified through scripting.
To enforce standard CPQ rules' execution, add Product.ApplyRules() before doing update of configuration.
Python
inlineProduct = ProductHelper.CreateProduct('Maintenance_cpq')
inlineProduct.Attributes.GetByName('1 Year Support').SelectValue('1')
inlineProduct.Attributes.GetByName('Maintenance duration').SelectValue('1-YEAR')
inlineProduct.Attributes.GetByName('Contract Type').AssignValue('New contract signed')
inlineProduct.AddToQuote()
Public interfaceIProductInfo Provides information about a product exposed on 'On Configure' event.
Public interfaceIProductMessages Product configuration template messages. Messages are shown in the responder part of the configurator.
Public interfaceIProductTab Product Tab information
Public interfaceCode exampleIProductTabChangedArgument Product tab change argument is passed when the product tab change event occurs. This class can be accessed via "arg" variable within the product tab change event script.
Example

Using this argument on product tab change script

Python
if arg.NameOfCurrentTab == 'Second tab':
    Product.Attributes.GetByName("Message").AssignValue("You have changed tab from " + arg.NameOfPreviousTab + " to " + arg.NameOfCurrentTab);
Public interfaceIProductTabCollection Product tab collection
Public interfaceIProductType Product Type information
Public interfaceCode exampleIProductTypeItem Represent product type quote item
Example

Setting product type's discount amount according to subtotal for currently selected market

Python
for productTypeItem in Quote.ProductTypes:
    if productTypeItem.SubtotalInMarket > 1500:
        productTypeItem.DiscountAmount = 250
    else:
        productTypeItem.DiscountAmount = 50
Public interfaceIProductTypeItemCollection Product type item collection
Public interfaceIProductValidationMessage Product Validation Message
Public interfaceIProductValidationMessageCollection Product validation message collection
Public interfaceCode exampleIQuote Quote
Example

Execute quote action

In order to easy get quote action id, use action id constants in following format:
Quote.QuoteActionId.ViewQuoteId, Quote.QuoteActionId.DeleteQuoteId, Quote.QuoteActionId.ArchiveQuoteId, Quote.QuoteActionId.CopyQuoteId, Quote.QuoteActionId.QuoteWonId etc.
Python
Quote.ExecuteAction(Quote.QuoteActionId.PlaceOrderId)

Adding new additional discount to quote

See IAdditionalDiscount how to set additional discount in the quote

Attaching the specified Opportunity to quote

Python
Quote.AttachToQuote("0063000000aiy99AAA")

Changing Quote Status to specified Quote Status

Python
Quote.ChangeQuoteStatus("Waiting for Approval")

Determining whether quote contails any Product with specified system id(s)

Python
if Quote.ContainsAnyProduct("SMB_Desktop_computer_cpq", "Laptop_IBM_cpq"):
Quote.CustomFields.DisallowValues("Custom Field Name 1", "Custom Field Value 1", "Custom Field Value 2")

Determining whether quote contains any Product with specified product name(s)

Python
if Quote.ContainsAnyProductByName("SMB Desktop", "Laptop IBM"):
Quote.CustomFields.Allow("Hard Drive", "Memory")

Determining whether quote contains any Product with specified part number(s)

Python
if Quote.ContainsAnyProductByPartNumber("SMB 12345", "IBM 12345")
Quote.CustomFields.Allow("Hard Drive", "Memory")

Determining whether quote contains any item with specified Product Type system id(s)

Python
if Quote.ContainsAnyProductType("Hardware_cpq", "Software_cpq")
Quote.GetCustomField("Info").Content = "Quote is containing hardware and software products"

Determining whether quote contains any item with specified Product Type name(s)

Python
if Quote.ContainsAnyProductTypeByNames("Hardware", "Software")
Quote.GetCustomField("Info").Content = "Quote is containing hardware and software products"

Getting Additional Discount from quote

See IAdditionalDiscount how to get additional discount in the quote

Getting Custom Field by strong name

See IQuoteCustomField how to get custom field by strong name

Getting Quote Item by quote item

Python
if Quote.GetItemByQuoteItem(1) is not None:
Quote.GetCustomField("Custom Field 1").Content = Quote.GetItemByQuoteItem(1).AsMainItem.RolledUpExtendedAmount
Python
if Quote.GetItemByQuoteItem("1.1") is not None:
Quote.GetCustomField("Custom Field 2").Content = Quote.GetItemByQuoteItem("1.1").AsMainItem.RolledUpDiscountAmount

Getting Quote Item by unique identifier

Python
if Quote.GetItemByUniqueIdentifier("293f526d-37ad-4c7b-af66-182a7d3f3f0d") is not None:
Quote.GetCustomField("Custom Field 3").Content = Quote.GetItemByUniqueIdentifier("293f526d-37ad-4c7b-af66-182a7d3f3f0d").AsMainItem.ShippingCostInMarket

Getting Items by Product Type system id

Python
quoteItems = Quote.GetItemsByProductTypeSystemId("Hardware_cpq")
for item in quoteItems:
totalHardwarePrice = totalHardwarePrice + item.ListPriceInMarket

Getting latest generated Document File

Python
fileName = Quote.GetLatestGeneratedDocumentFileName()

Getting latest generated Document File in bytes

Python
fileInBytes = Quote.GetLatestGeneratedDocumentInBytes()

Getting generated document list

Python
docList = Quote.GetGeneratedDocumentList()

Getting generated document list by template name

Python
docList = Quote.GetGeneratedDocumentList("templateName")

Getting attached document list

Python
docList = Quote.GetAttachedDocumentList()

Getting attached document by document id

Python
doc = Quote.GetAttachedDocument(100)

Getting Product Type Item by specified product type system id

Python
if Quote.GetProducType("Software_cpq") is not None:
Quote.GetCustomField("Custom Field 1").Content = Quote.GetProducType("Software_cpq").ProductTypeNameTranslated

Getting Product Type Item by specified product type name

Python
if Quote.GetProductTypeByName("Software") is not None:
Quote.GetCustomField("Custom Field 1").Content = Quote.GetProductTypeByName("Software").ProductTypeNameTranslated

Creating new additional discount

See IAdditionalDiscount how to create additional discount in the quote

Removing additional discount

See IAdditionalDiscount how to remove additional discount from the quote

Create new revision for the quote and set it active

See IQuoteInfo how to create new active revision.

Showing custom messages

Python
Quote.Messages.Add("message")
Public interfaceIQuoteActionId 
Public interfaceCode exampleIQuoteCustomField Quote Custom Field
Example

Setting content of Custom Field

Python
Quote.GetCustomField("Custom Field 1").Content = "new content"

Getting content of Custom Field

Python
if Quote.GetCustomField("Custom Field 1") is not None:
    cf = Quote.GetCustomField("Custom Field 1").Content

Setting visibility of Custom Field

Python
Quote.GetCustomField("Custom Field 2").Visible = False

Setting label of Custom Field.
Label will be dynamically named by a line item which is simple attribute from the configuration in the quote.

Python
if Quote.GetItemByQuoteItem(1) is not None:
    Quote.GetCustomField("Custom Field 3").Label = Quote.GetItemByQuoteItem(3).AsLineItem.AttributeName
Public interfaceCode exampleIQuoteCustomFieldAttributeValue Quote Custom Field Attribute Value
Example

Disallow Custom Field attribute value

Python
customField = Quote.GetCustomField("CD or DVD drive")
for value in customField.AttributeValues:
    if value.DisplayValue == "Combo DVD/CD-R 12/52/16/52":
        value.Allowed = False

Set Custom Field attribute value code as Custom Field content

Python
customField = Quote.GetCustomField("CD or DVD drive")
for value in customField.AttributeValues:
    if value.DisplayValue == "Combo DVD/CD-R 12/52/16/52":
        Quote.GetCustomField("Custom Field 1").Content = value.ValueCode
Public interfaceIQuoteCustomFieldAttributeValueCollection Quote custom field attribute value collection
Public interfaceCode exampleIQuoteCustomFieldCollection Quote custom field collection
Remarks
The IQuoteCustomFieldCollection class wrap the list of IQuoteCustomField and expose the methods for quote custom fields manipulations.
Example

Allowing Custom Field(s) by strong name(s)

Python
Quote.CustomFields.Allow("Custom Field Name 1")
Python
Quote.CustomFields.Allow("Custom Field Name 1", "Custom Field Name 2", "Custom Field Name 3")

Disallowing Custom Field(s) by strong name(s)

Python
Quote.CustomFields.Disallow("Custom Field Name 1")
Python
Quote.CustomFields.Disallow("Custom Field Name 1", "Custom Field Name 2", "Custom Field Name 3")

Allowing value of Custom Field by custom field's strong name and attribute value system id

Python
Quote.CustomFields.AllowValue("Custom Field Name 1", "Custom_Field_1_Value_1_cpq")

Allowing values of Custom Field by custom field's strong name and attribute value system ids

Python
Quote.CustomFields.AllowValues("Custom Field Name 1", "Custom_Field_1_Value_1_cpq", "Custom_Field_1_Value_2_cpq")

Allowing value of Custom Field by custom field's strong name and attribute value code

Python
Quote.CustomFields.AllowValueByValueCode("Custom Field Name 1", "Value 1")

Allowing values of Custom Field by custom field's strong name and attribute value codes

Python
Quote.CustomFields.AllowValuesByValueCodes("Custom Field Name 1", "Value 1", "Value 2", "Value 3")

Disallowing value of Custom Field by custom field's strong name and attribute value system id

Python
Quote.CustomFields.DisallowValue("Custom Field Name 1", "Custom_Field_1_Value_1_cpq")

Disallowing values of Custom Field by custom field's strong name and attribute value system ids

Python
Quote.CustomFields.DisallowValues("Custom Field Name 1", "Custom_Field_1_Value_1_cpq", "Custom_Field_1_Value_2_cpq")

Disallowing value of Custom Field by custom field's strong name and attribute value code

Python
Quote.CustomFields.DisallowValueByValueCode("Custom Field Name 1", "Value 1")

Disallowing values of Custom Field by custom field's strong name and attribute value codes

Python
Quote.CustomFields.DisallowValuesByValueCodes("Custom Field Name 1", "Value 1", "Value 2", "Value 3")

Assigning the specified text to Custom Field.

Python
Quote.CustomFields.AssignValue("Custom Field Name 1", "New text value")

Disallowing all Custom Field Values except values with specified attribute value system id(s)

Python
Quote.CustomFields.DisallowAllValuesExcept("Custom Field Name 1", "Custom_Field_1_Value_1_cpq")
Python
Quote.CustomFields.DisallowAllValuesExcept("Custom Field Name 1", "Custom_Field_1_Value_1_cpq", "Custom_Field_1_Value_2_cpq")

Disallowing all Custom Field Values except values with specified attribute value code(s)

Python
Quote.CustomFields.DisallowAllValuesExceptByValueCodes("Custom Field Name 1", "Value 1")
Python
Quote.CustomFields.DisallowAllValuesExceptByValueCodes("Custom Field Name 1", "Value 1", "Value 2", "Value 3")

Selecting Custom Field Value by attribute value system id.

Python
Quote.CustomFields.SelectValue("Custom Field Name 1", "Custom_Field_1_Value_1_cpq")

Selecting Custom Field Value by attribute value code.

Python
Quote.CustomFields.SelectValueByValueCode("Custom Field Name 1", "Value 1")

Reseting the custom field(s)

Python
Quote.CustomFields.Reset("Custom Field Name 1")
Python
Quote.CustomFields.Reset("Custom Field Name 1", "Custom Field Name 2", "Custom Field Name 3")

Setting the specifed Custom Field(s) optional

Python
Quote.CustomFields.SetOptional("Custom Field Name 1")
Python
Quote.CustomFields.SetOptional("Custom Field Name 1", "Custom Field Name 2", "Custom Field Name 3")

Setting the specifed Custom Field(s) required

Python
Quote.CustomFields.SetRequired("Custom Field Name 1")
Python
Quote.CustomFields.SetRequired("Custom Field Name 1", "Custom Field Name 2", "Custom Field Name 3")
Public interfaceCode exampleIQuoteHelper Helper class which allow us to globally manipulate the quotes.
Example

Reassign quote to specified user

Return parameter is of type IQuoteInfo,
containing new quote id, new user id, new composite quote number and new composite quote number crypted.
Python
quoteInfo = QuoteHelper.Reassign("00021520", "jsmith", True)

Dispose currently loaded quote environment in order to delete quote

Executing delete on currently loaded quote will cause break.
In order to delete loaded quote, it should be first disposed by using Quote.Dispose() - IQuote.
Python
quoteCompositeNumber = Quote.CompositeNumber
Quote.Dispose()

QuoteHelper.Delete(quoteCompositeNumber)
Public interfaceCode exampleIQuoteInfo Quote Info helper
Example

Create new active revision and get data for new revision

Python
revisionInfo = Quote.CreateNewRevision(True)
Public interfaceCode exampleIQuoteItem Represent abstract class which expose common interface for main and line items
Example

Getting Quote Item as main item and setting it's mrc rolled up extended cost for currently selected market as custom field content

Python
item = Quote.GetItemByUniqueIdentifier("293f526d-37ad-4c7b-af66-182a7d3f3f0d")
Quote.GetCustomField("Custom Field 1").Content = item.AsMainItem.MrcRolledUpExtendedCostInMarket

Getting Quote Item as line item and setting it's translated attribute name as custom field content

Python
item = Quote.GetItemByUniqueIdentifier("293f526d-37ad-4c7b-af66-182a7d3f3f0d")
Quote.GetCustomField("Custom Field 2").Content = item.AsLineItem.AttributeNameTranslated

Getting Key Attribute by attribute system id through Scripting

See IMainItem and ILineItem how to get key attribute by attribute system id through Scripting

Getting Key Attribute by attribute name through Scripting

See IMainItem and ILineItem how to get key attribute by attribute name through Scripting

Getting Key Attribute by attribute label through Scripting

See IMainItem and ILineItem how to get key attribute by attribute label through Scripting
Public interfaceIQuoteItemAttribute Represents attribute of the product referenced in Quote Item
Public interfaceIQuoteItemAttributeCollection Collection of all attributes selected in product referenced in Quote Item
Public interfaceIQuoteItemAttributeValue Represents selected value of the attribute of referenced product in Quote Item
Public interfaceIQuoteItemCollection Quote item collection
Public interfaceIQuoteItemContainer Represents container attribute of quote item
Public interfaceIQuoteItemContainerColumn Represents column of container attribute referenced in quote item's product
Public interfaceIQuoteItemContainerColumnCollection Collection of container columns
Public interfaceIQuoteItemContainerProperty Represent property of quote item's container attribute
Public interfaceIQuoteItemContainerPropertyCollection Represents collection of container properties of quote item's container attribute
Public interfaceIQuoteItemContainerRow Represent row of quote item's container attribute
Public interfaceIQuoteItemContainerRowCollection Represents collection of rows of quote item's container attribute
Public interfaceCode exampleIQuoteItemCustomField Quote item custom fields are basically additional quote columns that can store values of different types (number, currency, date or text).
Example

Setting value for specified quote item

Python
Quote.GetItemByUniqueIdentifier("4dbc4075-67a3-43ab-b121-9792f0abc18b")["textfield"].Value = "some text"
Quote.GetItemByUniqueIdentifier("4dbc4075-67a3-43ab-b121-9792f0abc18b")["numberfield"].Value = 123
Public interfaceCode exampleIQuoteOrderStatus Quote Order Status
Example

Getting Quote Order Status translated name in currently selected language

Python
if Quote.OrderStatus is not None:
    if Quote.OrderStatus.NameTranslated == "Waiting for Approval":
        Quote.ChangeQuoteStatus("Approved")
Public interfaceCode exampleIQuoteTotal Quote Total
Example

Setting Total Shipping Cost according to Total List Price in currently selected market

Python
if Quote.Total.TotalListPriceInMarket > 15000:
    Quote.Total.ShippingCost = Quote.Total.TotalListPrice - Quote.Total.Cost

Setting Quote Total Tax Percent

If Quote Total column is not editable on the quote, set Quote Total Tax Percent as State tax percent
Python
if ((Quote.Total.IsFieldEditable("TaxPercent") is False) and (Quote.Total.IsFieldEditable("TaxAmount") is False)):
    taxPercent = 0.0
    if Quote.ShipToCustomer is not None and len(Quote.ShipToCustomer.StateAbbreviation) > 0:
        taxPercent = SqlHelper.GetFirst("select SALES_TAX_RATE from STATE_TAX where STATE_SHORT_NAME='" + \
        Quote.ShipToCustomer.StateAbbreviation + "'")
    Quote.Total.TaxPercent = taxPercent

Setting Quote Total Amount

If Tax should be included in Total Price, set Quote Total Amount as sum of Total Shipping Cost, Total Tax Amount and Total Vat Amount
Python
result += Quote.Total.ShippingCost

if Quote.IncludeTaxInTotalPrice:
    result += Quote.Total.TaxAmount
    result += Quote.Total.VatAmount

Quote.Total.TotalAmount = result

Setting Monthly Recurring (MRC) Total Amount

Setting Monthly Recurring Amount as sum of MRC Subototal Amount, MRC Vat Amount and MRC Tax Amount
Python
Quote.Total.MrcTotalAmount = Quote.Total.MrcSubtotalAmount + Quote.Total.MrcVatAmount + Quote.Total.MrcTaxAmount
Public interfaceCode exampleIQuoteTotalCustomField Total on quote or product type level for quote item custom field.
Example

Setting value for specified quote item

Python
Quote.GetCustomField("Test").Content = str(Quote.Total["mycustomfield"].MaximumCV)

for productTypeItem in Quote.ProductTypes:
    if productTypeItem.ProductTypeName == "Hardware":
        Quote.GetCustomField("Test").Content = str(productTypeItem["mycustomfield"].MaximumCV + 3)
Public interfaceIRandom The Random object is used to generate random numbers through scripting.
Public interfaceIReadOnlyProductMessages Product configuration template messages. Messages are shown in the responder part of the configurator.
Public interfaceCode exampleIRequest Represent class for manipulation with user request.
Public interfaceIRequestContext RequestContext represents a CPQ helper class that can be used to store additional information and entities that would be shared across one HTTP request Items set in one script have the validity equal to one HTTP request
Public interfaceIRequestItems Represents the key value collection that has a life cycle of one HTTP request
Public interfaceCode exampleIRestClient Client for communication with RESTful services
Example

Call current weather data for one location

Call service with providing city name and country/region code. API responds with a list of results that match a searching word.
API call:
http://api.openweathermap.org/data/2.5/weather?q={city name},{country/region code}
Parameters:
q city name and country/region code divided by comma, use ISO 3166 country/region codes
Python
#response is in JSON form of:
#{"main":{"temp":291.05,"pressure":1016,"humidity":88,"temp_min":288.15,"temp_max":296.15},
#"weather":[{"id":701,"main":"Mist","description":"mist","icon":"50n"}],
#"id":5391959,"name":"San Francisco","cod":200,"base":"stations"}
response = RestClient.Get('http://api.openweathermap.org/data/2.5/weather?q=SanFrancisco,usa')

Quote.GetCustomField('City').Content = response.name

Quote.GetCustomField('Weather Today').Content = str(response.weather[0].main)
Quote.GetCustomField('Weather Today Details').Content = str(response.weather[0].description)

Quote.GetCustomField('Weather Temperature MIX').Content = str(response.main.temp_max)
Quote.GetCustomField('Weather Temperature MAX').Content = str(response.main.temp_min)

Submit an HTTPS POST request with authorization and JSON input data to the server

Submits JSON data to be processed to a specified resource and returns JSON response.
Response is deserialized, in order to be used as object in scripting.
Python
#example of url service
url = 'https://testcallidus.com/CallidusPortal/services/some-example-service'

#example of user autorization header
headers = { 'authorization': RestClient.GetBasicAuthenticationHeader('SAPUsername', 'SAPPassword') }

#example of input JSON data
data = '[{"name": "SaaS Net New Revenue", "periodType": "month", "type": "Measurement", "value": { "amount": 100, "unitType": "USD" }}]'

#make HTTPS POST and receive response in form of dynamic entity
response = RestClient.Post(url, data, headers)

#Populate Quote custom fields
Quote.GetCustomField('Bonus type').Content = response.name
Quote.GetCustomField('Bonus amount').Content = str(response.value.amount)
Quote.GetCustomField('Bonus unit type').Content = response.value.unitType
Public interfaceIRestServiceHelper Represent abstract class which expose common interface for supporting Litmos integration with CPQ. See 'How To Integrate With Litmos' for details of how to support integration.
Public interfaceCode exampleISalesArea Class which allow us to fetch sales area data. Class represents the combination of Sales Organization, Distribution Channel and Division
Example

Get the distribution channel

Return parameter is of type String,
Python
distributionChannel = SalesArea.DistributionChannel

Get the sales area division

Return parameter is of type String,
Python
division = SalesArea.Division

Get the sales organization

Return parameter is of type String,
Python
salesOrganization = SalesArea.SalesOrganization
Public interfaceISamlAssertionProvider SamlAssertionProvider serves us to generate saml assertion.
Public interfaceISapPassport Represent interface for creating SAP Passport headers. Visit following link for more information: https://help.sap.com/doc/f53c64b93e5140918d676b927a3cd65b/Cloud/en-US/docs-en/guides/features/tracing/android/passport.html
Public interfaceCode exampleIScriptExecutor API that gives you ability to run script from another script. Script that's executed needs to be active.
Example

To execute script from the current code, use the following call:

Python
ScriptExecutor.Execute("My_Script")

If the script you're executing returns a value, use the following code:

Python
result = ScriptExecutor.Execute("My_Script")

# **** SCRIPT WHICH RETURNS SOME VALUE MUST SET THAT VALUE TO VARIABLE NAMED 'Result' ****
# example: My_Script

# .... logic here...
x = "some return value..."
Result = x

In case the script name is not valid or script is not active, Execute() method will return 'None' value.

You can also provide input parameters that are required in called script. All input parameters should be put in dictionary:

Python
result = ScriptExecutor.Execute("My_Script", {'ID':5, 'Name': 'John', 'Company': 'ABC Inc'})

# In script "My_Script", you can use these input parameters by consuming variable 'Param' like follows:

#...logic here...
name = Param.Name
id = Param.ID
company = Param.Company

# note that Param properties must be named exactly the same as input parameters in Execute() method 

Product.Attributes.GetByName("Name").AssignValue(name)
Product.Attributes.GetByName("Id").AssignValue(id)
Product.Attributes.GetByName("Company").SelectValue(company)
#......
Example

To execute global script from the current code, use the following call:

Python
ScriptExecutor.ExecuteGlobal("My_Global_Script")

If the global script you're executing returns a value, use the following code:

Python
result = ScriptExecutor.ExecuteGlobal("My_Global_Script")

# **** GLOBAL SCRIPT WHICH RETURNS SOME VALUE MUST SET THAT VALUE TO VARIABLE NAMED 'Result' ****
# example: My_Global_Script

# .... logic here...
x = "some return value..."
Result = x

In case the global script name is not valid or global script is not active, ExecuteGlobal() method will return 'None' value.

You can also provide input parameters that are required in called global script. All input parameters should be put in dictionary:

Python
result = ScriptExecutor.ExecuteGlobal("My_Global_Script", {'ID':6, 'Name': 'Jack', 'Company': 'DEF Inc'})

# In script "My_Global_Script", you can use these input parameters by consuming variable 'Param' like follows:

#...logic here...
name = Param.Name
id = Param.ID
company = Param.Company

# note that Param properties must be named exactly the same as input parameters in ExecuteGlobal() method 

Product.Attributes.GetByName("Name").AssignValue(name)
Product.Attributes.GetByName("Id").AssignValue(id)
Product.Attributes.GetByName("Company").SelectValue(company)
#......
Public interfaceIScriptingMarket Market
Public interfaceIScriptingMarketCollection 
Public interfaceISelectedDictionary Represents the selected dictionary.
Public interfaceCode exampleISession Represents class for keeping an object within the session.
These objects can be shared among scripts.
Lifetime of these objects ends when the user signs out.
Public interfaceCode exampleIShipping Shipping
Example

Assign selected Shipping Name to custom field

Python
if Quote.SelectedShipping is not None:
    Quote.GetCustomField("Custom Field 1").Content = Quote.SelectedShipping.ShippingName

Set Total Shipping Cost

If Shipping is loaded for all items and Shipping column is not editable, set Total Shipping Cost
Python
if Quote.IsShippingLoadedForAllItems and item.IsMainItem and (Quote.SelectedShipping is not None) and \
(Quote.SelectedShipping.Editable is False):
    Quote.Total.ShippingCost += item.AsMainItem.ShippingCost * item.AsMainItem.Quantity
Public interfaceISmtpClient The SmtpClient object is used to send emails through scripting.
Public interfaceISoapHttpClientProtocol SoapHttpClientProtocol
Public interfaceCode exampleISqlHelper Helper class which allows us to pull data from database using SQL select statements.
Example

Insert/Update example

Python
#insert
tableInfo = SqlHelper.GetTable("ITEMMASTERFROMNS")
tablerow = { "item_internal_id" : itemInternalId, "item_sku" : sku }
tableInfo.AddRow(tablerow)
upsertResult = SqlHelper.Upsert(tableInfo)

#update
tablerow = { "CpqTableEntryId" : currentQuoteCpqTableEntryId, "OpportunityId" : oppId, "QuoteNumber" : Quote.CompositeNumber, "IsPrimary" : 1 }
tableInfo.AddRow(tablerow)
SqlHelper.Upsert(tableInfo)

Delete example

Python
primaryQueryItems = SqlHelper.GetList("select CpqTableEntryId, OpportunityId, QuoteNumber, ItemGuid, OpportunityProductID from OpportunityQuoteItems where OpportunityId = '{0}' and QuoteNumber={1}".format(oppId, primaryQuoteNumber))
tableInfo = SqlHelper.GetTable("OpportunityQuoteItems")
for primaryItem in primaryQueryItems:
    tableInfo.AddRow(primaryItem)
SqlHelper.Delete(tableInfo)
Public interfaceCode exampleISqlHelperInfo Sql Helper Info
Example

Provide result info for SqlHelper methods

Python
sqlInfo = SqlHelper.Upsert(tableInfoData, tableName)
Public interfaceISqlParameter Represents a parameter of a SQL statement, which is used for creation of parameterized SQL queries.
Public interfaceIStreamReader Wrapper of System.IO.StreamReader for IronPython Scripting with limited set of features
Public interfaceCode exampleITableColumnInfo TableColumnInfo
Example

Provide description of a table column including name, type, size and if it can be null

Python
Public interfaceCode exampleITableDataRow TableDataRow
Example

Data in a row that will be used to insert, update or delete a row in custom table.

Python
Public interfaceCode exampleITableInfo Table Info
Example

Table definition including name, list of columns, data rows that will be used for upsert or delete and IsNew flag to indicate if table doesn't exist and new table will be created

Python
Public interfaceCode exampleITagParserProduct Tag parser product
Example

Parsing product tab expression

Python
if float(TagParserProduct.ParseString("<* TotalPrice *>")) > 3000:
    Quote.Total.Cost = 300
Public interfaceCode exampleITagParserQuote Tag parser quote
Example

Parsing quote tab expression

Python
if TagParserQuote.ParseString("<* CustomerCompany *>") == "SAP":
    Quote.GetCustomField("Customer company") = "SAP company"
Public interfaceITechnicalDocumentation Technical Documentation Helper
Public interfaceCode exampleITerritory Territory
Example

Getting Territory name as Custom Field value through Scripting

Python
if User.Territory is not None:
    Quote.GetCustomField("Territory").Content = User.Territory.Name
Public interfaceITrace ITrace write messages to trace.
Use this class for debugging scripts.
Public interfaceCode exampleITranslation Dictionary key/value translation
Example

Set translated value from the specified dictionary to Free Form attribute

In this example it is assumed that dictionary id for German dictionary is 2. Dictionary key is - CustomDictionary.CurrentlyLoggedUser.
Python
Product.Attributes.GetByName('Translation attribute').AssignValue(Translation.Get(2, 'CustomDictionary.CurrentlyLoggedUser'))

Set formatted translated value from currently set dictionary to Free Form attribute

Dictionary key is - CustomDictionary.CurrentlyLoggedUser.
Value for dictionary key is - Currently logged user: {{user}}.
Python
Product.Attributes.GetByName('Translation attribute').AssignValue(Translation.GetFormatted('CustomDictionary.CurrentlyLoggedUser', 'user', User.Name))

Set multiple values' formatted translated value from currently set dictionary to Free Form attribute

Dictionary key is - CustomDictionary.CurrentlyLoggedUser.
Value for dictionary key is - Currently logged user: {{user}}, username {{userName}}.
Data for currently logged user (user's name and username) will be retrieved based on User.Name and User.UserName.
Python
Product.Attributes.GetByName('Translation attribute').AssignValue(Translation.GetFormatted('CustomDictionary.CurrentlyLoggedUser', 'user', User.Name, 'userName', User.UserName))
Public interfaceCode exampleIUser User
Example

Setting user's custom field content if user is Flo admin

Python
if User.IsFloAdmin:
    User.GetUserCustomFieldByName("FloAdmin").Content = "User is Flo admin"
Public interfaceCode exampleIUserCustomField User custom field
Example

Setting the content of User Custom Field

Python
if User.GetUserCustomFieldByName("User Company Name") is not None:
    User.GetUserCustomFieldByName("User Company Name").Content = "SAP company"
Public interfaceIUserCustomFieldAttributeValue User custom field attribute value
Public interfaceIUserCustomFieldAttributeValueCollection User custom field attribute values
Public interfaceIUserCustomFieldCollection User custom field collection
Public interfaceIUserPersonalizationHelper Some IronPython built-in functions used in scripts return values in a format that's different from user's selected format (for example, the function str() returns a string in the format 1234.56 which may cause issues if the user format is 1.234,56). To avoid any issues, instead of Iron Python built-in functions, use the IUserPersonalizationHelper methods which will always return values in the user's format.
Public interfaceCode exampleIUserType User type
Example

Setting user's custom field according to user type

Python
if User.UserType is not None and User.UserType.Name == "Sales Manager":
    User.GetUserCustomFieldByName("User Type").Content = "Sales Manager at SAP"
Public interfaceIVCCondition Pricing Condition result
Public interfaceIVCConditionsWithPurpose Conditions with purpose
Public interfaceIVCPricingResponse VC pricing response
Public interfaceIVCResponseItem Pricing item result
Public interfaceIVCSubtotal Subtotal
Public interfaceIWebServiceHelper Web service helper class
Public interfaceCode exampleIWorkbook Excel workbook of the file loaded in the product configurator.
Public interfaceIWorkbookCells Cells object of current excel worksheet.
Public interfaceIWorkbookSheet Excel worksheet.
Public interfaceIWorkflowContext This class is shared within pre and post actions.
Public interfaceIXmlHelper Xml helper
Enumerations
 EnumerationDescription
Public enumerationAssetStatus Asset Statuses
Public enumerationAttributeAccess Product attribute access restriction enum
Public enumerationEncodings Represents mostly used Encoding types for creating StringContent.
Public enumerationGenDocFormat Represents output document format, used in Generate Document quote action.
Public enumerationSqlDbType Specifies SQL Server-specific data type of a field, property, for use in a ISqlParameter