Differences

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

adminhelp:appendixa:quotegenerationtags:informationaltags [2018/08/07 09:44]
mnikolic
adminhelp:appendixa:quotegenerationtags:informationaltags [2019/07/30 07:41] (current)
dperic
Line 1: Line 1:
-====== Informational Tags ======  +====== Informational Tags ====== 
- +The content of this page has been reorganizedrewritten and moved to a new page [[adminhelp:quotesadministration:document_generation:document_generation_tags|Document Generation Tags]].
- +
-===== Quote Tags <<Q_QUOTE(...)>> ===== +
- +
-Replaces the tag with quote level information where "..." is one of the +
-following values: +
-  * NUMBER - quotation number, sample: %%<<Q_QUOTE(NUMBER)>>%% +
-  * TOTAL - quote total amount, sample: %%<<Q_QUOTE(TOTAL)>>%% +
-  * TOTALNET - quote total net price, sample: %%<<Q_QUOTE(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)>>%% +
-  * FREIGHT_METHOD - Shipping method name, sample: %%<<Q_QUOTE(FREIGHT_METHOD)>>%% +
-  * FREIGHT - Shipping amount, sample: %%<<Q_QUOTE(FREIGHT)>>%% +
-  * DATE_CREATED - Date quote was created, sample: %%<<Q_QUOTE(DATE_CREATED)>>%% +
-  * DATE_MODIFIED - Date quote was last modified, sample: %%<<Q_QUOTE(DATE_MODIFIED)>>%% +
-  * COMMENT - quote comment, sample: %%<<Q_QUOTE(COMMENT)>>%% +
-  * CURRENCY - currency name, sample: %%<<Q_QUOTE(CURRENCY)>>%% +
-  * CURRENCY_SIGN - currency sign, sample: %%<<Q_QUOTE(CURRENCY_SIGN)>>%% +
-  * 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). +
-  * USER_ID - current user id, sample: %%<<Q_QUOTE(USER_ID)>>%% +
-  * OWNER_ID - quote owner's id, sample: %%<<Q_QUOTE(OWNER_ID)>>%% +
-  * CART_ID - current cart(quote) id, sample: %%<<Q_QUOTE(CART_ID)>>%% +
-  * STATUS - Current quote status name, sample: %%<<Q_QUOTE(STATUS)>>%% +
- +
- +
-\\ **%%<<Q_BILLTO(...)>>%% | %%<<Q_SHIPTO(...)>>%% | %%<<Q_ENDUSER(...)>>%%**\\  +
- +
-Replaces the tag with billing, shipping and end user information where +
-"..." is one of the following: +
-  * COMPANY, sample: %%<<Q_BILLTO(COMPANY)>> | <<Q_SHIPTO(COMPANY)>> | <<Q_ENDUSER(COMPANY)>>%% +
-  * FIRSTNAME, sample: %%<<Q_BILLTO(FIRSTNAME)>> | <<Q_SHIPTO(FIRSTNAME)>> | <<Q_ENDUSER(FIRSTNAME)>>%% +
-  * LASTNAME, sample: %%<<Q_BILLTO(LASTNAME)>> | <<Q_SHIPTO(LASTNAME)>> | <<Q_ENDUSER(LASTNAME)>>%% +
-  * EMAIL, sample: %%<<Q_BILLTO(EMAIL)>> | <<Q_SHIPTO(EMAIL)>> | <<Q_ENDUSER(EMAIL)>>%% +
-  * ADDRESS1, sample: %%<<Q_BILLTO(ADDRESS1)>> | <<Q_SHIPTO(ADDRESS1)>> | <<Q_ENDUSER(ADDRESS1)>>%% +
-  * ADDRESS2, sample: %%<<Q_BILLTO(ADDRESS2)>> | <<Q_SHIPTO(ADDRESS2)>> | <<Q_ENDUSER(ADDRESS2)>>%% +
-  * CITY, sample: %%<<Q_BILLTO(CITY)>> | <<Q_SHIPTO(CITY)>> | <<Q_ENDUSER(CITY)>>%% +
-  * STATE, sample: %%<<Q_BILLTO(STATE)>> | <<Q_SHIPTO(STATE)>> | <<Q_ENDUSER(STATE)>>%% +
-  * PROVINCE, sample: %%<<Q_BILLTO(PROVINCE)>> | <<Q_SHIPTO(PROVINCE)>> | <<Q_ENDUSER(PROVINCE)>>%% +
-  * ZIPCODE, sample: %%<<Q_BILLTO(ZIPCODE)>> | <<Q_SHIPTO(ZIPCODE)>> | <<Q_ENDUSER(ZIPCODE)>>%% +
-  * COUNTRY, sample: %%<<Q_BILLTO(COUNTRY)>> | <<Q_SHIPTO(COUNTRY)>> | <<Q_ENDUSER(COUNTRY)>>%% +
-  * PHONE, sample: %%<<Q_BILLTO(PHONE)>> | <<Q_SHIPTO(PHONE)>> | <<Q_ENDUSER(PHONE)>>%% +
-  * 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)>>%% +
- +
- +
-\\ **%%<<Q_USER(...)>>%% | %%<<Q_OWNER(...)>>%%**\\  +
- +
-Replaces the tag with current user and owner information where "..." is +
-one of the following: +
-  * COMPANY, sample: %%<<Q_USER(COMPANY)>> | <<Q_OWNER(COMPANY)>>%% +
-  * USERNAME, sample: %%<<Q_USER(USERNAME)>> | <<Q_OWNER(USERNAME)>>%% +
-  * NAME, sample: %%<<Q_USER(NAME)>> | <<Q_OWNER(NAME)>>%% +
-  * TYPE, sample: %%<<Q_USER(TYPE)>> | <<Q_OWNER(TYPE)>>%% +
-  * EMAIL, sample: %%<<Q_USER(EMAIL)>> | <<Q_OWNER(EMAIL)>>%% +
-  * ADDRESS1, sample: %%<<Q_USER(ADDRESS1)>> | <<Q_OWNER(ADDRESS1)>>%% +
-  * ADDRESS2, sample: %%<<Q_USER(ADDRESS2)>> | <<Q_OWNER(ADDRESS2)>>%% +
-  * CITY, sample: %%<<Q_USER(CITY)>> | <<Q_OWNER(CITY)>>%% +
-  * STATE, sample: %%<<Q_USER(STATE)>> | <<Q_OWNER(STATE)>>%% +
-  * ZIPCODE, sample: %%<<Q_USER(ZIPCODE)>> | <<Q_OWNER(ZIPCODE)>>%% +
-  * COUNTRY, sample: %%<<Q_USER(COUNTRY)>> | <<Q_OWNER(COUNTRY)>>%% +
-  * PHONE, sample: %%<<Q_USER(PHONE)>> | <<Q_OWNER(PHONE)>>%% +
-  * FAX, sample: %%<<Q_USER(FAX)>> | <<Q_OWNER(FAX)>>%% +
- +
-\\ **%%<<Q_COMP(...)>>%%**\\  +
- +
-Replaces the tag with current user's company information where "..." is +
-one of the following: +
-  * NAME, sample: %%<<Q_COMP(NAME)>>%% +
-  * EMAIL, sample: %%<<Q_COMP(EMAIL)>>%% +
-  * ADDRESS1, sample: %%<<Q_COMP(ADDRESS1)>>%% +
-  * ADDRESS2, sample: %%<<Q_COMP(ADDRESS2)>>%% +
-  * CITY, sample: %%<<Q_COMP(CITY)>>%% +
-  * STATE, sample: %%<<Q_COMP(STATE)>>%% +
-  * ZIPCODE, sample: %%<<Q_COMP(ZIPCODE)>>%% +
-  * COUNTRY, sample: %%<<Q_COMP(COUNTRY)>>%% +
-  * PHONE, sample: %%<<Q_COMP(PHONE)>>%% +
-  * FAX, sample: %%<<Q_COMP(FAX)>>%% +
- +
-\\ **%%<<Q_QP(...)>>%% | %%<<Q_CUSTOM_FIELD(...)>>%%**\\  +
- +
-Replaces the tag with quote property (custom field) value where "..." is +
-custom field's name. +
- +
-\\ **%%<<Q_QP_FILE(...)>>%% | %%<<Q_CUSTOM_FIELD_FILE(...)>>%%**\\  +
- +
-Replaces the tag with quote property (custom field) value where "..." is +
-custom field's name. To ensure proper processing and continuity of the +
-document, it actually inserts this in the document %%<<INSERT_FILE(path to +
-the file returned by the tag)>>%%. After all informational tags have been +
-processed it searches the document for all %%<<INSERT_FILE(...)>>%% tags and +
-each file is done separately processed (to replace any tags in that file) +
-and inserted into template. +
-\\ **%%<<Q_QP_IMAGE(...)>>%% | %%<<Q_CUSTOM_FIELD_IMAGE(...)>>%%**\\  +
- +
-Replaces the tag with quote property (custom field) value where "..." is +
-custom field's name. To ensure proper processing and continuity of the +
-document, it actually inserts this in the document %%<<INSERT_FILE(path to +
-the file returned by the tag)>>%%. After all informational tags have been +
-processed it searches the document for all %%<<INSERT_FILE(...)>>%% tags and +
-each file is done separately processed (to replace any tags in that file) +
-and inserted into template. +
-\\ **%%<<Q_FILE(...)>>%%**\\  +
- +
-Replaces the tag with path to the filename represented by "...". To +
-ensure proper processing and continuity of the document, it actually +
-inserts this in the document %%<<INSERT_FILE(path to the file returned by +
-the tag)>>%%. After all informational tags have been processed it searches +
-the document for all %%<<INSERT_FILE(...)>>%% tags and each file is done +
-separately processed (to replace any tags in that file) and inserted into +
-template. +
-\\ **%%<<Q_FILE_STATIC(...)>>%%**\\  +
- +
-Replaces the tag with path to the filename represented by "...". To +
-ensure proper processing and continuity of the document, it actually +
-inserts this in the document %%<<INSERT_FILE_STATIC(path to the file +
-returned by the tag)>>%%. After all informational tags have been processed +
-it searches the document for all %%<<INSERT_FILE_STATIC(...)>>%% tags and +
-each file is inserted into template (no additional processing is done on +
-included file - hence "static"). +
-\\ **%%<<Q_VALUE(colType:colName)>>%%**\\  +
- +
-Deprecated.  Please use %%<<Q_TAG(...)>>%% instead +
- +
-\\ **%%<<Q_PTYPE(pTypeName:colName)>>%%**\\  +
- +
-Deprecated.  Please use %%<<Q_TAG(...)>>%% instead +
- +
-\\ **%%<<Q_ADDITIONAL_DISCOUNT>>%%**\\  +
- +
-Deprecated. Please use %%<<Q_TAG(...)>>%% instead  +
- +
-Additional discount tag has to be inside a table row. The idea is to +
-repeat that row for each additional discount and process cells in that +
-row for %%<<Q_ADDITIONAL_DISCOUNT>>%%, %%<<Q_ADDITIONAL_DISCOUNT_AMOUNT>>%% and +
-%%<<Q_ADDITIONAL_DISCOUNT_PERCENT>>%% and replace it with values. +
- +
-\\ **%%<<Q_TAG(...)>>%%**\\  +
- +
-Q_TAG takes and valid quote level CPQ tags (such as <*CTX(...)*> ) and returns its value.  It is recommended to by used for retrieving all quote header information and it can replace all other tags specified above.  Note: It will not parse <*CTX(Quote.CurrentItem...)*> correctly.  It will always assume CurrentItem is the first item in the cart. +
- +
-\\ **%%<<Q_TAG_FILE(...)>>%% - **\\  +
- +
-This tag can be used to include document in the template. Allowed document types are:\\ +
-  * images of type: **GIF**,**JPG**,**WMF**,**BMP** \\ +
-  * word document of type: **DOC** \\ +
-  * excel document of type: **XLS** \\ +
-\\ +
-Example and explanation how to use this tag follows: +
-%%<<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// +
-\\ +
-Note that this files that you want to include this way must be uploaded by the user through **Manage Content Documents**, under **Setup -> Quotes** admin menu. +
- +
-===== Cart Tags ===== +
- +
-\\ **%%<<C2...>>%% tags**\\  +
- +
-%%<<C2>>%% tags are used to list cart items data. These tags should be used +
-for all cart data representation starting with v60 because they offer +
-much better performance than tabular %%<<CT2>>%% tags. Anything that can be +
-done with %%<<CT2>>%% can be done with %%<<C2>>%%.   If %%<<C2>>%% does not return +
-any item, nothing will be displayed.    This prevent C2 headers and +
-footers to be displayed unless items are displayed. +
-=== <<C2>> tag === +
- +
-%%<<C2>>%% represents cart item data. It has to start with %%<<C2>>%% and end +
-with %%<<C_END>>%%. There has to be at least one blank space (or a new line) +
-after %%<<C_END>>%% for it to be processed correctly. It can have 4 sections, +
-each one is optional. Typical usage is:\\  +
-%%<<C2>>%%\\  +
-%%<<HEADER>>%%\\  +
-This is a header.\\  +
-%%<<HEADER_END>>%%\\  +
-%%<<MAIN>>%%\\  +
-Repeat once for each main item.\\  +
-%%<<C_STOP>>%%\\  +
-%%<<MAIN_END>>%%\\  +
-%%<<LI>>%%\\  +
-Repeat once for each additional line item.\\  +
-%%<<C_STOP>>%%\\  +
-%%<<LI_END>>%%\\  +
-%%<<FOOTER>>%%\\  +
-This is a footer.\\  +
-%%<<FOOTER_END>>%%\\  +
-%%<<C_END>>%%\\  +
-  * HEADER - Header is displayed just once at the top. %%<<HEADER>>%% and +
-%%<<HEADER_END>>%% should be each on its own line like in example above. If +
-tabular representation is wanted, this would be a place to put the header +
-row: +
-\\  +
-{{ Wiki::informationaltagsb1.png }}  +
-\\  +
-  * MAIN - Content of MAIN is repeated once for each main item. +
-%%<<MAIN>>%% and %%<<MAIN_END>>%% should be each on its own line like in example +
-above. Note in the above example the line with %%<<C_STOP>>%%. This is +
-required to ensure the proper processing of item specifc tags. It +
-prevents the processing from continuing past that line. If tabular +
-representation is wanted, this would be place to put the row(s) that +
-will have item data (this allows multiple rows per item): +
-\\  +
-{{ Wiki::informationaltagsb2.png }}  +
-\\  +
-  * LI - Content of LI is repeated once for each line item. LI and +
-LI_END should be each on its own line like in example above. Note in the +
-above example the line with %%<<C_STOP>>%%. This is required to ensure the +
-proper processing of item specifc tags. It prevents the processing from +
-continuing past that line. If tabular representation is wanted, this +
-would be a place to put the row(s) that will have item data (this allows +
-multiple rows per item): +
-\\  +
-{{ Wiki::informationaltagsb3.png }}  +
-\\  +
-  * FOOTER - Header is displayed just once at the bottom. %%<<FOOTER>>%% +
-and %%<<FOOTER_END>>%% should be each on its own line like in example above. +
-If tabular representation is wanted, this would be a place to put the +
-footer row: +
-\\  +
-{{ Wiki::informationaltagsb4.png }}  +
-=== <<C2_PTYPE(...)>> tag === +
- +
-Same functionality as %%<<C2>>%% except it only lists main items that have +
-product type as defined by "..." and their line items (regardless of +
-product type of line item). +
-=== <<C2_PTYPE_ALL(...)>> tag === +
- +
-Same functionality as %%<<C2>>%% except it only lists main items and line +
-items that have product type as defined by "...". +
- +
-=== <<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.  +
- +
-=== <<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.  +
- +
-=== <<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.  +
- +
-=== <<C2_PTYPE_ALL_SortByNameButStartWith("H","S")>> tag === +
-This tag enables you to sort the product type in the alphabetical order, but you can state which rank order to start with. If you have four product types, such as Drive ranked 5, Hardware ranked 2, Services ranked 3, and Computers ranked 1, this tag will sort all your products by Drive, Services and Hardware first; then, it will start sorting the types in the alphabetical order, and would start with Computers followed by the remaining product types in the alphabetical order by name. This tag gives you lots of flexibility when ordering your product types.   +
- +
- +
- +
- +
-=== <<C2_OPTIONAL(...)>> tag === +
- +
-It lists items based on the "..." which can have Y,N and ALL. Y lists +
-only optional items. N lists on non optional items. ALL lists all item +
-non-optional and optional (%%<<C2_OPTIONAL(ALL)>>%% is really equivalent to +
-%%<<C2>>%%). +
-=== <<C2_CONSOLIDATE(...)>> tag === +
- +
-Consolidates items based on a common denominator. For example, if we have +
-2 items with same number using consolidate will list it only once.\\  +
-%%<<C2_CONSOLIDATE(C_PNUM)>>%%\\  +
-%%<<HEADER>>%%\\  +
-This is a header.\\  +
-%%<<HEADER_END>>%%\\  +
-%%<<ITEM>>%%\\  +
-Item number: %%<<UNIQUE(C_PNUM)>>%%\\  +
-Item QTY: %%<<SUM(C_QTY)>>%%\\  +
-Item IDs: %%<<APPEND(C_ID)>>%%\\  +
-%%<<C_STOP>>%%\\  +
-%%<<ITEM_END>>%%\\  +
-%%<<FOOTER>>%%\\  +
-This is a footer.\\  +
-%%<<FOOTER_END>>%%\\  +
-%%<<C_END>>%%\\  +
-In the above example, items are consolidated based on the part number. +
-%%<<UNIQUE(C_PNUM)>>%% will list the unique part number. Important thing to +
-note is that the inner tag (C_PNUM) in this example should not be +
-surrounded with %%<< >>%%. %%<<SUM(C_QTY)>>%% will take the quantity of each item +
-that has this part number, add it up and display it. %%<<APPEND(C_ID)>>%% +
-will list all IDs that have this part number. List will be separated by a +
-comma (Item IDs: 1,3,4). +
-By default consolidate will run through all items. To only process main +
-items we could say %%<<C2_CONSOLIDATE(C_PNUM,MAIN)>>%% or to only process +
-line items %%<<C2_CONSOLIDATE(C_PNUM,LI)>>%% +
- +
-\\ **%%<<C2...>>%% tag in Excel template**\\  +
-%%<<C2>>%% tag can be used in Excel template as well. Usage deffers agains usage in Word template. In Ecel, you define a cell range where you want to render information. Take a look at the example provided below. +
- +
-=== Example of usage <<C2>> tag in Excel template === +
-<code xml> +
-<<C2(10X10|CONDITION:[AND](<*CTX( Quote.CurrentItem.IsOptional )*>,[EQ](<*CTX( Quote.CurrentItem.IsMainItem )*>,False))=1)>> +
-<<MAIN(1X10)>> +
-<<C_PNUM>> +
-<<LI(1X10)>> +
-<<C_PNUM>> +
-</code> +
- +
-\\ +
-This example shows situation when you want to display line items that are optional. Notice that 10 rows and 10 columns are allocated for this information to be rendered and for each main and line item we are allocating one more row. Also notice that main item will not be displayed, based on the condition we have set, but %%<<MAIN>>%% tag must exist in the template to follow a valid template tags sequence. +
- +
-\\ **%%<<C_....>>%% tags**\\  +
- +
-%%<<C_....>>%% tags retrieve information form the individual item. They are +
-only valid if inside a %%<<C2>>%% type tags or %%<<CT2>>%%. +
-==== <<C_TAG(...)>> ==== +
- +
-=== <<C_TAG_FILE>> === +
-It takes <*CTX(Quote.CurrentItem.yyyy)*> as input.  It returns CurrentItem data. Please refer to CTX tags information for a full list of available values.  This is a preferred method for getting item information.  +
-\\ +
-=== <<C_ID>> === +
-Returns cart item id (1, 2, 3, 4, ...) +
-\\ +
-=== <<C_VALUE(RolledUpCartItem)>> === +
- +
-Returns rolled-up cart item id (1, 1.1, 1.2, 2, 2.1, 2.2, ...) +
-=== <<C_PNUM>> === +
- +
-Returns cart item part number +
-=== <<C_QTY>> === +
- +
-Returns cart item quantity +
-=== <<C_DISCOUNT>> === +
- +
-Returns discount percentage for the cart item +
-=== <<C_USER_DESC>> === +
- +
-Returns user entered description for the cart item. free form value from +
-the cart. +
-=== <<C_DESC>> === +
- +
-Returns cart item description +
-=== <<C_DESIRED>> === +
- +
-=== <<C_EMPTY>> === +
-returns empty space +
- +
-=== <<C_BASE>> === +
- +
-Returns cart item base list price +
-=== <<C_LIST>> === +
- +
-Returns cart item extended list price +
- +
-=== <<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)>>%%) +
- +
-=== <<C_PRICE>> === +
- +
-Returns cart item total amount (extended amount). +
- +
-=== <<C_ROLLED_UP_DESIRED>> === +
- +
-Returns a sum of net prices for all line items (only valid if called on +
-main item) +
-=== <<C_ROLLED_UP_BASE>> === +
- +
-Returns a sum of base list prices for line items (only valid if called on +
-main item) +
-=== <<C_ROLLED_UP_LIST>> === +
- +
-Returns a sum of extended list prices for line items (only valid if +
-called on main item) +
- +
-=== <<C_PIMAGE_LARGE>> ===  +
-Returns a large product image defined for the product   +
-\\ +
-=== <<C_PIMAGE>> === +
- +
-Returns a product image for the item. +
-\\ +
- +
-=== Example === +
-<code> +
-<<C2>> +
-<<HEADER>> +
-<<HEADER_END>> +
-<<MAIN>> +
-<<C_PIMAGE>> +
-<<MAIN_END>> +
-<<LI>> +
-<<C_PIMAGE_LARGE>> +
-<<LI_END>> +
-<<FOOTER>> +
-<<FOOTER_END>> +
-<<C_END>> +
-</code> +
-=== <<C_PTYPE>> === +
- +
-Returns product type for the cart item +
-\\ +
-=== <<C_PNAME>> === +
- +
-Returns product name for the cart item +
-\\ +
-=== <<C_DB>> === +
- +
-Not implemented. Returns blank. +
-\\ +
-=== <<C_PATTR(...)>> === +
- +
-Takes the "...." which can be any cpq product level tag (e.g. +
-<***Value(SomeAttr)***> ) and retrieves its value. This is used to +
-retrieve attribute values as configured in the product that is +
-represented by the cart item. It also, to simplify some calls to AUX or +
-other tags, takes [ITEM_ID], [USER_ID], [OWNER_ID], [CART_ID] and +
-[CATALOG_CODE] and replaces them with real values prior to the call. +
-=== <<C_PATTR2(...)>> === +
- +
-Same as %%<<C_PATTR(...)>>%%. It is left in for backward compatibility. +
- +
-=== <<C_PATTR_FILE_STATIC>> === +
-Includes static file. No processing on the file is done. +
-\\ +
-=== <<C_PATTR_FILE(...)>>, <<C_PATTR_EXCEL(...)>> and <<C_PATTR_IMAGE(...)>> === +
- +
-Same as %%<<C_PATTR(...)>>%% except it tries to resolve the returned value as +
-a filename located in \mt\tenant\quotation\user_templates. +
- +
-Please note that Microsoft Word documents attached to a template in the 2007 Microsoft Word format (DOCX) must also be in the 2007 Microsoft Word format (DOCX). +
-=== <<C_KEY_ATTR(...)>> === +
- +
-Inserts a value of Key Attribute "..." +
-=== <<C_VALUE(...)>> === +
- +
-Deprecated.  Please use %%<<C_TAG(...)>>%% instead +
- +
-=== CONTAINER === +
- +
-To display Container data use the following structure inside %%<<MAIN>>%%.....%%<<MAIN_END>>%% section: +
- +
-%%<<CONTAINER(NameOfTheContainer)>>%%\\ +
-%%<<CONTAINER_HEADER>>%%\\ +
-Header text or a table header (optional)\\ +
-%%<<CONTAINER_HEADER_END>>%%\\ +
-%%<<CONTAINER_ITEM>>%%\\ +
-This section will be repeated once for each row of the container.\\ +
-%%<<CONTAINER_ITEM_END>>%%\\ +
-%%<<CONTAINER_FOOTER>>%%\\ +
-Footer text or table footer (optional)\\ +
-%%<<CONTAINER_FOOTER_END>>%%\\ +
-%%<<CONTAINER_END>>%%\\ +
- +
-Inside CONTAINER_ITEM section, %%<<CONTAINER_TAG( <*CTX(Container().Row().Column(ColumnName).Get)*> )>>%% to get data from the container.  To display the row number of the current container item use %%<<CONTAINER_TAG( ROWNUMBER() )>>%% +
- +
-=== New Cart Items Tag Structure === +
-%%<<QUOTE_ITEMS:CONDITION()>>%% +
-  * 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 +
- +
-%%<<HEADER>>%% +
-%%<<HEADER_END>>%% +
-  * Admin would specify header for all items +
-  * Header and footer are only displayed if condition for C2 section is ok +
- +
-%%<<MAIN:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>>%% +
-  * Admin would specify condition for displaying main item. Condition would be able to interpret CurrentItem CTX tag +
-  * Condition is not required +
-  ** 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’ +
-  * 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 +
-  ** 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. +
- +
-%%<<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)*>)>>%% +
- +
- +
-%%<<MAIN_HEADER>>%% +
-%%<<MAIN_HEADER_END>>%% +
-%%<<MAIN_FOOTER>>%% +
-%%<<MAIN_FOOTER_END>>%%  +
-  * 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: +
-  ** Header +
-  ** MainItem1 +
-  ** MainItem3 +
-  ** MainItem5 +
-  ** Footer +
-  * If no main items have been found based on condition, header and footer wouldn’t be displayed +
-  +
-%%<<MAIN_END>>%% +
-  * Marks end of main item section +
- +
-%%<<LI:CONDITION(), SORT_BY_PRODUCT_TYPE(….)>>%%   +
-  * CPQ will process all line items for the main item that was processed before the line item +
-  * Condition is not required +
-  * Condition would be processed to verify whether some line item should be included in the document. Condition would be able to interpret CurrentItem CTX tag +
-  * CPQ document engine would go through lite items 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 +
-  ** 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_END>>%%  +
-%%<<LI_FOOTER>>%% +
-%%<<LI_FOOTER_END>>%%  +
-  * 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: +
-  ** Header +
-  ** Linetem1 +
-  ** LineItem3 +
-  ** LineItem5 +
-  ** Footer +
-  * If no line items have been found based on condition, header and footer wouldn’t be displayed +
- +
-%%<<LI_END>>%% +
-  * This tag marks the end of line item section +
- +
-%%<<FOOTER>>%% +
-%%<<FOOTER_END>>%% +
-  * This is the footer section for QUOTE_ITEMS table. It is displayed only if condition for QUOTE_ITEMS section is ok +
- +
-%%<<QUOTE_ITEMS_END>>%% +
-  * This is the end of QUOTE_ITEMS +
- +
-== Example == +
-%%<<QUOTE_ITEMS>>%%\\ +
-%%<<HEADER>>%%\\ +
-%%<<HEADER_END>>%%\\ +
- +
-%%<<MAIN: CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%% \\ +
-%%<<MAIN_HEADER>>%%\\ +
-%%<<MAIN_HEADER_END>>%%\\ +
-%%<<MAIN_CONTENT>>%%\\ +
-%%<<MAIN_CONTENT_END>>%%\\ +
-%%<<MAIN_FOOTER>>%%\\ +
-%%<<MAIN_FOOTER_END>>%%\\ +
-%%<<MAIN_END>>%%\\ +
-%%<<LI>>%%\\ +
-%%<<LI_HEADER>>%%\\ +
-%%<<LI_HEADER_END>>%%\\ +
-%%<<LI_CONTENT>>%%\\ +
-%%<<LI_CONTENT_END>>%%\\ +
-%%<<LI_FOOTER>>%%\\ +
-%%<<LI_FOOTER_END>>%%\\ +
-%%<<LI_END>>%%\\ +
- +
-%%<<FOOTER>>%%\\ +
-%%<<FOOTER_END>>%%\\ +
-%%<<QUOTE_ITEMS _END>>%%\\ +
- +
-===Quote Products Tag Structure=== +
-\\  +
-%%<<QUOTE_PRODUCTS>>%%\\ +
-%%<<NESTED_PRODUCTS>>%%\\ +
-%%<<MAIN_1>>%%\\ +
-**FIRST LEVEL (PARENT):**\\ +
-%%<<CONTENT>>%%\\ +
-%%<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>%%\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_2>>%%\\ +
-**SECOND LEVEL (CHILD):**\\ +
-%%<<CONTENT>>%%\\ +
-%%<<C_TAG(<*CTX( Quote.CurrentItem.RolledUpCartItem )*>)>>%%\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
-%%<<MAIN_END_1>>%%\\ +
-%%<<NESTED_PRODUCTS_END>>%%\\ +
-%%<<QUOTE_PRODUCTS_END>>%%\\ +
- +
-**Parent/child nested tag structure** +
- +
-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>>%%\\ +
-%%<<NESTED_PRODUCTS>>%%\\ +
- +
-%%<<MAIN_1:CONDITION(Hardware)>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...Some Parent Item Information...\\  +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_2:CONDITION(Software)>>%%\\ +
-%%<< CONTENT>>%%\\ +
-...Child Item 1 Information...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
-%%<<LI:CONDITION(Memory)>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...Parent Line Item Information...\\ +
-%%<< CONTENT_END>>%%\\ +
-%%<< LI _END>>%%\\ +
-%%<<MAIN_END_1>>%%\\ +
- +
-%%<<NESTED_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. +
- +
-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>>%%\\ +
- +
-%%<<CONTENT>>%%\\ +
-...Some Parent Item Information...\\ +
-%%<<CONTENT_END>>%%\\ +
- +
-%%<<MAIN_2>>%%\\ +
-%%<< CONTENT>>%%\\ +
-...Child Item 1 Information...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
- +
-%%<<CONTENT>>%%\\ +
-...More Parent Item Information...\\ +
-%%<<CONTENT_END>>%%\\ +
- +
-%%<<LI>>%%\\  +
-%%<<CONTENT>>%%\\ +
-...Parent Line Item Information...\\ +
-%%<< CONTENT_END>>%%\\ +
-%%<< LI _END>>%%\\ +
- +
-%%<<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. +
- +
-**Example** +
- +
-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>>%%\\ +
-%%<<NESTED_PRODUCTS>>%%\\ +
- +
-%%<<MAIN_1:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP String))>>%%\\ +
- +
-%%<<CONTENT>>%%\\ +
-...Some String Information...\\ +
-%%<<CONTENT_END>>%%\\ +
- +
-%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...Some Compressor Information (repeat for as many compressors)...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
- +
-%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...Some Steam Turbine Information (repeat for as many steam turbines)...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
-  +
-%%<<CONTENT>>%%\\ +
-...More String Information...\\ +
-%%<<CONTENT_END>>%%\\ +
- +
-%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...More Compressor Information (repeat for as many compressors)...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
- +
-%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Steam Turbine))>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...More Steam Turbine Information (repeat for as many steam turbines)...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\ +
- +
-%%<<CONTENT>>%%\\ +
-...More String Information...\\ +
-%%<<CONTENT_END>>%%\\ +
- +
-%%<<MAIN_END_1>>%%\\ +
- +
-%%<<NESTED_PRODUCTS_END>>%%\\ +
-%%<<QUOTE_PRODUCTS_END>>%%\\ +
- +
-**Important note** +
- +
-The Condition tag for nested products in document templates does not have a Condition end <<CONDITION_END>> +
-Example:   +
-%%<<MAIN_2:CONDITION([EQ](<*CTX( Quote.CurrentItem.ProductTypeName )*>,EP Compressor))>>%%\\ +
-%%<<CONTENT>>%%\\ +
-...Some Compressor Information (repeat for as many compressors)...\\ +
-%%<<CONTENT_END>>%%\\ +
-%%<<MAIN_END_2>>%%\\  +
- +
-<note> +
- +
-The syntax above is valid even when %%<<CONDITION_END>>%% is missing and, as such, is not needed for nested products.</note> +
- +
- +
- +
- +
- +
-===== Special Tags <<ST_...>> ===== +
- +
-\\ **%%<<ST_LOGO>>%%**\\  +
- +
-Returns Company Logo +
-\\ **%%<<ST_USERFILE(...)>>%% and %%<<ST_USERFILE_IMG(...)>>%%**\\  +
- +
-When document is added through admin interface, value spacifed in (...) +
-gets stored as a label associated with that template. When user generates +
-a doucment, after selecting it page is displayed that allows user to +
-upload their own files and select them from a dropdown to associated with +
-label. Generated document will then include that file in place of +
-%%<<ST_USERFILE(...)>>%% tag. +
-\\ **%%<<ST_GROUP_SUBTOTAL(...)>>%%**\\  +
- +
- +
-Returns subtotal for group "..." +
-\\ **%%<<ST_GROUP_DESCRIPTION(...)>>%%**\\  +
- +
-Returns description for group "..." +
-\\ **%%<<ST_GI(...)>>%%**\\  +
- +
-Returns value of GI "..." +
-\\ **%%<<ST_GI_FILE(...)>>%%**\\  +
- +
-Returns value of GI and inserts it as a file +
-\\ **%%<<ST_GI_IMAGE(...)>>%%**\\  +
- +
-Returns value of GI and inserts it as image +
-\\ **%%<<ST_PTYPE_PRICE(...)>>%%**\\  +
- +
-Returns a subtotal for product type "..." +
- +
- +
- +
-\\ **%%<<ST_PTYPE_LISTPRICE(...)>>%%**\\  +
- +
-Returns a list subtotal for product type "..." +
-\\ **%%<<ST_PTYPE_DISCOUNT(...)>>%%**\\  +
- +
-Returns a discount percent for product type "..." +
-\\ +
-**%%<<ST_GROUP_LABEL(...)>>%%** +
-Returns Label of the cart items group with the id you provided. (E.g,  << ST_GROUP_LABEL (A)>>) +
-\\  +
-**%%<<ST_PTYPE_NETPRICE(...)>>%%** +
-Calculates Netprice for the Product Type provided by tag (E.g, <<ST_PTYPE_NETPRICE(Accessories)>>) +
-\\  +
- +
-===== Include pdf file in template ===== +
-If you want to include pdf file in your document generation template, you can follow next steps. +
-\\ +
-**step 1:** Upload pdf file you want to include. \\ +
- +
-Go to **setup > Quotes > Manage Content Documents** then click "//Add New document//" (upload your pdf document) +
- +
-**step 2:** Create new document generation template.\\ +
- +
-Go to **setup > quotes > Document Generation Templates** then click on "//Add new template//" \\ +
-Under //Template Definition// tab Add New Document (docx). (Note that if you already have your template, this step is not neccessary) +
-\\ +
-Your template document must contain include tags: +
- +
-%%<<INCLUDE_DOCUMENTS>>%% +
-%%<<INCLUDE_DOCUMENTS_END>>%% +
- +
-\\ +
-in place where you want your pdf file to be included. \\ +
- +
-On the same screen, go to tab "//Additional files//". In the "//Included Files//" text area enter a name of your pdf file you have just uploaded and click save. +
- +
-\\ +
-=== Example: === +
-\\ +
- +
-<code> test.pdf </code> for a static file inclusion, or +
-\\ +
-<code> <*CTX( Quote.CurrentItem.ProductName )*>.pdf</code> for inclusion based on the product name +
- +
- +
- +
-===== Other Tags ===== +
-\\ **%%<<UPDATE_TOC>>%%**\\ +
- +
-Updates the Table Of Contents in the document This is done after the document is processed so that the table of contents can be updated with any sections that may have been removed. +
- +
-===== Tag level conditions ===== +
- +
-Conditions can be applied to every tag to perform an action based on the +
-value tag returned. Conditions are separated by | . For example +
-%%<<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 +
-all other values it will delete the whole line that the tag is on. +
-Available condition actions are: +
-  * D - delete line +
-  * d - delete selection (value returned by tag) +
-  * P - insert page break after the tag returned value +
-  * p - insert page break before tag returned value +
-  * B - bold the whole line tag value is on +
-  * b - bold only the tag returned value +
-  * U - convert tag value to uppercase +
-  * DC - If value is in a table cell, clear/delete the contents of the cell +
-  * DR - If value is in a table, delete the table row (row is not immediately deleted, it is marked for deletion and deleted when document processing is done) +
-  * DCOL - if value is in a table, delete the column the value is in (not immediately deleted, but marked for deletion at the end of processing). caution delete might fail if there are merged column cells +
-  * DELETE_TABLE - If tag value is in a table, mark table for deletion (deletes table after processiong is finished)+
  
 +<note>This page will be deleted after some time and all documentation related to tags will be managed in the new section. If this page was in your bookmarked or favorite links, make sure to delete it and save the link to the new page.</note>
You are here: SAP Sales Cloud CPQ Online HelpAdmin Page HelpSAP CPQ TagsQuote Generation TagsInformational Tags