Differences

This shows you the differences between two versions of the page.

adminhelp:appendixa:quotegenerationtags:informationaltags [2016/06/29 04:38]
fpasovic [Cart Tags]
adminhelp:appendixa:quotegenerationtags:informationaltags [2018/08/07 09:44] (current)
mnikolic
Line 6: Line 6:
 Replaces the tag with quote level information where "..." is one of the Replaces the tag with quote level information where "..." is one of the
 following values: following values:
-  * NUMBER - quotation number, sample: <<Q_QUOTE(NUMBER)>> +  * NUMBER - quotation number, sample: %%<<Q_QUOTE(NUMBER)>>%% 
-  * TOTAL - quote total amount, sample: <<Q_QUOTE(TOTAL)>> +  * TOTAL - quote total amount, sample: %%<<Q_QUOTE(TOTAL)>>%% 
-  * TOTALNET - quote total net price, sample: <<Q_QUOTE(TOTALNET)>> +  * TOTALNET - quote total net price, sample: %%<<Q_QUOTE(TOTALNET)>>%% 
-  * BASE_TOTALNET - total net price without shipping amount, sample: <<Q_QUOTE(BASE_TOTALNET)>> +  * BASE_TOTALNET - total net price without shipping amount, sample: %%<<Q_QUOTE(BASE_TOTALNET)>>%% 
-  * BASE_TOTAL - total net price including the shipping amount, sample: <<Q_QUOTE(BASE_TOTAL)>> +  * BASE_TOTAL - total net price including the shipping amount, sample: %%<<Q_QUOTE(BASE_TOTAL)>>%% 
-  * FREIGHT_METHOD - Shipping method name, sample: <<Q_QUOTE(FREIGHT_METHOD)>> +  * FREIGHT_METHOD - Shipping method name, sample: %%<<Q_QUOTE(FREIGHT_METHOD)>>%% 
-  * FREIGHT - Shipping amount, sample: <<Q_QUOTE(FREIGHT)>> +  * FREIGHT - Shipping amount, sample: %%<<Q_QUOTE(FREIGHT)>>%% 
-  * DATE_CREATED - Date quote was created, sample: <<Q_QUOTE(DATE_CREATED)>> +  * DATE_CREATED - Date quote was created, sample: %%<<Q_QUOTE(DATE_CREATED)>>%% 
-  * DATE_MODIFIED - Date quote was last modified, sample: <<Q_QUOTE(DATE_MODIFIED)>> +  * DATE_MODIFIED - Date quote was last modified, sample: %%<<Q_QUOTE(DATE_MODIFIED)>>%% 
-  * COMMENT - quote comment, sample: <<Q_QUOTE(COMMENT)>> +  * COMMENT - quote comment, sample: %%<<Q_QUOTE(COMMENT)>>%% 
-  * CURRENCY - currency name, sample: <<Q_QUOTE(CURRENCY)>> +  * CURRENCY - currency name, sample: %%<<Q_QUOTE(CURRENCY)>>%% 
-  * CURRENCY_SIGN - currency sign, sample: <<Q_QUOTE(CURRENCY_SIGN)>> +  * CURRENCY_SIGN - currency sign, sample: %%<<Q_QUOTE(CURRENCY_SIGN)>>%% 
-  * REVISION - quote revision number, sample: <<Q_QUOTE(REVISION)>> +  * REVISION - quote revision number, sample: %%<<Q_QUOTE(REVISION)>>%% 
-  * VALID_UNTIL - Current date plus 30 days, sample: <<Q_QUOTE(VALID_UNTIL)>> (If other than 30 days, number of days can be specified as follows %%<<Q_QUOTE(VALID_UNTIL+45)>>%%. This will add 45 days to current date). +  * VALID_UNTIL - Current date plus 30 days, sample: %%<<Q_QUOTE(VALID_UNTIL)>>%% (If other than 30 days, number of days can be specified as follows %%<<Q_QUOTE(VALID_UNTIL+45)>>%%. This will add 45 days to current date). 
-  * USER_ID - current user id, sample: <<Q_QUOTE(USER_ID)>> +  * USER_ID - current user id, sample: %%<<Q_QUOTE(USER_ID)>>%% 
-  * OWNER_ID - quote owner's id, sample: <<Q_QUOTE(OWNER_ID)>> +  * OWNER_ID - quote owner's id, sample: %%<<Q_QUOTE(OWNER_ID)>>%% 
-  * CART_ID - current cart(quote) id, sample: <<Q_QUOTE(CART_ID)>> +  * CART_ID - current cart(quote) id, sample: %%<<Q_QUOTE(CART_ID)>>%% 
-  * STATUS - Current quote status name, sample: <<Q_QUOTE(STATUS)>>+  * STATUS - Current quote status name, sample: %%<<Q_QUOTE(STATUS)>>%%
  
  
Line 30: Line 30:
 Replaces the tag with billing, shipping and end user information where Replaces the tag with billing, shipping and end user information where
 "..." is one of the following: "..." is one of the following:
-  * COMPANY, sample: <<Q_BILLTO(COMPANY)>> | <<Q_SHIPTO(COMPANY)>> | <<Q_ENDUSER(COMPANY)>> +  * COMPANY, sample: %%<<Q_BILLTO(COMPANY)>> | <<Q_SHIPTO(COMPANY)>> | <<Q_ENDUSER(COMPANY)>>%% 
-  * FIRSTNAME, sample: <<Q_BILLTO(FIRSTNAME)>> | <<Q_SHIPTO(FIRSTNAME)>> | <<Q_ENDUSER(FIRSTNAME)>> +  * FIRSTNAME, sample: %%<<Q_BILLTO(FIRSTNAME)>> | <<Q_SHIPTO(FIRSTNAME)>> | <<Q_ENDUSER(FIRSTNAME)>>%% 
-  * LASTNAME, sample: <<Q_BILLTO(LASTNAME)>> | <<Q_SHIPTO(LASTNAME)>> | <<Q_ENDUSER(LASTNAME)>> +  * LASTNAME, sample: %%<<Q_BILLTO(LASTNAME)>> | <<Q_SHIPTO(LASTNAME)>> | <<Q_ENDUSER(LASTNAME)>>%% 
-  * EMAIL, sample: <<Q_BILLTO(EMAIL)>> | <<Q_SHIPTO(EMAIL)>> | <<Q_ENDUSER(EMAIL)>> +  * EMAIL, sample: %%<<Q_BILLTO(EMAIL)>> | <<Q_SHIPTO(EMAIL)>> | <<Q_ENDUSER(EMAIL)>>%% 
-  * ADDRESS1, sample: <<Q_BILLTO(ADDRESS1)>> | <<Q_SHIPTO(ADDRESS1)>> | <<Q_ENDUSER(ADDRESS1)>> +  * ADDRESS1, sample: %%<<Q_BILLTO(ADDRESS1)>> | <<Q_SHIPTO(ADDRESS1)>> | <<Q_ENDUSER(ADDRESS1)>>%% 
-  * ADDRESS2, sample: <<Q_BILLTO(ADDRESS2)>> | <<Q_SHIPTO(ADDRESS2)>> | <<Q_ENDUSER(ADDRESS2)>> +  * ADDRESS2, sample: %%<<Q_BILLTO(ADDRESS2)>> | <<Q_SHIPTO(ADDRESS2)>> | <<Q_ENDUSER(ADDRESS2)>>%% 
-  * CITY, sample: <<Q_BILLTO(CITY)>> | <<Q_SHIPTO(CITY)>> | <<Q_ENDUSER(CITY)>> +  * CITY, sample: %%<<Q_BILLTO(CITY)>> | <<Q_SHIPTO(CITY)>> | <<Q_ENDUSER(CITY)>>%% 
-  * STATE, sample: <<Q_BILLTO(STATE)>> | <<Q_SHIPTO(STATE)>> | <<Q_ENDUSER(STATE)>> +  * STATE, sample: %%<<Q_BILLTO(STATE)>> | <<Q_SHIPTO(STATE)>> | <<Q_ENDUSER(STATE)>>%% 
-  * PROVINCE, sample: <<Q_BILLTO(PROVINCE)>> | <<Q_SHIPTO(PROVINCE)>> | <<Q_ENDUSER(PROVINCE)>> +  * PROVINCE, sample: %%<<Q_BILLTO(PROVINCE)>> | <<Q_SHIPTO(PROVINCE)>> | <<Q_ENDUSER(PROVINCE)>>%% 
-  * ZIPCODE, sample: <<Q_BILLTO(ZIPCODE)>> | <<Q_SHIPTO(ZIPCODE)>> | <<Q_ENDUSER(ZIPCODE)>> +  * ZIPCODE, sample: %%<<Q_BILLTO(ZIPCODE)>> | <<Q_SHIPTO(ZIPCODE)>> | <<Q_ENDUSER(ZIPCODE)>>%% 
-  * COUNTRY, sample: <<Q_BILLTO(COUNTRY)>> | <<Q_SHIPTO(COUNTRY)>> | <<Q_ENDUSER(COUNTRY)>> +  * COUNTRY, sample: %%<<Q_BILLTO(COUNTRY)>> | <<Q_SHIPTO(COUNTRY)>> | <<Q_ENDUSER(COUNTRY)>>%% 
-  * PHONE, sample: <<Q_BILLTO(PHONE)>> | <<Q_SHIPTO(PHONE)>> | <<Q_ENDUSER(PHONE)>> +  * PHONE, sample: %%<<Q_BILLTO(PHONE)>> | <<Q_SHIPTO(PHONE)>> | <<Q_ENDUSER(PHONE)>>%% 
-  * FAX, sample: <<Q_BILLTO(FAX)>> | <<Q_SHIPTO(FAX)>> | <<Q_ENDUSER(FAX)>> +  * FAX, sample: %%<<Q_BILLTO(FAX)>> | <<Q_SHIPTO(FAX)>> | <<Q_ENDUSER(FAX)>>%% 
-  * CUSTOMERNUMBER - Only available for BILLTO and ENDUSER. Not available for SHIPTO, sample: <<Q_BILLTO(CUSTOMERNUMBER)>> | <<Q_ENDUSER(CUSTOMERNUMBER)>>+  * CUSTOMERNUMBER - Only available for BILLTO and ENDUSER. Not available for SHIPTO, sample: %%<<Q_BILLTO(CUSTOMERNUMBER)>> | <<Q_ENDUSER(CUSTOMERNUMBER)>>%%
  
  
Line 50: Line 50:
 Replaces the tag with current user and owner information where "..." is Replaces the tag with current user and owner information where "..." is
 one of the following: one of the following:
-  * COMPANY, sample: <<Q_USER(COMPANY)>> | <<Q_OWNER(COMPANY)>> +  * COMPANY, sample: %%<<Q_USER(COMPANY)>> | <<Q_OWNER(COMPANY)>>%% 
-  * USERNAME, sample: <<Q_USER(USERNAME)>> | <<Q_OWNER(USERNAME)>> +  * USERNAME, sample: %%<<Q_USER(USERNAME)>> | <<Q_OWNER(USERNAME)>>%% 
-  * NAME, sample: <<Q_USER(NAME)>> | <<Q_OWNER(NAME)>> +  * NAME, sample: %%<<Q_USER(NAME)>> | <<Q_OWNER(NAME)>>%% 
-  * TYPE, sample: <<Q_USER(TYPE)>> | <<Q_OWNER(TYPE)>> +  * TYPE, sample: %%<<Q_USER(TYPE)>> | <<Q_OWNER(TYPE)>>%% 
-  * EMAIL, sample: <<Q_USER(EMAIL)>> | <<Q_OWNER(EMAIL)>> +  * EMAIL, sample: %%<<Q_USER(EMAIL)>> | <<Q_OWNER(EMAIL)>>%% 
-  * ADDRESS1, sample: <<Q_USER(ADDRESS1)>> | <<Q_OWNER(ADDRESS1)>> +  * ADDRESS1, sample: %%<<Q_USER(ADDRESS1)>> | <<Q_OWNER(ADDRESS1)>>%% 
-  * ADDRESS2, sample: <<Q_USER(ADDRESS2)>> | <<Q_OWNER(ADDRESS2)>> +  * ADDRESS2, sample: %%<<Q_USER(ADDRESS2)>> | <<Q_OWNER(ADDRESS2)>>%% 
-  * CITY, sample: <<Q_USER(CITY)>> | <<Q_OWNER(CITY)>> +  * CITY, sample: %%<<Q_USER(CITY)>> | <<Q_OWNER(CITY)>>%% 
-  * STATE, sample: <<Q_USER(STATE)>> | <<Q_OWNER(STATE)>> +  * STATE, sample: %%<<Q_USER(STATE)>> | <<Q_OWNER(STATE)>>%% 
-  * ZIPCODE, sample: <<Q_USER(ZIPCODE)>> | <<Q_OWNER(ZIPCODE)>> +  * ZIPCODE, sample: %%<<Q_USER(ZIPCODE)>> | <<Q_OWNER(ZIPCODE)>>%% 
-  * COUNTRY, sample: <<Q_USER(COUNTRY)>> | <<Q_OWNER(COUNTRY)>> +  * COUNTRY, sample: %%<<Q_USER(COUNTRY)>> | <<Q_OWNER(COUNTRY)>>%% 
-  * PHONE, sample: <<Q_USER(PHONE)>> | <<Q_OWNER(PHONE)>> +  * PHONE, sample: %%<<Q_USER(PHONE)>> | <<Q_OWNER(PHONE)>>%% 
-  * FAX, sample: <<Q_USER(FAX)>> | <<Q_OWNER(FAX)>>+  * FAX, sample: %%<<Q_USER(FAX)>> | <<Q_OWNER(FAX)>>%%
  
 \\ **%%<<Q_COMP(...)>>%%**\\  \\ **%%<<Q_COMP(...)>>%%**\\ 
Line 68: Line 68:
 Replaces the tag with current user's company information where "..." is Replaces the tag with current user's company information where "..." is
 one of the following: one of the following:
-  * NAME, sample: <<Q_COMP(NAME)>> +  * NAME, sample: %%<<Q_COMP(NAME)>>%% 
-  * EMAIL, sample: <<Q_COMP(EMAIL)>> +  * EMAIL, sample: %%<<Q_COMP(EMAIL)>>%% 
-  * ADDRESS1, sample: <<Q_COMP(ADDRESS1)>> +  * ADDRESS1, sample: %%<<Q_COMP(ADDRESS1)>>%% 
-  * ADDRESS2, sample: <<Q_COMP(ADDRESS2)>> +  * ADDRESS2, sample: %%<<Q_COMP(ADDRESS2)>>%% 
-  * CITY, sample: <<Q_COMP(CITY)>> +  * CITY, sample: %%<<Q_COMP(CITY)>>%% 
-  * STATE, sample: <<Q_COMP(STATE)>> +  * STATE, sample: %%<<Q_COMP(STATE)>>%% 
-  * ZIPCODE, sample: <<Q_COMP(ZIPCODE)>> +  * ZIPCODE, sample: %%<<Q_COMP(ZIPCODE)>>%% 
-  * COUNTRY, sample: <<Q_COMP(COUNTRY)>> +  * COUNTRY, sample: %%<<Q_COMP(COUNTRY)>>%% 
-  * PHONE, sample: <<Q_COMP(PHONE)>> +  * PHONE, sample: %%<<Q_COMP(PHONE)>>%% 
-  * FAX, sample: <<Q_COMP(FAX)>>+  * FAX, sample: %%<<Q_COMP(FAX)>>%%
  
 \\ **%%<<Q_QP(...)>>%% | %%<<Q_CUSTOM_FIELD(...)>>%%**\\  \\ **%%<<Q_QP(...)>>%% | %%<<Q_CUSTOM_FIELD(...)>>%%**\\ 
Line 149: Line 149:
 \\ \\
 Example and explanation how to use this tag follows: Example and explanation how to use this tag follows:
-<<Q_TAG_FILE(<*CTX( Quote.CustomField(CUSTOMER_COMPANY))*>.jpg)>>+%%<<Q_TAG_FILE(<*CTX( Quote.CustomField(CUSTOMER_COMPANY))*>.jpg)>>%%
 \\ \\
 This tag will include jpg image with the name of company that is stored in custom field named //CUSTOMER_COMPANY// This tag will include jpg image with the name of company that is stored in custom field named //CUSTOMER_COMPANY//
Line 232: Line 232:
 === <<C2_PTYPE_ALL_SortByRank()>> tag === === <<C2_PTYPE_ALL_SortByRank()>> tag ===
  
-This tag enables you to sort product by product type rank order. If you have two product types of Drive ranked 10 and Hardware ranked 5, the <<C2_PTYPE_ALL_SortByRank(...)>> tag will sort all your product types by Hardware and then by Drive as a result of the ranking set on each of the product type. +This tag enables you to sort product by product type rank order. If you have two product types of Drive ranked 10 and Hardware ranked 5, the %%<<C2_PTYPE_ALL_SortByRank(...)>>%% tag will sort all your product types by Hardware and then by Drive as a result of the ranking set on each of the product type. 
  
 === <<C2_PTYPE_ALL_SortByRankButStartWith(First,Second,Third...)>> tag === === <<C2_PTYPE_ALL_SortByRankButStartWith(First,Second,Third...)>> tag ===
-This tag enables you to sort product type rank order, but you can state which rank order to start with product types. If you have four product types, such as Drive ranked 5, Hardware ranked 2, Services ranked 3, and Computers ranked 1, tag <<C2_PTYPE_ALL_SortByRankButStartWith(Drive,Hardware, Services)>>  will sort all your products by Drive, Hardware and Services first. In this case the sorting will start with "Computers," followed by the remaining product types in order by rank. The new sort type enables you lots of flexibility when ordering your product types. +This tag enables you to sort product type rank order, but you can state which rank order to start with product types. If you have four product types, such as Drive ranked 5, Hardware ranked 2, Services ranked 3, and Computers ranked 1, tag %%<<C2_PTYPE_ALL_SortByRankButStartWith(Drive,Hardware, Services)>>%%  will sort all your products by Drive, Hardware and Services first. In this case the sorting will start with "Computers," followed by the remaining product types in order by rank. The new sort type enables you lots of flexibility when ordering your product types. 
  
 === <<C2_PTYPE_ALL_SortByName()>> tag === === <<C2_PTYPE_ALL_SortByName()>> tag ===
-This tag enables you to sort product type by the product name. If you have two product types, Drive and Hardware, ranked 10 and 5 respectively, <<C2_PTYPE_ALL_SortByName()>> tag will sort all your product types by Drive and then by Hardware due to their alphabetical order. +This tag enables you to sort product type by the product name. If you have two product types, Drive and Hardware, ranked 10 and 5 respectively, %%<<C2_PTYPE_ALL_SortByName()>>%% tag will sort all your product types by Drive and then by Hardware due to their alphabetical order. 
  
 === <<C2_PTYPE_ALL_SortByNameButStartWith("H","S")>> tag === === <<C2_PTYPE_ALL_SortByNameButStartWith("H","S")>> tag ===
Line 340: Line 340:
  
 === <<C_INSERT_FILE_FROM_ATTRIBUTE>> === === <<C_INSERT_FILE_FROM_ATTRIBUTE>> ===
-Inserts a file from a file attachment attribute. It also takes attributeName as input (e.g, <<C_INSERT_FILE_FROM_ATTRIBUTE(attributeName)>>)+Inserts a file from a file attachment attribute. It also takes attributeName as input (e.g, %%<<C_INSERT_FILE_FROM_ATTRIBUTE(attributeName)>>%%)
  
 === <<C_PRICE>> === === <<C_PRICE>> ===
Line 441: Line 441:
  
 === New Cart Items Tag Structure === === New Cart Items Tag Structure ===
-<<QUOTE_ITEMS:CONDITION()>>+%%<<QUOTE_ITEMS:CONDITION()>>%%
   * Condition is not required.    * Condition is not required. 
   * Condition may contain things such as – Is certain product type present in the quote, or Is particular product found in the quote   * Condition may contain things such as – Is certain product type present in the quote, or Is particular product found in the quote
  
-<<HEADER>> +%%<<HEADER>>%% 
-<<HEADER_END>>+%%<<HEADER_END>>%%
   * Admin would specify header for all items   * Admin would specify header for all items
   * Header and footer are only displayed if condition for C2 section is ok   * Header and footer are only displayed if condition for C2 section is ok
  
-<<MAIN:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>> +%%<<MAIN:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>>%%
   * Admin would specify condition for displaying main item. Condition would be able to interpret CurrentItem CTX tag   * Admin would specify condition for displaying main item. Condition would be able to interpret CurrentItem CTX tag
   * Condition is not required   * Condition is not required
   ** Example for condition is : [EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor)   ** Example for condition is : [EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor)
   * This condition would take all main items where product type name is ‘EP Comprossor’   * This condition would take all main items where product type name is ‘EP Comprossor’
-  * Every time tag <<MAIN:CONDITION…>> tag is found, CPQ document engine would go through all main items in the quote and first select those that should be displayed, sort them and then go into each one of them and process them further+  * Every time tag %%<<MAIN:CONDITION…>>%% tag is found, CPQ document engine would go through all main items in the quote and first select those that should be displayed, sort them and then go into each one of them and process them further
   * SORT_BY_PRODUCT_TYPE is not be required   * SORT_BY_PRODUCT_TYPE is not be required
   ** Example for this is SORT_BY_PRODUCT_TYPE(Hardware,Software,Services) – CPQ would first display main items who meet specified condition where product type is Hardware, then main items where product type is Software, then main items where product type is Services and then other main items where product type doesn’t belong to any of the listed product types in sort section. If product type that doesn’t exist is listed, CPQ would ignore this.   ** Example for this is SORT_BY_PRODUCT_TYPE(Hardware,Software,Services) – CPQ would first display main items who meet specified condition where product type is Hardware, then main items where product type is Software, then main items where product type is Services and then other main items where product type doesn’t belong to any of the listed product types in sort section. If product type that doesn’t exist is listed, CPQ would ignore this.
-  * There may be several <<MAIN:CONDITION…>> tags within same <<QUOTE_ITEMS:CONDITION(…)>> tag. CPQ would go through each one of them and parse specified condition. Same main item would not be displayed twice in same C2 tag even though it may be found based on specified conditions.+  * There may be several %%<<MAIN:CONDITION…>>%% tags within same %%<<QUOTE_ITEMS:CONDITION(…)>>%% tag. CPQ would go through each one of them and parse specified condition. Same main item would not be displayed twice in same C2 tag even though it may be found based on specified conditions.
  
-<<MAIN:CONDITION(CPQ formula), SortBy(MyQuoteCustomField)>>  This tag enables you to set a sort order based on a formula and any custom field inside your main condition table. You can choose if items will be sorted by specified fields (eg. Rank,ProductTypeName,...) or a CPQ formula (eg. <*CTX(Quote.CurrentItem.ProductName)*> or <*CTX(Quote.CurrentItem.PartNumber)*>)+%%<<MAIN:CONDITION(CPQ formula), SortBy(MyQuoteCustomField)>>%% This tag enables you to set a sort order based on a formula and any custom field inside your main condition table. You can choose if items will be sorted by specified fields (eg. Rank,ProductTypeName,...) or a CPQ formula (eg. <*CTX(Quote.CurrentItem.ProductName)*> or <*CTX(Quote.CurrentItem.PartNumber)*>)
  
-If you have conditions such as If Discount = Yes for dDR then sort all my products by Partnumber, you can use <<MAIN:CONDITION({{Discount}}:<<Q_QP(Show Overall Discount),YES=dDR>>), SortBy(<*CTX(Quote.CurrentItem.PartNumber)*>)>>+If you have conditions such as If Discount = Yes for dDR then sort all my products by Partnumber, you can use %%<<MAIN:CONDITION({{Discount}}:<<Q_QP(Show Overall Discount),YES=dDR>>), SortBy(<*CTX(Quote.CurrentItem.PartNumber)*>)>>%%
  
  
-<<MAIN_HEADER>> +%%<<MAIN_HEADER>>%% 
-<<MAIN_HEADER_END>>  +%%<<MAIN_HEADER_END>>%% 
-<<MAIN_FOOTER>> +%%<<MAIN_FOOTER>>%% 
-<<MAIN_FOOTER_END>>  +%%<<MAIN_FOOTER_END>>%%  
-  * For each <<MAIN:CONDITION(..)>> tag, CPQ would display specified header and footer.+  * For each %%<<MAIN:CONDITION(..)>>%% tag, CPQ would display specified header and footer.
   * If there are several main items that have been found, CPQ would display header and footer only once. Example when based on condition, items MainItem1, MainItem3 and MainItem5 should be displayed:   * If there are several main items that have been found, CPQ would display header and footer only once. Example when based on condition, items MainItem1, MainItem3 and MainItem5 should be displayed:
   ** Header   ** Header
Line 478: Line 478:
   * If no main items have been found based on condition, header and footer wouldn’t be displayed   * If no main items have been found based on condition, header and footer wouldn’t be displayed
   
-<<MAIN_END>>+%%<<MAIN_END>>%%
   * Marks end of main item section   * Marks end of main item section
  
-<<LI:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>>  +%%<<LI:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>>%%  
   * CPQ will process all line items for the main item that was processed before the line item   * CPQ will process all line items for the main item that was processed before the line item
   * Condition is not required   * Condition is not required
Line 489: Line 489:
   ** Example for this is SORT_BY_PRODUCT_TYPE(Hardware,Software,Services) – CPQ would first display line items who meet specified condition where product type is Hardware, then line items where product type is Software, then line items where product type is Services and then other lineitems where product type doesn’t belong to any of the listed product types in sort section. If product type that doesn’t exist is listed, CPQ would ignore this   ** Example for this is SORT_BY_PRODUCT_TYPE(Hardware,Software,Services) – CPQ would first display line items who meet specified condition where product type is Hardware, then line items where product type is Software, then line items where product type is Services and then other lineitems where product type doesn’t belong to any of the listed product types in sort section. If product type that doesn’t exist is listed, CPQ would ignore this
  
-<<LI_HEADER>> +%%<<LI_HEADER>>%% 
-<<LI_HEADER_END>>  +%%<<LI_HEADER_END>>%%  
-<<LI_FOOTER>> +%%<<LI_FOOTER>>%% 
-<<LI_FOOTER_END>>  +%%<<LI_FOOTER_END>>%%  
-  * For each <<LI:CONDITION(..)>> tag, CPQ would display specified header and footer.+  * For each %%<<LI:CONDITION(..)>>%% tag, CPQ would display specified header and footer.
   * If there are several line items that have been found, CPQ would display header and footer only once. Example when based on condition, items LineItem1, LineItem3 and LineItem5 should be displayed:   * If there are several line items that have been found, CPQ would display header and footer only once. Example when based on condition, items LineItem1, LineItem3 and LineItem5 should be displayed:
   ** Header   ** Header
Line 502: Line 502:
   * If no line items have been found based on condition, header and footer wouldn’t be displayed   * If no line items have been found based on condition, header and footer wouldn’t be displayed
  
- <<LI_END>>+%%<<LI_END>>%%
   * This tag marks the end of line item section   * This tag marks the end of line item section
  
-<<FOOTER>> +%%<<FOOTER>>%% 
-<<FOOTER_END>>+%%<<FOOTER_END>>%%
   * This is the footer section for QUOTE_ITEMS table. It is displayed only if condition for QUOTE_ITEMS section is ok   * This is the footer section for QUOTE_ITEMS table. It is displayed only if condition for QUOTE_ITEMS section is ok
  
-<<QUOTE_ITEMS_END>>+%%<<QUOTE_ITEMS_END>>%%
   * This is the end of QUOTE_ITEMS   * This is the end of QUOTE_ITEMS
  
 == Example == == Example ==
-<<QUOTE_ITEMS>>\\ +%%<<QUOTE_ITEMS>>%%\\ 
-<<HEADER>>\\ +%%<<HEADER>>%%\\ 
-<<HEADER_END>>\\+%%<<HEADER_END>>%%\\
  
-<<MAIN: CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>> \\ +%%<<MAIN: CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%% \\ 
-<<MAIN_HEADER>>\\ +%%<<MAIN_HEADER>>%%\\ 
-<<MAIN_HEADER_END>> \\ +%%<<MAIN_HEADER_END>>%%\\ 
-<<MAIN_CONTENT>>\\ +%%<<MAIN_CONTENT>>%%\\ 
-<<MAIN_CONTENT_END>>\\ +%%<<MAIN_CONTENT_END>>%%\\ 
-<<MAIN_FOOTER>>\\ +%%<<MAIN_FOOTER>>%%\\ 
-<<MAIN_FOOTER_END>> \\ +%%<<MAIN_FOOTER_END>>%%\\ 
-<<MAIN_END>>\\ +%%<<MAIN_END>>%%\\ 
-<<LI>>  \\ +%%<<LI>>%%\\ 
-<<LI_HEADER>>\\ +%%<<LI_HEADER>>%%\\ 
-<<LI_HEADER_END>> \\ +%%<<LI_HEADER_END>>%%\\ 
-<<LI_CONTENT>>\\ +%%<<LI_CONTENT>>%%\\ 
-<<LI_CONTENT_END>>\\ +%%<<LI_CONTENT_END>>%%\\ 
-<<LI_FOOTER>>\\ +%%<<LI_FOOTER>>%%\\ 
-<<LI_FOOTER_END>> \\ +%%<<LI_FOOTER_END>>%%\\ 
-<<LI_END>>\\+%%<<LI_END>>%%\\
  
-<<FOOTER>>\\ +%%<<FOOTER>>%%\\ 
-<<FOOTER_END>>\\ +%%<<FOOTER_END>>%%\\ 
-<<QUOTE_ITEMS _END>>\\+%%<<QUOTE_ITEMS _END>>%%\\
  
 ===Quote Products Tag Structure=== ===Quote Products Tag Structure===
 \\  \\ 
-<<QUOTE_PRODUCTS>>\\ +%%<<QUOTE_PRODUCTS>>%%\\ 
-<<NESTED_PRODUCTS>>\\ +%%<<NESTED_PRODUCTS>>%%\\ 
-<<MAIN_1>>\\+%%<<MAIN_1>>%%\\
 **FIRST LEVEL (PARENT):**\\ **FIRST LEVEL (PARENT):**\\
-<<CONTENT>>\\ +%%<<CONTENT>>%%\\ 
-<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>\\ +%%<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>%%\\ 
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_2>>\\+%%<<MAIN_2>>%%\\
 **SECOND LEVEL (CHILD):**\\ **SECOND LEVEL (CHILD):**\\
-<<CONTENT>>\\ +%%<<CONTENT>>%%\\ 
-<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>\\ +%%<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>%%\\ 
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\ +%%<<MAIN_END_2>>%%\\ 
-<<MAIN_END_1>>\\ +%%<<MAIN_END_1>>%%\\ 
-<<NESTED_PRODUCTS_END>>\\ +%%<<NESTED_PRODUCTS_END>>%%\\ 
-<<QUOTE_PRODUCTS_END>>\\+%%<<QUOTE_PRODUCTS_END>>%%\\
  
 **Parent/child nested tag structure** **Parent/child nested tag structure**
Line 561: Line 561:
 The parent/child design includes Main tag nesting (one Main tag inside another). This way, information from a child Main tag could be printed inside a parent Main tag, or even printed multiple times if it is defined multiple times with different item data pulled, etc. The first Main item in the tag structure could be any root item from the quote, which satisfies the condition. All Main tags inside that tag would act as child items. Furthermore, there could be a child Main tag inside of a child Main tag, etc. All Main tags will be marked according to their respective level. Root Main item will be level 1, all child Main items will be of a level 2, etc. For example: The parent/child design includes Main tag nesting (one Main tag inside another). This way, information from a child Main tag could be printed inside a parent Main tag, or even printed multiple times if it is defined multiple times with different item data pulled, etc. The first Main item in the tag structure could be any root item from the quote, which satisfies the condition. All Main tags inside that tag would act as child items. Furthermore, there could be a child Main tag inside of a child Main tag, etc. All Main tags will be marked according to their respective level. Root Main item will be level 1, all child Main items will be of a level 2, etc. For example:
  
-<<QUOTE_PRODUCTS>>\\ +%%<<QUOTE_PRODUCTS>>%%\\ 
-<<NESTED_PRODUCTS>>\\+%%<<NESTED_PRODUCTS>>%%\\
  
-<<MAIN_1:CONDITION(Hardware)>>\\ +%%<<MAIN_1:CONDITION(Hardware)>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some Parent Item Information...\\  ...Some Parent Item Information...\\ 
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_2:CONDITION(Software)>>\\ +%%<<MAIN_2:CONDITION(Software)>>%%\\ 
-<< CONTENT>>\\+%%<< CONTENT>>%%\\
 ...Child Item 1 Information...\\ ...Child Item 1 Information...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\ +%%<<MAIN_END_2>>%%\\ 
-<<LI:CONDITION(Memory)>>\\ +%%<<LI:CONDITION(Memory)>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Parent Line Item Information...\\ ...Parent Line Item Information...\\
-<< CONTENT_END>>\\ +%%<< CONTENT_END>>%%\\ 
-<< LI _END>>\\ +%%<< LI _END>>%%\\ 
-<<MAIN_END_1>>\\+%%<<MAIN_END_1>>%%\\
  
-<<NESTED_PRODUCTS_END>>\\ +%%<<NESTED_PRODUCTS_END>>%%\\ 
-<<QUOTE_PRODUCTS_END>>\\+%%<<QUOTE_PRODUCTS_END>>%%\\
  
 Using the example above, there is a possibility to nest child MAIN tags inside a parent MAIN tag. Parent Main tag range is marked with MAIN_1 and MAIN_END_1, and a child Main tag is marked with MAIN_2 and MAIN_END_2 inside a parent tag. The system would print some parent item information which is of type Hardware, after that some child item information would be printed (for all child items of type Software), and then again parent item information would be printed, followed by parent line item information of type Memory. This way, information from the child item could be printed multiple times in the parent item. Also, child tag could have another child MAIN tag inside, to describe real CPQ product nesting. Using the example above, there is a possibility to nest child MAIN tags inside a parent MAIN tag. Parent Main tag range is marked with MAIN_1 and MAIN_END_1, and a child Main tag is marked with MAIN_2 and MAIN_END_2 inside a parent tag. The system would print some parent item information which is of type Hardware, after that some child item information would be printed (for all child items of type Software), and then again parent item information would be printed, followed by parent line item information of type Memory. This way, information from the child item could be printed multiple times in the parent item. Also, child tag could have another child MAIN tag inside, to describe real CPQ product nesting.
Line 587: Line 587:
 Old parent child tag structure was limited to HEADER, CONTENT, and FOOTER in exactly that order. Only one tag of each three could be defined in the MAIN or LI tags. Now, with this parent/child tag improvement, there could be a multiple CONTENT tags defined, and with that change, HEADER and FOOTER tags are redundant. Here is an MAIN root tag example: Old parent child tag structure was limited to HEADER, CONTENT, and FOOTER in exactly that order. Only one tag of each three could be defined in the MAIN or LI tags. Now, with this parent/child tag improvement, there could be a multiple CONTENT tags defined, and with that change, HEADER and FOOTER tags are redundant. Here is an MAIN root tag example:
  
-<<MAIN_1>>\\+%%<<MAIN_1>>%%\\
  
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some Parent Item Information...\\ ...Some Parent Item Information...\\
- <<CONTENT_END>>\\+%%<<CONTENT_END>>%%\\
  
-<<MAIN_2>>\\ +%%<<MAIN_2>>%%\\ 
-<< CONTENT>>\\+%%<< CONTENT>>%%\\
 ...Child Item 1 Information...\\ ...Child Item 1 Information...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\+%%<<MAIN_END_2>>%%\\
  
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...More Parent Item Information...\\ ...More Parent Item Information...\\
- <<CONTENT_END>>\\+%%<<CONTENT_END>>%%\\
  
-<<LI>>\\  +%%<<LI>>%%\\  
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Parent Line Item Information...\\ ...Parent Line Item Information...\\
-<< CONTENT_END>>\\ +%%<< CONTENT_END>>%%\\ 
-<< LI _END>>\\+%%<< LI _END>>%%\\
  
-<<MAIN_END_1>>\\+%%<<MAIN_END_1>>%%\\
  
 In the example illustrated above, there are two different CONTENT tags which pull information from the root item, and between them there is information from the child main item. Following that, information from a root line item will be printed. Also, HEADER and FOOTER tags are redundant in this case, since CONTENT could replace both of them. In the example illustrated above, there are two different CONTENT tags which pull information from the root item, and between them there is information from the child main item. Following that, information from a root line item will be printed. Also, HEADER and FOOTER tags are redundant in this case, since CONTENT could replace both of them.
Line 617: Line 617:
 If we have an EP String root item information that we want to print, and we want to print some EP Compressor and EP Steam Turbine child information inside the parent, printed on different places (multiple times inside a parent) this is how it should be possible to do that (LINE item tags are left out in an example because it is easier to focus on main item nesting): If we have an EP String root item information that we want to print, and we want to print some EP Compressor and EP Steam Turbine child information inside the parent, printed on different places (multiple times inside a parent) this is how it should be possible to do that (LINE item tags are left out in an example because it is easier to focus on main item nesting):
  
-<<QUOTE_PRODUCTS>>\\ +%%<<QUOTE_PRODUCTS>>%%\\ 
-<<NESTED_PRODUCTS>>\\+%%<<NESTED_PRODUCTS>>%%\\
  
-<<MAIN_1:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP String))>>\\+%%<<MAIN_1:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP String))>>%%\\
  
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some String Information...\\ ...Some String Information...\\
-<<CONTENT_END>>\\+%%<<CONTENT_END>>%%\\
  
-<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>\\ +%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some Compressor Information (repeat for as many compressors)...\\ ...Some Compressor Information (repeat for as many compressors)...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\+%%<<MAIN_END_2>>%%\\
  
-<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>\\ +%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some Steam Turbine Information (repeat for as many steam turbines)...\\ ...Some Steam Turbine Information (repeat for as many steam turbines)...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\+%%<<MAIN_END_2>>%%\\
    
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...More String Information...\\ ...More String Information...\\
-<<CONTENT_END>>\\+%%<<CONTENT_END>>%%\\
  
-<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>\\ +%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...More Compressor Information (repeat for as many compressors)...\\ ...More Compressor Information (repeat for as many compressors)...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\+%%<<MAIN_END_2>>%%\\
  
-<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>\\ +%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...More Steam Turbine Information (repeat for as many steam turbines)...\\ ...More Steam Turbine Information (repeat for as many steam turbines)...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\+%%<<MAIN_END_2>>%%\\
  
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...More String Information...\\ ...More String Information...\\
-<<CONTENT_END>>\\+%%<<CONTENT_END>>%%\\
  
-<<MAIN_END_1>>\\+%%<<MAIN_END_1>>%%\\
  
-<<NESTED_PRODUCTS_END>>\\ +%%<<NESTED_PRODUCTS_END>>%%\\ 
-<<QUOTE_PRODUCTS_END>>\\+%%<<QUOTE_PRODUCTS_END>>%%\\
  
 **Important note** **Important note**
Line 667: Line 667:
 The Condition tag for nested products in document templates does not have a Condition end <<CONDITION_END>> The Condition tag for nested products in document templates does not have a Condition end <<CONDITION_END>>
 Example:   Example:  
-<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>\\ +%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ 
-<<CONTENT>>\\+%%<<CONTENT>>%%\\
 ...Some Compressor Information (repeat for as many compressors)...\\ ...Some Compressor Information (repeat for as many compressors)...\\
-<<CONTENT_END>>\\ +%%<<CONTENT_END>>%%\\ 
-<<MAIN_END_2>>\\ +%%<<MAIN_END_2>>%%\\ 
  
 <note> <note>
  
-The syntax above is valid even when <<CONDITION_END>> is missing and, as such, is not needed for nested products.</note>+The syntax above is valid even when %%<<CONDITION_END>>%% is missing and, as such, is not needed for nested products.</note>
  
  
Line 744: Line 744:
 Your template document must contain include tags: Your template document must contain include tags:
  
-<code> +%%<<INCLUDE_DOCUMENTS>>%% 
-<<INCLUDE_DOCUMENTS>> +%%<<INCLUDE_DOCUMENTS_END>>%% 
-<<INCLUDE_DOCUMENTS_END>> +
-</code>+
 \\ \\
 in place where you want your pdf file to be included. \\ in place where you want your pdf file to be included. \\
Line 772: Line 771:
 Conditions can be applied to every tag to perform an action based on the Conditions can be applied to every tag to perform an action based on the
 value tag returned. Conditions are separated by | . For example value tag returned. Conditions are separated by | . For example
-<<Q_BILLTO(COMPANY),Webcom=d|WebSource=d|D>>. What this tag will do is+%%<<Q_BILLTO(COMPANY),Webcom=d|WebSource=d|D>>%%. What this tag will do is
 delete value returned by the tag if company is Webcom or WebSource. For delete value returned by the tag if company is Webcom or WebSource. For
 all other values it will delete the whole line that the tag is on. all other values it will delete the whole line that the tag is on.
You are here: CallidusCloud CPQ Online HelpAdmin Page HelpCPQ TagsQuote Generation TagsInformational Tags