SAP CPQ Setup and Administration Guide

Download as pdf or txt
Download as pdf or txt
You are on page 1of 840

Administration Guide | PUBLIC

Document Version: 1.0.0 – 2023-05-11

SAP CPQ Setup and Administration Guide


© 2023 SAP SE or an SAP affiliate company. All rights reserved.

THE BEST RUN


Content

1 Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1 Setup Home. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Supported Browsers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3 System ID (Object Identifier). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.4 SAP CPQ Tenant URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 Product Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18


2.1 Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Create Attributes (General Procedure). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Create Attribute (General Fields). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Attribute Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Basic Scripting Elements for Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Attribute Quantity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Import/Export Attribute Translations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Attribute Import. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
2.2 Products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Create Products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Custom Configurator XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Drilldown. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Create Product Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Product Copy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Order Item Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Standalone Subscription Products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Standalone Service Contract Products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Product Display Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Create Product Version. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Set Configuration Based on XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
Unit of Measurement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.3 Guided Selling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Create Guided Selling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
2.4 Categories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.5 Product Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
2.6 Sequence Substitution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.7 Creating Favorites Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.8 Custom Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Custom Table Logging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Hidden Custom Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

SAP CPQ Setup and Administration Guide


2 PUBLIC Content
2.9 Messages in Product Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.10 Sequences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

3 Bulk Import/Export. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111


3.1 Bulk Product Import/Export. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.2 Bulk User Import/Export. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Import Through Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Update Existing Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Filter and Export Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.3 Bulk Pricebook Import/Export. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.4 Bulk Product Translation Import/Export. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118

4 User Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120


4.1 Guest User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Setting Up an Anonymous User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.2 User Registration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Customizing User Registration Emails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.3 Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Create Temporary Password. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Forgot Your Password. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Change Password. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
4.4 Companies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Add a New Company. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Companies Export/Import. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.5 Log In as a Proxy User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.6 Permission Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Create a Permission Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.7 Quick Search and Advanced Search. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
4.8 User Custom Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.9 User Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Add a New User Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Legacy UI Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Setting Up a Landing Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
New Project/Quotation Landing Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

5 Quotes Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150


5.1 Document Generation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Document Generation Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Create Document Generation Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Document Generation Engines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Setup Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Manage Content Documents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

SAP CPQ Setup and Administration Guide


Content PUBLIC 3
Template Creation Tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Document Generation User Journey. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Document Generation Tips and Tricks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
5.2 Quote 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Quote 2.0 Migration Guide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Fields, Calculations, Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Quote 2.0 Calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Solution Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Quote Teams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Filtering Items in Quote 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Scripting for Quote 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Business Partners. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
5.3 Quote Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Create Quote Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Quote Table Columns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Manage Quote Table Column Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Quote Table Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Import via Excel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Quote Table Translation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
5.4 Quote Tab Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
5.5 Custom Quote Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
5.6 Key Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
5.7 Search Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
5.8 Quote Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
5.9 Reports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
5.10 Cart Level Aggregates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
5.11 Bulk Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
5.12 Column Headings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
5.13 Email Customers / Quote Acceptance Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
5.14 Favorites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
5.15 Images for Quote Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
5.16 MRC Column in Existing Quotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
5.17 Quick Config (also referred to as Reverse Search ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
5.18 Quick Product Search in the Quote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
5.19 Quote Item Custom Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
5.20 Quote Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
5.21 Quote Revisions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
5.22 Create Quote Tab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
5.23 Renewal Management (only Quote 1.0). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
5.24 Report Module. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
5.25 Standard Quote Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

SAP CPQ Setup and Administration Guide


4 PUBLIC Content
5.26 Scheduled Quote Deletion (Soft Delete). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414
5.27 Parallel Work on Quote 1.0 (Administrator Side). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

6 Workflow-Approvals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
6.1 Workflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
6.2 Workflow Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
6.3 Workflow Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Standard Workflow Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425
Action Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Reprice, Reconfigure, and Conditional Reconfigure - Differences. . . . . . . . . . . . . . . . . . . . . . . 432
Approval Reminder Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Auto Quote Expiration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Global Condition for Quote Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
6.4 Statuses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
6.5 Outbound SAP CPQ Emails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
6.6 Notifications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Notification Implementation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Approval via PDA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
One-click Approval HTML Email Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
6.7 Email Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
6.8 Approvals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Approval Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Likelihood of Approval. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Approval Auto-Reminder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Out of Office for Approvers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Approving Quotes in One Click. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .473
6.9 Required Fields By Workflow Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
6.10 Item Actions Workflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

7 Pricing/Calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
7.1 Cart Fields Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Status - User Group Grid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Adding/Removing Editable Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Editable Quote Comment Field. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Recurring Rolled-Up Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Rolled-Up Cost and Margin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
7.2 Pricebooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .493
Effective Dates for Price Book Entries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Pricing Dynamic Part Numbers and Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Promotions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
7.3 Currencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
7.4 Markets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

SAP CPQ Setup and Administration Guide


Content PUBLIC 5
7.5 Market Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
7.6 Discounts/Multipliers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
7.7 Discount Priorities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
7.8 Total Amount Limit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
7.9 Margin Health. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Create Margin Health Indicators in Quote 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Create Margin Health Indicators in Quote 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Margin Health Design and Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
7.10 Country/Region Sales Tax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
7.11 Edit Item Cost on Cart. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
7.12 Preserve Original Currency Rates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
7.13 Recurring and Non-Recurring Prices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
7.14 Rounding Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
7.15 Shipping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
7.16 State Sales Tax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
7.17 Price Code in Pricing Calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

8 Customer Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544


8.1 Local and Global Customers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
8.2 Customer Field Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
8.3 Customer Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
8.4 Local Customer Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
8.5 Global Customer Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
8.6 Global Customers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
8.7 Customer Custom Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
8.8 Customer Role Defaults. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553
8.9 Export/Import Customers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
8.10 Postal Code Lookup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

9 User Interface Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557


9.1 Responsive Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
9.2 Responsive Template Customization in Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Customize Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Limiting Customized Templates to Specific User Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
9.3 Template Versions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
9.4 Freeze Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
9.5 Branding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
9.6 Catalog Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
9.7 Responsive Design Customizations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
Prerequisites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Knockout Extension Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Customization Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583

SAP CPQ Setup and Administration Guide


6 PUBLIC Content
Advanced Customization Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608
Server Side Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Manage Custom CSS/JS Files with File Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Upgrade Templates to Newer Versions with Newer Releases. . . . . . . . . . . . . . . . . . . . . . . . . . 630
9.8 Obsolete Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
Top Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Custom Category UI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .633
Product Configuration Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Product Details Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Products to Product Details Templates Mappings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635

10 General Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .637


10.1 Application Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
10.2 Deploy / Send Changes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .669
Deployment Packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Deployment Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
Deployment Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .699
10.3 Countries/Regions, States and Territories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .700
10.4 Tabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
10.5 Dictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Comparing Dictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Exporting/Importing Dictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Creating Custom Dictionary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Defining Key Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Which Dictionaries will SAP CPQ Retrieve for my Users?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Translations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
10.6 Manage Generated Documents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
10.7 File Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
Upload Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .707
10.8 Time Zones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

11 Scripting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
11.1 Create a Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
Scripting General Guidelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
11.2 Global Script Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .716
11.3 Custom Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
11.4 Custom Calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
11.5 Script Workbench. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723

12 SAP CPQ Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .729


12.1 Conditional Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730

SAP CPQ Setup and Administration Guide


Content PUBLIC 7
12.2 Tags and Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .731
12.3 CTX Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
CTX Date Format Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
CTX Objects and Lifetime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Enhanced Language Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Salesforce Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
SOD Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
SAP Billing and Revenue Innovation Management CTX Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . 739
12.4 Product Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Arithmetic Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Attribute Data Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
External Source Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
Logged in User Data Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Product Data Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Sequence Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
12.5 QuoteTags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
Other Quote Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
User and Customer Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
12.6 Tags for Rules and Triggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .752
Action Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
Condition Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .756
12.7 Main Item Price Tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
12.8 XWS Tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
12.9 Global Information (GI) Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Create GI Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Retrieve GI Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
GI Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
12.10 Formula Validator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
CTX Syntax Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Table and List Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766

13 Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774


13.1 Audit Trail Logs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
Admin Actions Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
User Actions Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .776
Products Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
Attributes Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .778
Pricebooks Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Custom Tables Audit Trail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Logged Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
13.2 Change Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
Create Change Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782

SAP CPQ Setup and Administration Guide


8 PUBLIC Content
Deploying a Change Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783

14 Delegation of Authority. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785


14.1 Ability to Manage Documents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .786
14.2 Bulk Quote Reassignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
14.3 Delegating Authority for Custom Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .787
14.4 Delegating Authority for Simple Products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
14.5 User Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
14.6 Migrate Pricebook Permissions from Delegation of Authority to Access Rights. . . . . . . . . . . . . . . . 789

15 Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
15.1 Automatic Data Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Blocked Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
General Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
Audit Trail Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .803
15.2 Personally Identifiable Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Personal Data Log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
View/Export Personally Identifiable Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
15.3 WSDL and Certificate Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Certificate Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
WSDL Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
15.4 Access Rights. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Assign Access Rights for Setup Sections and Entities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
Select Access Rights Administrators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Access Rights and Custom Table Deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
View Access Rights Permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
15.5 DKIM Support for Outbound Emails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
Test DKIM Signature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
15.6 Content Security Policy in SAP CPQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
15.7 Credential Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
15.8 Multi-factor Authentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
15.9 Security Recommendations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .826
Explanation of Table Headings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .828

16 Log and Developer Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829


16.1 Log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
16.2 Developer Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Developer Console Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Developer Console Trace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
Developer Console Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Developer Console How-To. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
Debugging with Developer Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837

SAP CPQ Setup and Administration Guide


Content PUBLIC 9
1 Administration

This guide is intended for administrators to understand SAP CPQ features and learn how to use them. The
descriptions in this guide are comprehensive and make the central source of documentation for all existing and
new SAP CPQ functionalities.

 Note

For information and instructions on SAP CPQ integration capabilities, check the SAP CPQ Integration
Guide.

If you are a beginner user of SAP CPQ, first read the Getting Started Guide to get familiar with the system.

Setup Home [page 10]


Once logged in, you can access the administrative side by clicking Setup, which is located in the main
navigation toolbar on the left side of the page. Clicking this button displays the Setup Home page.

Supported Browsers [page 11]


This topic contains the list of browsers currently supported by SAP CPQ.

System ID (Object Identifier) [page 11]


Different objects in SAP CPQ have their own unique identifiers or system IDs.

SAP CPQ Tenant URL [page 12]


Due to the effort to make the SAP CPQ infrastructure more flexible and to improve the overall agility
and resilience of the system, the format of the SAP CPQ URL needs to be changed.

1.1 Setup Home

Once logged in, you can access the administrative side by clicking Setup, which is located in the main
navigation toolbar on the left side of the page. Clicking this button displays the Setup Home page.

Setup Home page contains tenant analytics:

• Script Performance - the top five scripts with the longest average execution time that were executed during
the previous day are listed here. You can view the script name, longest execution time, average execution
time, and the number of executions. In addition, you can click View More to access the Script Performance
page, where you can find a detailed overview of script performance.
• Storage Status in Current Month - two graphs visually representing the usage of the file system and the
database are available. There’s also a numerical representation of the total and used storage space in
gigabytes.
• Storage Usage per Data Type - a graphic and numeric overview of storage usage for the last six month is
displayed here, according to each data type: images, documents, proposals and the database.
• Release Updates and Documentation - here, you are provided with quick access to the What's New
documentation and the release schedule.

SAP CPQ Setup and Administration Guide


10 PUBLIC Administration
• System Errors and Warnings - the graph represents the number of errors and warnings per day for the last
30 days. Click View More to access detailed information in the Log [page 829].
• User Licenses - the total number of user and administrator licenses, the number of currently active users,
and the number of unused licenses are displayed here.

Related Information

Supported Browsers [page 11]

1.2 Supported Browsers

This topic contains the list of browsers currently supported by SAP CPQ.

• The latest version of Google Chrome


• The latest version of Mozilla Firefox
• The latest version of Microsoft Edge
• The latest version of Safari

For SAP CPQ to function properly, enable cookies and Javascript for all browsers.

1.3 System ID (Object Identifier)

Different objects in SAP CPQ have their own unique identifiers or system IDs.

System ID is the identifier for: products, attributes, attribute values, categories, product types, tabs,
configuration templates, details templates, user types, shipping method, global scripts, custom actions,
custom calculations, product-level scripts, and responsive design templates.

 Note

System ID is required when creating global scripts, custom actions, custom calculations, product-level
scripts and responsive design templates, both in Setup and via API. It is automatically generated when one
of these entities is created in Setup, and it needs to be provided when they are created via API.

System ID is one of the fields that are displayed when you add or edit an existing object. It’s displayed under
the name field or next to it (such as the Attribute Value form). System ID is created automatically based on the
name that you type in the name field. As soon as you finish typing and leave the name field, either by clicking
elsewhere or by pressing Tab on the keyboard, the System ID field is populated with the value that is unique for
this entity. System ID is constructed by replacing the spaces in the entity name with underscores and adding
the suffix _cpq at the end. For example, if you create product with name Product One, SAP CPQ creates
the system ID with value Product_One_cpq. If this value is already assigned to another product, SAP CPQ
attempts to create Product_One_1_cpq, then Product_One_2_cpq, and so on.

SAP CPQ Setup and Administration Guide


Administration PUBLIC 11
System ID can be modified. However, if you edit an object, the system ID is displayed as read-only. In order
to make it editable, click Edit. This action makes the field editable, but displays a warning message as well. If
you try to change the system ID and it happens that the same system ID already exists, an error message is
displayed.

• For attribute values, the system ID is created based on the attribute value code (not display value) +
attribute name.
• During product export, the column Product System ID is added to the Microsoft Excel file.
• During product import, the system decides, based on the Product System ID column, whether the product
is going to be updated or created. If the column has a value for the particular product, the product is going
to be created if the system ID doesn’t exist in the SAP CPQ, or updated if it already exists. If the column is
missing or it’s empty, SAP CPQ assigns a system ID to the product the same way as if the administrator
created the product manually.
• When products, attributes, attribute values, categories, product types, tabs, configuration templates,
details templates, user types, shipping methods, global scripts, custom actions, custom calculations,
product-level scripts, or Responsive Design templates are deployed/sent to other environments, their
system ID remains the same. If an entity with several versions is deployed to another environment, all
versions will have the same system ID, and the entity can be filtered according to the creation dates of its
versions.

1.4 SAP CPQ Tenant URL

Due to the effort to make the SAP CPQ infrastructure more flexible and to improve the overall agility and
resilience of the system, the format of the SAP CPQ URL needs to be changed.

The new tenant-specific URL format will be an improvement over the current URL format, providing you with
the following benefits:

• An SAP-wide standard URL format that will facilitate integrations and third-party cookies
• Improved bookmarking
• Faster login
• An easy way to see which tenant you are using
• DC-agnostic URL format (stable in case of tenant moving)
• An easier way to configure SSO per tenant (the limitation for the IDP-initiated scenario is removed)

New URLs will contain the tenant name and end with cpq.cloud.sap (for example, https://
domainName.cpq.cloud.sap). It is possible that the domainName in the URL will be slightly different from
the actual tenant name in order to standardize the format and make it unique globally, although in the majority
of cases it will remain the same.

You can double-check whether the new URL format is set up in your tenant in the Setup Home page. If the new
URL is set up, it will be displayed in the top left corner.

SAP CPQ Setup and Administration Guide


12 PUBLIC Administration
What to do when you get the tenant-specific URL

Once the tenant URL is enabled, you need to make changes in the system to avoid breaking changes. Check the
section Tenant URL Migration to find out what you need to adjust in SAP CPQ and learn how to do it.

In addition to preventing the breaking changes, once the tenant URL is enabled, you will need to switch
from using the old URL to using the new URL. The final deadline for switching to the new URL completely
is July 31, 2023. Up to that point, you can adjust to the new tenant URL at your own pace, by managing

SAP CPQ Setup and Administration Guide


Administration PUBLIC 13
the application parameter Tenant URL Mode, which is located in Setup General Application Parameters
General Parameters . The parameter can be set to the following three modes:

• Allow Old URL – when this setting is selected, you can use both the existing environment URL and the new
tenant URL interchangeably.
• Allow Old URL with Warning – when this setting is selected, you can use both the existing environment URL
and the new tenant URL interchangeably, but every time the old environment URL is used, a warning will be
recorded in the Log, informing you about the occurrence where the old URL needs to be replaced with the
new one. Warnings will be recorded in the Log every time user login is performed, which includes logging in
via the login page, federated single sign-on, SOAP APIs, receiving tokens for APIs, and so on.
• Forbid Old URL – when this setting is selected, you can access SAP CPQ only via the new tenant URL. The
old environment URL can no longer be used if this option is selected. This is the default value for all new
tenants.

When the tenant URL is enabled for you, the parameter will first be set to Allow Old URL. After the users and
administrators of SAP CPQ have been instructed to switch to using the new URL, you will need to change
the parameter to the Allow Old URL with Warning mode. Note that the end users of SAP CPQ will need to be
informed about updating their personal bookmarks. Once you have done that, you will be able to track every
use of the old environment URL in the Log, which will allow you to rectify these situations. For example, if you
forgot to replace the old URL with the tenant URL in the settings of an integration during the migration phase,
the logged warning will inform you about that issue and you will be able to resolve it.

 Note

Records in the Log aren’t permanently retained, which is why we recommend that you regularly track the
use of the environment URL.

Finally, once you have successfully adapted to the new URL and warnings are no longer appearing in the log,
you need to switch the parameter mode to Forbid Old URL. This should be done no later than July 31, 2023.

Tenant URL Migration

Learn how to adjust your environment to use the tenant URL instead of environment URL.

Login, Registration and Lost Password


Since the URL is tenant specific, it’s no longer necessary to type in the domain when you log in, register, and
request the password reset. No action is needed from your side. Additionally, all relevant emails will no longer
contain the domain name.

Federation Module
To avoid breaking changes, administrators need to download the SAP CPQ metadata file and upload it to their
identity provider.

1. Open SAP CPQ using the tenant URL.


2. Go to Providers Federation Settings .
3. Click Download SAP CPQ metadata with selected certificates.
4. Upload the file to your identity provider.

Make sure that you don’t make any other changes, all other settings should stay unchanged.

SAP CPQ Setup and Administration Guide


14 PUBLIC Administration
Deploy/Send Changes
Delete the current environment and add it again so that tenant URL is picked up.

Edit the connected environment, replace the old with the new tenant specific URL. Select Tenant URL to disable
the domain field.

Make these changes in both the source and the target environment.

Guest User
Users who are logging in using their credentials no longer need to enter the domain in the login page.

The direct link for guest user access has changed:

Old Link New Link

{environment_url} /mt/domain_name {tenant_url}/guest

Certificate Management
Existing certificates are valid after you migrate to tenant URL. You don’t need to delete or update them.
However, if in your models you are relying on the URL from the certificate issuer, then you need to generate a
new certificate which will contain the new URL. That way you will ensure uninterrupted work.

REST and SOAP API Authentication


When using tenant URL, you don’t need to send the domain in the payload. But if you do send it, SAP CPQ will
ignore it and work as expected. However, for maximum capabilities, we advise you to remove the domain from
the payloads.

Set the parameter Tenant URL Mode to Allow Old URL with Warning. Check the Log for warnings. Replace the
URLs in the requests and remove the domain.

Hardcoded URL
If you’ve hardcoded the SAP CPQ URL in scripts, email notifications and document generation templates, make
sure you replace the link with the new tenant URL link.

IP Address Whitelisting
If you have previously whitelisted the SAP CPQ IP address, note that the new URL has another IP address,
which needs to be whitelisted, too. You can check if your current URL is whitelisted by opening the command
prompt and pinging the current URL.

Integrations
If in the configuration of any integration you had to specify the SAP CPQ domain, you no longer need to do that.
The system has been adapted for this change and the field for entering the domain has been removed from the
user interface.

 Note

Wherever you’ve used the old URL, you now need to replace it with the new SAP CPQ tenant URL. Make
sure to revise your models and make updates of the URL where needed.

Below are detailed instructions for specific adjustments that you need to make for various integrated systems.

SAP CPQ Setup and Administration Guide


Administration PUBLIC 15
AdobeSign

On the AdobeSign side, go to API Acrobat Sign API Configure OAuth for Application . Update the field
Redirect URL by replacing the old environment URL with the new tenant URL.

AdobeSign Integration Documentation

DocuSign

On the DocuSign side, go to Settings Apps and Keys Actions Edit Additional Settings
Redirect URLs . Update the redirect URL to the following format: {tenantUrl}/admin/
DocuSignAuthentication.aspx, where the {tenantUrl} is the new tenant URL of your SAP CPQ
environment.

DocuSign Integration Documentation

Oracle NetSuite CRM

Log in to Oracle NetSuite CRM. Go to Setup Integration SuiteSignOn . Open the existing settings and
in the Connection Points tab, replace the old URL with your new tenant URL. Additionally, remove the domain
name.

Oracle NetSuite Integration Documentation

MS Dynamics CRM
Update the script in step 5 in the section Customize SAP CPQ Quote form by replacing this code:

var newquoteurl = "https://sandbox.webcomcpq.com/sso/mscrm.aspx?


domain_name=sap&userId="+userId+"&typename=opportunity&id="+oppId;

with this:

var newquoteurl = " https://domainName.cpq.cloud.sap /sso/mscrm.aspx?


userId="+userId+"&typename=opportunity&id="+oppId;

In the CRM Setup, under the URL field, replace the existing URL with the new tenant URL (https://
domainName.cpq.cloud.sap/sso/mscrm.aspx) and remove the SAP CPQ domain. You should perform
the same steps for CRM 4.0.

Toolset for Developing Custom CRM Integrations


If you have developed your own custom CRM integration using the provided toolset, you need to modify the
APIs used for the integration so that SAP CPQ is called using the new tenant URL.

SAP Cloud for Customer


The instructions below apply to integration for both Quote 1.0 and Quote 2.0.

Log in the environment with the tenant URL enabled and go to Providers SAP Integrations SAP Cloud for
Customer . Copy the landing URL from this page and replace the old one with it in SAP Cloud for Customer.
The path in SAP Cloud for Customer is explained in the documentation.

SAP Cloud Integration


For all integrated systems that communicate using the SAP Cloud Integration, you need to update the receiver
URL.

SAP CPQ Setup and Administration Guide


16 PUBLIC Administration
In SAP Cloud Integration, go to the Receiver tab and in SAP CPQ host enter the tenant URL, for example
https://domainName.cpq.cloud.sap.

SAP Cloud Platform Identity Provisioning Service Integration


In SAP Cloud Platform Identity Provisioning Service, open the Properties tab and remove the # character
followed by the SAP CPQ tenant name. This should be done wherever SAP CPQ environment is set up, in both
source and target systems.

SAP Cloud Platform Identity Provisoning Service Integration Documentation

Salesforce
Go to your Salesforce environment and replace the existing SAP CPQ environment URL with the new tenant
URL in Custom Metadata Type and in Remote Site Settings.

Salesforce Integration Documentation

Known Issues
There are two known issues that may be experienced when using the new tenant URL. These issues will be
resolved with the deployment of the 2305 release. However, up to that point, workarounds have been provided:

• The SAP CPQ SOAP API allows authentication using client certificates. In that case, the name of the
domain is passed in the request header. However, if the domain name is removed from the request header,
the API will not recognize the new tenant URL.
Workaround: if you are using client certificate authentication for the SAP CPQ SOAP API, make sure that
you do not remove the domain name from the request header.
• If you are using the new tenant URL and federated single sign-on, and the option SignOut is set to
Federated, a known issue can occur. Namely, once you sign into SAP CPQ via federation and then sign out,
a sign-out request is sent to the Identity Provider, and the subsequent response will log you out of SAP
CPQ. Following that, SAP CPQ triggers another sign-in request and redirects you to the login page of the
Identity Provider. However, if you log in at that point, you will be redirected to the old environment URL
instead of the new tenant URL.
Workaround: in this specific scenario, you will need to trigger the sign-on request from the Identity Provider
again, but using the tenant URL instead of the environment URL.

SAP CPQ Setup and Administration Guide


Administration PUBLIC 17
2 Product Administration

The following topics explain the administration of products and attributes in the SAP CPQ Setup.

Attributes [page 19]


Attributes provide users with additional preferences they can choose from when configuring products
to be added to a quote.

Products [page 54]


The Products administrative section allows setting up new and editing the existing products.

Guided Selling [page 95]


Guided Selling is an automated Catalog filtering process which helps sales representatives easily find
products matching their needs by narrowing down the products in a category based on their attribute
value selections.

Categories [page 98]


Categories and subcategories are used to logically group products in the Catalog according to specific
criteria.

Product Types [page 100]


Product Types can be used in tracking quotation and order information. You can also separate subtotals
in the quote for each product type, which gives users the ability to use different discounts for different
product types.

Sequence Substitution [page 101]


Part numbers can become lengthy and sometimes need to be limited in length by the underlining
business systems (ERP). Because of this, there’s a need to serialize an entire part number. or a part
of it. Intelligent Serialization implies that a part number can be serialized while preserving the part
number logic; hence the same configuration always yields the same serial number.

Creating Favorites Permissions [page 101]


Create Favorites Permissions enables you to limit users who are permitted to share Favorites.

Custom Tables [page 102]


SAP CPQ allows the use of data from nonstandard tables during the configuration process. Adding,
editing, and deleting tables along with their entries is done through Custom Tables.

Messages in Product Configuration [page 107]


Messages can be displayed to users either in the Configurator (for example, in attribute labels) or in
the Responder. They’re also used for enforcing product business rules because, if displayed, they can
render product incomplete.

Sequences [page 107]


Sequences are typically used in constructing part numbers where an entire part number or a portion of
a part number is serialized.

SAP CPQ Setup and Administration Guide


18 PUBLIC Product Administration
2.1 Attributes

Attributes provide users with additional preferences they can choose from when configuring products to be
added to a quote.

For example, if the configurable product is a Desktop Computer, its attributes can be RAM Memory, Hard Drive
and Processor. Attributes usually contain values. In the case of the RAM Memory attribute, the values can be
32GB and 64GB (one value can be selected here, but in some cases multiple choice is possible). In short, you
can select a specific set of characteristics for the product before adding it to a quote

Attributes are most commonly used for product characteristics, but apart from that, they can be used for:

• Calculations – formulas can be added as attribute values to perform calculations separate from the
Responder.
• Free input by the user – users can populate attribute values in the Configurator.
• Display of text to the user – certain information added to attribute values during attribute creation can be
displayed to users in the Configurator.

Attributes can be created, edited, copied and viewed in Setup Product Catalog Attributes . Here, you
can see the list of all existing attributes in the system. Attributes can also be created in the Attributes tab during
editing or creation of a configurable product. In both sections you can create one attribute at a time. If you wish
to import multiple attributes at once, you can do so in the Import/Export Setup section.

Create Attributes (General Procedure) [page 20]


Initial four steps for creating attributes are the same for all attribute types and they are described in the
following procedure. Step 5 is used for creation of all attribute types except containers, autocomplete
and measurement attributes.

Create Attribute (General Fields) [page 20]


This table contains description of general fields that should be populated when creating or editing each
attribute type.

Attribute Types [page 22]


There are several attribute types you can choose from when creating an attribute.

Basic Scripting Elements for Attributes [page 42]


This section contains information on how you can use IronPython scripts to control the appearance
and behavior of attributes in certain situations.

Attribute Quantity [page 45]


Attribute quantity and its values can be managed in multiple ways.

Import/Export Attribute Translations [page 50]


To translate multiple attributes via one Microsoft Excel file, you can export individual attributes or an
entire attribute type, update attribute translations in the resulting Microsoft Excel file, and import the
file back to SAP CPQ.

Attribute Import [page 51]


In the Attribute Import page, you can export/import attributes in several ways.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 19
2.1.1 Create Attributes (General Procedure)

Initial four steps for creating attributes are the same for all attribute types and they are described in the
following procedure. Step 5 is used for creation of all attribute types except containers, autocomplete and
measurement attributes.

Procedure

1. Go to Setup Product Catalog Attributes .


2. Click Add New Attribute.
3. Fill in the fields above Attribute Type.

Use this table [page 20] as a reference.


4. Select the attribute type from the Attribute Type dropdown.

The creation procedures for container, autocomplete and measurement attributes have different steps
from other attribute types. If those are attribute types you're creating, follow one of these procedures:

• Create Container Attributes [page 23]


• Create Autocomplete Attributes [page 33]
• Create Measurement Attributes [page 36]

If not, proceed with the following step.


5. Use products as a source of values or enter the values manually.

• Click Add Products as Values and select products you wish to use from the table that pops up.
• Populate the Value and Value Code for as many rows as you need for the attribute.
The Add Values button is used for adding additional rows.

You can use Ranking to arrange the order in which attribute values are displayed in the Configurator.

Related Information

Create Attribute (General Fields) [page 20]

2.1.2 Create Attribute (General Fields)

This table contains description of general fields that should be populated when creating or editing each
attribute type.

Attribute Name Required field that should contain the name under which
the attribute is going to be displayed to the user.

SAP CPQ Setup and Administration Guide


20 PUBLIC Product Administration
System ID Automatically populated according to the value entered
in the Attribute Name field. If an identical attribute
system ID already exists within the system, “_1” is added
automatically at the end of the generated value, as it needs
to be unique.

Attribute External ID It allows you to create another attribute identifier


independent of SAP CPQ IDs.

The field is populated with the logic from a client’s external


system, so it will not be checked by SAP CPQ.

It is impossible to access the value of this field with SAP


CPQ tags and it does not need to be unique.

Attribute Type Refer to Attribute Types [page 22] for more information.

Check if attribute is in use See which products currently reference this attribute. This
button isn't interactive when a new attribute is created,
since it isn't yet in use.

 Note
Rules that are created before the 2208 release and use
CTX tags are not displayed on the Check if attribute is
in use list. As a workaround, open the rule that has the
CTX tag and save it again without making any changes.
After this, the rule should be visible on the list of used
attributes.

Contains Personally Identifiable Information By selecting this checkbox, you confirm that the
information [page 804] in the attribute can be used
to identify an individual uniquely (passport number,
for example), or that the information can be used
in combination with other information to recognize an
individual (for example, race and date of birth).

Suppress Information Logging The toggle can be activated only if the Contains Personally
Identifiable Information toggle is active. By activating it you
confirm that the attribute contains information whose old
and new values shouldn't be logged, as the unauthorized
acquisition could be harmful to the concerned individual.

Related Information

Create Attributes (General Procedure) [page 20]


Product Attributes Tab [page 60]
Attributes [page 19]
Attribute Types [page 22]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 21
2.1.3 Attribute Types

There are several attribute types you can choose from when creating an attribute.

• Container [page 22]


• Autocomplete - sourced from a custom table [page 32]
• Autocomplete - sourced from a quote table [page 32]
• Measurement [page 35]
• User Selection [page 36]
• User Selection with Attribute Quantity Input [page 37]
• User Selection w/ Quantity Inputs for each Attribute Value [page 38]
• User Input or Computed - Date [page 38]
• User Input or Computed - Number [page 38]
• User Input or Computed - String [page 38]
• Contract Duration [page 39]
• Billing Cycle [page 41]

2.1.3.1 Container Attributes

This attribute type has a tabular structure which can be dynamically expanded with other attributes
or products. Its columns are defined in Setup, while its rows can be added and deleted during product
configuration.

Container attributes are the most customizable attribute type in SAP CPQ. They are a good choice for
business scenarios in which you need to offer customers a product with multiple options, each one configured
individually. One container attribute can use multiple simple products as source of its values, as well as other
attributes. You can also build formulas for retrieval of values from custom tables.

Create Container Attributes [page 23]


You can create and update container attributes in Setup Product Catalog Attributes . Compared
with other attribute types, these attributes have the most complex creation procedure, which is
performed in several tabs.

Container Rows [page 29]

SAP CPQ Setup and Administration Guide


22 PUBLIC Product Administration
Container rows can be added or deleted during configuration, either manually or by a product rule.
Minimum and maximum numbers of rows that can be added are defined in Setup. Users need to select
one product per a row.

Containers and IronPython Events [page 30]


There are four available Iron Python events when editing a product attribute in the Manage Container
Events panel of the Attributes tab in a product.

Example Container Attribute [page 30]


Here, you can see how a complex product such as a computer system with several configurable parts
can be created with container attributes.

2.1.3.1.1 Create Container Attributes

You can create and update container attributes in Setup Product Catalog Attributes . Compared with
other attribute types, these attributes have the most complex creation procedure, which is performed in
several tabs.

Prerequisites

Follow the first four steps of the common attribute creation procedure [page 20].

Procedure

1. Select Container from the Attribute Type dropdown.

The Container Settings panel displays below.

The General, Columns, Properties and Actions tabs display.


2. Fill in the fields in the General tab [page 24] to establish some general characteristics the container will
have.
3. Move on to the Columns tab [page 25] and create as many columns as required.
4. (Optional) Move on to the Properties tab [page 27] and create properties with calculations which will be
applied during configuration.
5. (Optional) Move on to the Actions tab [page 28] and select which actions will be available to users during
configuration.
6. (Optional) Move on to the Validation tab [page 29] and add rules which determine what can and can’t be
done during configuration.
7. Click Save.

The attribute is created.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 23
Related Information

Container Attributes [page 22]

2.1.3.1.1.1 General Tab

The container will use No products - The container does not reference any
products, but its columns can reference other attributes.

Selected products – The container references the


selected products which are displayed as rows in
the Configurator. You can define the maximum number of
times users can add new rows in the Configurator, as well
as the minimum number of rows which need to be filled to
complete the product configuration.

Products looked up by their part number –


If selected, product part numbers can be looked up from
the Configurator, to extract values from the products
they belong to. In the Columns tab, you need to add a Stand-
alone Column with the Selector Check Box display type. Also,
you need to add the Product Part Number column and select
one of the two display types:

• Text Box – if you wish a user to enter a part


number manually during configuration
• Label – if you wish to use rules or scripts to
populate the column with product part numbers.

 Note
Only simple products can be looked up by their part
numbers.

Enable Paging for Container Breaks down the extensive number of rows added during
configuration into several pages.

Default number of rows per container page Determines the number of rows displayed per a page by
default (can be edited by users during configuration).

Min Container Rows The minimum number of rows that need to be added during
configuration.

Max Container Rows The maximum number of rows that can be added during
configuration.

SAP CPQ Setup and Administration Guide


24 PUBLIC Product Administration
2.1.3.1.1.2 Columns Tab

In this tab, you define the columns of the container.

To add a new column, go to Setup Product Catalog Attributes Columns tab and click Add
Column. The following options are displayed in the tab:

Name (required) The column name.

Header Label The text which is displayed in the column header.

Footer Label The text displayed below the column. It can be used for
displaying totals of a formula.

Width The column width.

Height The column height. Displays if Multiline is selected


as Display Type.

Total Calculation options:

• Sum
• Average
• Formula

Total Formula The formula which will be applied for calculation of


totals can be entered here or created with Formula Builder.
Displays if Formula is selected in the Total dropdown.

Data Type The format of data (String, Number, Currency and Date).

Column Type • Stand Alone Column – reference values of attributes


which are not a part of the container.
• Product Attribute – can be selected if a container uses
a product as the source of its values.
• Product Part Number – can be selected if a product
part number is used for retrieving a product during
configuration.

Display Type The visual appearance of input fields. The available choices
are Label, TextBox, CheckBox, DropDown, SelectList, RadioB
utton, Multiline, Selector Radio Button, Selector Check Box, A
utocomplete With Custom Table, Autocomplete With Quote T
able.

Only Label and TextBox are displayed if


the Column Type is Product Part Number.

Decimal Places (required) The number of decimal places of entered values. Displays if
Number or Currency are selected in Data Type.

Attribute (required) The attribute as a source of values referenced by the


container. You can also select which of its values you wish to
use. It displays if you:

• select Product Attribute as the Column Type.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 25
• select CheckBox, DropDown, SelectList, RadioButton, A
utocomplete With Custom Table or Autocomplete With Q
uote Table as Display Type.

Once you select the attribute, a popup


window containing that attribute’s values displays. You need
to select at least one value.

 Note
If you select the Product Attribute column type, you
can't change the attribute values that will be displayed
to users, as their visibility is determined by the
product's settings. If you wish the column to reference
some values of an attribute, but not all of them, you
can opt for the Stand-alone Column type and one of the
display types listed above.

Calculation Formula Used for automatic evaluation of column value. Enter the
formula or construct one with the Formula Builder.

Example: An administrator defines columns First Name, Last


Name with Text Box as display type, the column Full
Name with Label as its display type and uses the following
calculation
formula: <*CTX(MyContainer.CurrentRow.Colum
n(First
Name).Get)*><*CTX(MyContainer.CurrentRow
.Column(Last Name).Get)*>. The administrator
adds another column Date Added (Text Box) with the
following calculation formula: <*CTX(Date)*>. The Full
Name column value is updated every time when the values
of First Name or Last Name columns are changed, while Date
Added is calculated only when a row is added.

Always include in KO context Used for exposing a hidden column in knockout context if
some information stored within needs to be sent through
a JSON file via the HTTP response. Activating this toggle
switch does not make the column visible to end users.
Applicable in responsive design only.

These properties become available:

• columnId – Id of the hidden column


• headerLabel – label of the hidden column
• value – value of the hidden column

Contains Personally Identifiable Information Information that can be used to identify an individual
uniquely [page 804] (passport number), or information
that can be used in combination with other information to
recognize an individual (for example, race and date of birth)

SAP CPQ Setup and Administration Guide


26 PUBLIC Product Administration
Suppress Information Logging Prevent logging of old and new values in the Audit Trail,
as the unauthorized acquisition could be harmful to the
concerned individual. The toggle can be activated only
if the Contains Personally Identifiable Information toggle is
active.

Once you define a column, you can edit permissions that user types and permission groups will have during
configuration.

Column Permissions

In this section, you can select the permissions which will be applied to the columns depending on the
user types and permission groups users belong to. If you enable the Same permission for all Permission
Groups toggle switch, all users will see the column in the same way. However, if you deselect the toggle switch,
you have more freedom in assignment of different column rights to different user types and permission groups.

You can choose between the following permission types:

• Editable – users can edit the fields within the column.


• Read-only – users can only view the contents of the column.
• Required – users can’t complete the configuration before making changes to the contents of the column.
• Hidden – users can’t see the column at all.

2.1.3.1.1.3 Properties Tab

Properties are useful if you wish to reference a parent product from a container via rules, rather than
referencing the parent product from the container manually, when creating a container.

You can set a property from a rule in parent products and then use that property inside the container.

Create a New Property [page 27]


To create a property, follow the procedure in this topic.

2.1.3.1.1.3.1 Create a New Property

To create a property, follow the procedure in this topic.

Procedure

1. Click Add New Property.

A popup window displays.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 27
2. In the Name (required) field enter the name of the property.
3. In the Calculation Formula field, enter a formula or use the Formula Builder to create one.

The formula will be evaluated on each configuration modification. You can also leave the calculation
formula empty and apply container property from a parent product rule with a CTX tag.
4. In the Data Type (required) select one of the following: String, Number, Currency or Date.

If you select Number or Date, enter the number of decimal places the property will contain.
5. Enable the Include in JSON toggle switch if you wish it to be available in knockout context, so it can be sent
through a JSON file via the HTTP response.

Next Steps

Once you add properties, you can edit their ranks by clicking the Ranking button. The Rank popup
window displays, and you can drag and drop available properties in any order you wish.

2.1.3.1.1.4 Actions Tab

Here, you can enable actions that can be executed on container rows in the Configurator.

Global Actions

• Add a New Row


• Open a New Configurator - If two or more products are referenced by the container, when users add a
row, they will be prompted to select which product they wish to configure first. If this action is enabled, each
product will be configured in a separate configurator. After users finish configuration of one product, they
can click Save and move on to the next one.

 Note

During configuration of a container row in its separate configurator, rules of the parent product are
executed along with the rules of the row product.

Row Actions

• Delete a Row
• Copy a Row
• Allow Multiple Copies - Users can choose how many copies of rows can be created and select which fields/
columns will be copied.

SAP CPQ Setup and Administration Guide


28 PUBLIC Product Administration
• Reorder Rows
• Edit a Row - Users can configure the row product in the same way as if it was opened from
the Catalog. They can edit more attributes, not just the ones visible from the container columns.

2.1.3.1.1.5 Validation Tab

You can add rules which determine what can and can’t be done during configuration. If a validation rule is
violated, its message is displayed below the container.

For example, you can check whether the container is valid (that it contains properly entered or selected
values) by entering the <*CTX( Container(AttributeContainerName).IsValid )*> tag in Validation
Formula and when the rule is applied, the container validity will be checked once it is configured.

Create Validation Rules [page 29]


This topic contains the procedure for creating new validation rules.

2.1.3.1.1.5.1 Create Validation Rules

This topic contains the procedure for creating new validation rules.

Procedure

1. Click Add New Rule.

The fields that need to be populated display in a popup.


2. Enter the rule name in the Name field.
3. Enter the message that will display if the rule is broken.
4. Use the Formula Builder to construct a formula in the Validation Formula field.
5. Click Save Rule.

2.1.3.1.2 Container Rows

Container rows can be added or deleted during configuration, either manually or by a product rule. Minimum
and maximum numbers of rows that can be added are defined in Setup. Users need to select one product per a
row.

If there are no products in the container, or if there is just one, you can use the following tag in product rules to
add a row:

Container(Container Name).Rows.Add(1)

1 is the number of rows that will be added.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 29
If there are several products in a container, the following tag should be used in product rules:

Container(Container Name).Product(Product Name).Add(2).

Related Information

Container Attributes [page 22]


Create Container Attributes [page 23]
Product Configuration

2.1.3.1.3 Containers and IronPython Events


There are four available Iron Python events when editing a product attribute in the Manage Container
Events panel of the Attributes tab in a product.

When certain actions are performed in a container, the following events are triggered:

• Script on row added (onRowAdded) – executes when a user adds a new row.
• Script on row copied (onRowCopied) – executes when the existing row is copied.
• Script on row deleted (onRowDeleted) – executes when a row is deleted from the container.
• Script on row edited (onCellEdited) – executes when the cell content is updated .

These events are triggered only on user interaction. If a container is altered via another script (such as
adding a new row via Iron Python scripts), the events will not be triggered. For more information on available
contexts and arguments check this scripting help page.

2.1.3.1.4 Example Container Attribute


Here, you can see how a complex product such as a computer system with several configurable parts can be
created with container attributes.

If you want to give users an option to customize a complex product, such as a computer with several
configurable parts, you can do so by creating several User Selection attributes, which you will later store in a
single container attribute. For example, you can create a user selection attribute Operating System which will be
sold with the computer and add values such as Windows 7 and Windows 10 to it.

SAP CPQ Setup and Administration Guide


30 PUBLIC Product Administration
You can add more user selection attributes such as Computer Type, Manufacturer, Model and so on.

All of these attributes can then be stored into a container attribute as columns in the Configurator (user side).
This is done in the Columns tab of a container attribute.

 Note

The selected column type is Stand-alone Column and the display type is DropDown in this example.

Each of the attribute values you select will be displayed in rows in the Configurator, in the form of a dropdown
list, for example.

Next, you need to establish according to which criteria you want the product to be priced. In this example,
we’ve added a Price column to the container attribute, which calculates the product price according to the
Term users select during configuration (for example, 12 months). To establish the pricing mechanism which
calculates the price according to the term, we’ve added the following CTX tag into the calculation formula while
setting up the Price column:

<*EVAL(<*CTX( MyContainer.CurrentRow.Column(Term).Get )*>* 20)*>

This tag multiplies each term by $20 for a monthly support fee per a computer.

After this is done, you can add the container attribute to the configurable product of your choice. It’s important
to add the pricing mechanism to the product, as well, to make sure the tag you’ve supplied during container
attribute creation works in the Configurator. This is done in the Pricing tab during the product creation.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 31
The CTX tag structure which should be added here to apply the pricing mechanism from the container
attribute is:

<*CTX( Container(ContainerAttributeName).Sum(Price) )*>

Once all of this is done, the product configuration should be displayed like this in the Configurator:

2.1.3.2 Autocomplete Attributes


Autocomplete attributes are a good choice if you wish to import attribute values from custom tables (in both
Classic and Responsive Design) or quote tables (in Responsive Design only).

You should choose this attribute type if you want to have values coming from other systems (CRM) and if they
are stored in custom/quote tables in SAP CPQ.

SAP CPQ Setup and Administration Guide


32 PUBLIC Product Administration
They are called autocomplete because when you start typing in the attribute textbox in the Configurator,
matching results are displayed in the dropdown list. The creation process of both types of autocomplete
attribute is almost identical.

Create Autocomplete Attributes [page 33]


Autocomplete attributes sourced from either custm or quote tables are created in a relatively similar
way. The procedure contains steps for creating both types.

Autocomplete Attributes Field Explanation [page 34]


This table contains description of fields and options that you should populate when creating the
autocomplete attribute type.

Example Autocomplete Attribute [page 34]


Here, you can see an example of an autocomplete attribute sourced from a custom table.

2.1.3.2.1 Create Autocomplete Attributes

Autocomplete attributes sourced from either custm or quote tables are created in a relatively similar way. The
procedure contains steps for creating both types.

Prerequisites

Complete the first four steps of the common attribute creation procedure [page 20].

Procedure

1. Select Autocomplete – sourced from a quote table or Autocomplete – sourced from a custom
table in Attribute Type dropdown.

The fields common for this attribute type are displayed.


2. Fill in the fields as explained in the table [page 34] .

Once you select a quote table or a custom table as a source, its columns display in Columns.
3. Place these columns in Selected Searchable Columns, Display Label, Selected Display
Columns and Selected Column Value Code by clicking arrows next to each one of them.
4. Click Save.

The attribute is now created.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 33
2.1.3.2.2 Autocomplete Attributes Field Explanation

This table contains description of fields and options that you should populate when creating the autocomplete
attribute type.

Custom Table/Quote Table Choose either a custom table or a quote table as a source
of attribute values. Quote tables are only supported by
the Responsive Design, so Classic Design users can't
select them as a source for autocomplete attributes.

Preselection Filter Use it to reduce the number of attribute values retrieved


from the table. You should use the Formula Builder to
construct SQL statements according to which the values
can be retrieved. The filter is especially useful for attribute
values sourced from custom tables, as there may be
extensive attribute values stored in the custom table. Tags
starting with Quote.CurrentItem are not supported in
the preselection filters for autocomplete attributes.

Show Only Distinct Values (displays if a custom table is used Applicable if the same column is added to Display
as the attribute source) Column box and the Column Value Code. If this checkbox
is selected, the system does not retrieve duplicate values
from a column and only distinct values are displayed to
users.

Searchable (max 4) The values of columns you select can be looked up in the
dropdown search box in the Configurator.

Search Placeholder Text Once you tick a box in the Searchable (4) column, the
corresponding cell in the Search Placeholder Text column is
automatically populated with the text from Column Name.
You can fill in with the textual value you wish to be displayed
in the Configurator instead of the existing column name.

Display (max 4) When users search for a value from a searchable


column, the value from the selected display column that
corresponds to it is displayed next to it in the dropdown
search box in the Configurator.

Column value code Values of the column you select in this field are exposed for
use in scripts and formulas.

Example: If the table from which the attribute is sourced has


prices as values of one of its columns, that column can be
selected in this field for building a pricing formula which will
later be applied in a quote.

2.1.3.2.3 Example Autocomplete Attribute

Here, you can see an example of an autocomplete attribute sourced from a custom table.

There is a product Phone Case to which we wish to add an attribute. We can use a custom table
as a source to create an autocomplete attribute Decoration that has Price and Design columns. The Price column
should contain price values which correspond to the design value in the same row. After that,

SAP CPQ Setup and Administration Guide


34 PUBLIC Product Administration
we can add the attribute to the product Phone Case. If we select Design (with values such as Golden
Brown, Matte, Punks and so on) as a both a searchable and a display column, and add the Price column as
the Column Value Code, the product will appear like this in the Configurator:

The Price column was selected in the Column Value Code and its values were exposed in construction of a
pricing formula in the Products Phone Case Pricing tab:

This ensures that the Price column values are used for the pricing mechanism in the product configuration. For
each selected value in the dropdown, a corresponding price appears in the Configurator.

2.1.3.3 Measurement Attributes

These attributes can be used for displaying values of measurement types which were previously defined in
Setup Product Catalog Unit of Measurement .

You can use this attribute type when you wish to give users an option of configuring measurable aspects of a
product, such as cable length, for example.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 35
2.1.3.3.1 Create Measurement Attributes

Prerequisites

• Add a unit of measurement [page 92] which is going to be associated with the values you add for this
attribute.
• Complete the common attribute creation procedure [page 20].

Procedure

1. Select Measurement in the Attribute Type dropdown.


2. In the Unit of Measurement dropdown, select the one unit for which you wish to add the attribute values.
3. Click the Add Values button and select the number of rows you wish to use.

A table displays.
4. Enter the Value and Value Code for each row.

The Value System ID will be generated automatically, according to the value you’ve entered.
5. Click Save.

2.1.3.4 User Selection

By selecting the attribute type User Selection, you create an attribute with a list of selectable values. This
attribute type can also be used for calculations and other uses for attributes if you prefer that it not be
restricted to any specific data type.

User selection is a commonly used attribute type which doesn’t have any specific limitations and can be used
in a variety of scenarios. The simplest scenario is for the user to select one or more attribute values in the
Configurator. For example, a configurable product that is a computer system can have an attribute Operating
System, with a list of selectable values representing specific systems. The attribute type used for that attribute
would be User Selection. Depending on the business specifics, different display types can be set for this
attribute on the product level: for example, Dropdown or Radio Button types allow selecting only one value,
while Checkbox allows selecting multiple values.

With this attribute type, the user can’t change the attribute quantity in the configuration. Instead, attribute
quantity is inherited from the main item. For example, if an operating system is selected for the product
Computer System with the product quantity set to 50, 50 computers will be ordered with 50 licenses for the
selected operating system). To enter a specific quantity for the attribute value, you need to use the attribute
type User Selection w/ Quantity Inputs for each Attribute Value [page 38].

In addition, the value selected by the user can trigger a product rule, or a formula can be calculated on that
attribute. For example, an attribute may offer a selection between values A and B and selecting the value B can
trigger a product rule causing another attribute to become available. In another example, if a numeric attribute
value is selected by the user, attribute quantity can be multiplied with that number. The selected attribute value
can be used in a formula in or outside that attribute.

SAP CPQ Setup and Administration Guide


36 PUBLIC Product Administration
There are no restrictions for the data type that can be used for the attribute values.

Related Information

Create Attributes (General Procedure) [page 20]


Create Attribute (General Fields) [page 20]

2.1.3.5 User Selection with Attribute Quantity Input

By selecting the attribute type User Selection with Attribute Quantity Input, you create an attribute with a list of
selectable values, and a quantity input field in the Configurator that applies to the entire attribute.

This attribute type is not restricted to any specific attribute display type. In the configurator, the user can only
set the quantity for the entire attribute, and not for individual attribute values. If multiple attribute values are
selected, the quantity of each value becomes equal to the quantity of the attribute.

 Note

The User Can Enter Quantity function can’t be set for this attribute type.

In this example, the product is a computer system, with the attribute Keyboard, and a list of selectable
keyboard types as its attribute values. If the attribute type is User Selection, the quantity selected for the
product is applied to the attribute (if the product quantity is 50, you will order 50 computer system together
with 50 of the selected keyboards). However, if the attribute type is User Selection with Attribute Quantity Input,
the quantity of the keyboards you order is defined in the quantity input field in the configurator. That way, you
are able to order 50 computer systems and 25 keyboards.

However, this attribute type allows you to set the quantity for the entire attribute, but not for the specific
values. For example, if the Keyboard attribute has Checkbox selected as its attribute display type, you are able
to select multiple values (that is, different keyboards). In that case, the quantity for each selected value will
be the same as the quantity set for the entire attribute (by entering the quantity 25 and selecting the values
Keyboard A and Keyboard B, you will order 25 keyboards of each type). If you want to be able to specify a
number for each specific keyboard type, you will need to use the attribute type User Selection w/ Quantity
Inputs for each Attribute Value [page 38], instead.

Related Information

Create Attributes (General Procedure) [page 20]


Create Attribute (General Fields) [page 20]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 37
2.1.3.6 User Selection w/ Quantity Inputs for each
Attribute Value

By selecting the attribute type User Selection w/ Quantity Inputs for each Attribute Value, you create an
attribute with a list of selectable values that each have a quantity input field in the Configurator.

The quantity input field displays only if Check Box is selected as the display type for that attribute on the
product level. The user is able to set the quantity for each attribute value in the Configurator, even when
multiple values are selected.

For example, the product is a computer system, and the attribute is Operating System with the values OS 1
and OS 2. For the purposes of your business, you wish to order 100 computers, but you want 75 of them to be
licensed for the operating system OS 1 and 25 of them to be licensed for OS 2. To achieve that, the attribute
Operating System needs to have the attribute type User Selection w/ Quantity Inputs for each Attribute Value
selected in attribute definition, and the attribute display type Check Box selected on the product level. As a
result, in the configurator, the values for the attribute Operating System will appear as check boxes, and next to
each check box there will be a separate quantity input field.

Related Information

Create Attributes (General Procedure) [page 20]


Create Attribute (General Fields) [page 20]

2.1.3.7 User Input or Computed – Date, Number or String

By selecting the attribute type User Input or Computed (date, number or string), you create an attribute which
can contain the user’s personal input or a calculation. The value entered by the user, or the result of the
calculation, must be in the selected format: date, number, or string.

This attribute type can be matched with various attribute display type, but they can all be matched with the
display type Free Input, no Matching (to select this display type, make sure the attribute has only one value).

 Note

User input attributes can also allow users to upload file attachments if the appropriate display type is
selected on the product level.

Date

The simplest way to use this attribute type is to combine it with the display type Free Input, no Matching and
make sure it only has one value. As a result, in the Configurator, the attribute appears as a date picker.

SAP CPQ Setup and Administration Guide


38 PUBLIC Product Administration
Number

With this attribute type, your user input is limited to numeric values. By selecting the display type Free Input, no
Matching, a user input field appears in the Configurator where you can enter a number as a value.

For example, if the attribute is Number of Monthly Installments, in this field you can specify the number of
installments for your payment. However, if you wish to limit your user to entering numbers of installments
between 1 and 12, you can define this limit for the attribute on the product level, using the fields Valid Input
is From and To. By setting these fields to 1 and 12, the user will not be able to enter 13 as a value in the
Configurator, and if they attempt to do that, a message will appear. That message is also defined by you on the
product level, in the field Custom Range Error Text (for example: Only values between 1 and 12 are allowed).

Fields such as Valid Input is From/To and Custom Range Error Text can also contain formulas if you want them
to retrieve their values from custom tables. That way, these values can be maintained externally, which is useful
if the attribute is used in multiple products, and at some point, you wish to edit the value globally rather than
edit every individual product with that attribute.

String

In the most basic scenario, if this attribute type is combined with the display type Free Input, no Matching, you
can enter any type of string as a value.

Additionally, with the display type Display Only Text, you can create a text that will appear in the configuration.
One way to use this attribute type to create headers in the configurator to separate groups of attributes in
a single tab (if that is the preferred option for your model). For example, your product is a computer system
and has 10 attributes. You wish to separate them into two groups on the same product tab: the former 5 are
hardware, and the latter 5 are software. For that, you will need to create two attributes of the string data type
(one for each header). On the product level, edit the attribute and enter the text you wish to display in the
header in the field Hint (for the first attribute enter the hint Hardware and for the second, Software). Following
that, enable the toggle switch Spans Across Entire Row in Configurator, and in the layout, place the Hardware
header attribute before the 5 hardware attributes, and the Software attributes before the 5 software attributes.

Related Information

Create Attributes (General Procedure) [page 20]


Create Attribute (General Fields) [page 20]

2.1.3.8 Contract Duration Attributes

The Contract Duration attribute should be used to state the length of the contract for a subscription product.

This attribute type inherits all general attribute characteristic. It can be used in product rules and it can affect
the product price. For example, if the contract duration for a product subscription lasts for 1 year, the price is
1000$, and 1800$ for a two-year contract.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 39
Contract Duration is introduced mainly for the SAP CPQ – SAP Billing and Revenue Innovation Management
integration for Quote 2.0. In the integration scenarios, the new attribute is created automatically on all SAP
Billing and Revenue Innovation Management products.

As of the 2011 release, this attribute type can be used outside the SAP CPQ – SAP Billing and Revenue
Innovation Management integration, in other billing scenarios, in both quote engines. In the Quote 2.0 engine,
the attribute values are propagated from the Configurator to the quote, and in the old quote engine, custom
implementations are required to create the connection between the attribute in the Configurator and the quote.

Create Contract Duration Attribute [page 40]


You can create and update contract duration attributes in Setup Product Catalog Attributes .

2.1.3.8.1 Create Contract Duration Attribute

You can create and update contract duration attributes in Setup Product Catalog Attributes .

Prerequisites

Follow the first four steps of the common attribute creation procedure [page 20].

Procedure

1. Select Contract Duration from the Attribute Type dropdown.

Five rows are added.


2. Define the rows:

• Rank – automatically set when rows are added. It can be altered at any time if you click Ranking and
rearrange the values.
• Value – attribute value, displays concatenated with the unit in the Configurator (for example, 1 year).
• Value Code – the value which is retrieved in scripting and formulas.
• Unit – a predefined value (Day, Month and Year).
• Value System ID – the ID of the attribute value, used to match attribute values during the product
deployment process.
3. Click Save.

The attribute is created.

Related Information

Product Attributes Tab [page 60]

SAP CPQ Setup and Administration Guide


40 PUBLIC Product Administration
2.1.3.9 Billing Cycle Attributes

Billing Cycle attribute shows the billing frequency for a subscription product.

Billing Cycle is introduced mainly for the SAP CPQ – SAP Billing and Revenue Innovation Management
integration for Quote 2.0. In the integration scenarios, the new attribute is created automatically on all SAP
Billing and Revenue Innovation Management products.

As of the 2011 release, this attribute type can be used outside the SAP CPQ – SAP Billing and Revenue
Innovation Management integration, in other billing scenarios, in both quote engines. In the Quote 2.0 engine,
the attribute values are propagated from the Configurator to the quote and in the old quote engine, custom
implementations are required to create the connection between the attribute in the Configurator and the quote.

Create Biling Cycle Attribute [page 41]


You can create and update billing cycle attributes in Setup Product Catalog Attributes .

2.1.3.9.1 Create Biling Cycle Attribute

You can create and update billing cycle attributes in Setup Product Catalog Attributes .

Prerequisites

Follow the first four steps of the common attribute creation procedure [page 20].

Procedure

1. Select Biling Cycle from the Attribute Type dropdown.

Five rows are added.


2. Define the rows:

• Rank – automatically set when rows are added. It can be altered at any time if you click Ranking and
rearrange the values.
• Value – attribute value.
• Value Code – the value which is retrieved in scripting and formulas.
• Billing Period - predefined values.
The calendar billing periods start on the first day of a month and end on the last day of the billing
period. The rolling periods start on the day when the contract was made effective and end on the last
day of the billing period. The billing periods are month, quarter, half-year, and year.
• Value System ID – the ID of the attribute value, used to match attribute values during the product
deployment process.
3. Click Save.

The attribute is created.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 41
Related Information

Product Attributes Tab [page 60]

2.1.4 Basic Scripting Elements for Attributes

This section contains information on how you can use IronPython scripts to control the appearance and
behavior of attributes in certain situations.

Controlling Attribute Access Rights via Iron Python [page 42]


Using Iron Python, you can define whether an attribute is read-only, editable, or hidden.

Attaching IronPython Script on Button Attributes [page 44]


The purpose of this feature is to enable administrators to attach an IronPython script on button
attributes. This gives you the option to define a script that is executed when users click the attribute
button. This can include adding rows in the container, selecting attributes, as well as any other
operation associated with attributes.

2.1.4.1 Controlling Attribute Access Rights via Iron Python

Using Iron Python, you can define whether an attribute is read-only, editable, or hidden.

There are three levels of attribute accessibility:

• Read-only – attribute is disabled but it’s possible to set or change attribute value through Iron Python and
regular rules. In other words, the attribute behaves as if it was editable (in its default state), except that the
end user can’t interact with the attribute on the UI.
• Editable – attribute is enabled. This is default state of each attribute
• Hidden – attribute isn’t displayed in the Configurator.

This feature allows administrators to have attributes appear differently to various user types, or become
read-only once the quote reaches a certain status, or have a set of attributes that are read-only for certain
user-types, and so on. The Hidden option in Iron Python is an extension and override of Attribute Visibility
Restrictions that you can define in the Setup. Whatever you configure there’s reflected on the Hidden property
of the attribute, with the ability to be overridden by an Iron Python script.

Example 1

The snippet demonstrates how an Iron Python script can be used to check whether the particular attributes
should be made read-only based on the user-type. The script triggers when the configurator is entered to
configure the product. This

if User.UserType.Name == 'Customer':
Product.Attr("Interior Color").Access = AttributeAccess.ReadOnly

SAP CPQ Setup and Administration Guide


42 PUBLIC Product Administration
Product.Attr("Exterior Color").Access = AttributeAccess.ReadOnly

script checks if SAP CPQ is being accessed by a user that belongs to the user type "Customer". If this is true,
attributes “Interior Color” and “Exterior Color” become read-only. However, if the user doesn’t belong to the
“Customer” user-type, then all the attributes are enabled.

Example 2

In this example, the Iron Python script disables two attributes – “Interior Color” and “Exterior Color” only if the
quote status is Negotiation. The script triggers when the configurator is used to configure the product. When

if Quote is not None:


if Quote.OrderStatus.Name == "Negotiation":
Product.Attr("Interior Color").Access = AttributeAccess.ReadOnly
Product.Attr("Exterior Color").Access = AttributeAccess.ReadOnly

the quote gets its status changed to Negotiation, two attributes get disabled.

Example 3

This example demonstrates how administrators are able to update the attribute value even if the attribute is
marked as read-only. The underlying Iron Python script of the Update value button is as follows:

Product.Attr("Interior Color").Access = AttributeAccess.ReadOnly


Product.Attr("Exterior Color").Access = AttributeAccess.ReadOnly
myAttribute = Product.Attr("Exterior Color")
myAttribute.SelectValue("gray")

Clicking the button updates the attribute-value through scripting even though the attribute is read-only.

Related Information

Attributes [page 19]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 43
2.1.4.2 Attaching IronPython Script on Button Attributes

The purpose of this feature is to enable administrators to attach an IronPython script on button attributes. This
gives you the option to define a script that is executed when users click the attribute button. This can include
adding rows in the container, selecting attributes, as well as any other operation associated with attributes.

Use Case No.1

• In the Configurator, the user clicks the button.


• IronPython script is attached to the button attribute.
• Once the button has been clicked, IP script is executed and other attributes within the Configurator are
populated.

Use Case No. 2

• An attribute is configured as a button in the Product Attributes/Options section of a configurable product.


• An IP script is linked to the attribute.
• The script queries the web and downloads custom information.
• The user clicks the button on the Configurator tab.
• The downloaded information is linked through the same script to other attribute linked to the configurable
product.

Administrators can attach existing global IronPython script on product attributes tab under the product
administration page, when the chosen attribute type is a Button.

If the autocomplete search doesn't find the script you’re looking for, the following message pops up:
Autocomplete search didn’t find any script with this name.

When the autocomplete search locates the script, it’s displayed at the top of the list. Arrow icons become
available for you to navigate and set the execution of the scripts. A Delete icon is also available if you want to
remove the added script.

A magnifying icon is located next to the autocomplete search box. When you click on it, a list of all global scripts
pops up.

The following columns are displayed in the grid of the list:

• Name
• Execution Time
• Code
• Description
• Active
• Modified by

You can search the script by typing the text in each of these columns. You need to select the script by clicking
the Select button. Once you click the Select button, the script is added to the top of the multiple-select list.

SAP CPQ Setup and Administration Guide


44 PUBLIC Product Administration
2.1.5 Attribute Quantity
Attribute quantity and its values can be managed in multiple ways.

Quantity can be entered by a user for an attribute at the attribute level, or at the attribute value level. This is
determined by what the attribute is set as at in the Attribute administration section. Attribute quantity can be
changed by the user in the configuration if the attribute type is either User Selection w/ Quantity Inputs for
each Attribute Value or User Selection w/ Attribute Quantity Input. If User Selection w/ Quantity Inputs for each
Attribute Value is selected as the attribute type, then in the configuration, the user is able to select the quantity
of each attribute value that is selected. So, if multiple attribute values are selected, the user is able to select the
quantity for each one individually. Attributes set as User Selection w/ Quantity Inputs for each Attribute Value
can only be check boxes.

If User Selection w/ Attribute Quantity Input is selected, then in the configuration the user is only able to select
the quantity of the attribute not the quantity of each individual attribute value. If multiple attribute values are
selected, then the quantity of each attribute value changes to equal the quantity of the attribute. With User
Selection w/ Attribute Quantity Input, the Can Enter Quantity function can’t be set.

If the attribute type is User Selection, then the user isn’t able to change attribute quantity in the configuration.
The attribute’s quantity is based on how it either inherits the main item’s quantity or the value entered in the
Attribute Quantity field depending on how you have the attribute set up on the attribute definition page.

Attribute type can be changed for existing attributes in the Attributes administration section. It’s also set when
creating a new attribute in the Attributes tab [page 60] of products.

 Note

Attribute quantity can only be entered after a product that is already selected. The default attribute
quantity can’t be edited globally.

Related Information

Attributes [page 19]

2.1.5.1 ItemQuantity Attribute


A special attribute added to a products configuration named ItemQuantity can be used to control the quantity
of the main item in the cart.

The system looks specifically for the attribute named “ItemQuantity”. This controls not only the main item, but
if any pricing schemes are attached to it, then prices in the cart are affected also. There are a few different ways
that you can use the ItemQuantity attribute:

• You can expose the attribute to the user so that they can pick their quantity, which is then reflected in the
cart. In this situation, you would likely not allow the users to edit the quantity of the main item in the cart.
Quantity for the product would be handled within the configuration.
• Calculate ItemQuantity as a hidden attribute, which then is reflected in the cart. ItemQuantity in this
situation would be based on selections made from the user.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 45
• Calculate pricing base on ItemQuantity, then allow users to edit the quantity in the cart. This situation is
ideal for products that offer discounts when higher quantities are purchased. For example, a product can
cost $5 when buying 1, $9 when buying two, or $13 when buying three. If a user adds the product to the
cart with a quantity of 1, the price is $5. If when in the cart they change the quantity to 2, then the system
passes that new quantity back into the configuration through the ItemQuantity attribute. Because pricing is
based off this attribute, the price of the product changes accordingly.

Related Information

Attributes [page 19]

2.1.5.2 Item Quantity and Attribute Line Item Quantity

Quantity in SAP CPQ can be defined on item level, attribute level, and attribute value level.

ItemQuantity Attribute

To allow defining quantity of product items in the Configurator, you need to add the ItemQuantity attribute to
a product and list it as line item. The attribute is predefined in the tenant when you register. The Quantity field
displays in the Catalog when configuring that product.

In quotes that contain simple products, editable Quantity field displays automatically. You don't need to add the
ItemQuantity attribute to simple products if you don't want to reference it somewhere in the application (for
example, container or for attribute values).

The following scenarios describe how the ItemQuantity attribute is typically handled:

• In the tier pricing model, pricing is based on ItemQuantity, and users are enabled to edit the quantity in
quotes by selecting User Can Enter Quantity. Example: a product costs $15 when buying one, $12 when
buying two, or $8 when buying three. If a user adds the product to a quote with a quantity of 1, the price
is $15. After changing the quantity to 2, the system passes it to the Configurator through the ItemQuantity
attribute. As pricing is based on this attribute, the price of the product changes accordingly to $12.
• You can expose the attribute to users so that they pick the quantity when configuring an item. Each change
of quantity is reflected locally in the quote, not in the Configurator.
• Calculate ItemQuantity via formulas as a hidden attribute. The formula is based on other selections a user
makes in SAP CPQ. The quantity is reflected on the quote.

In case of parent/child configurations, the system treats the ItemQuantity attribute and properly propagates
the quantity set up in the Configurator to quotes. However, the quantity doesn't propagate from quotes to the
Configurator (the quantity remains as it was initially defined).

SAP CPQ Setup and Administration Guide


46 PUBLIC Product Administration
Attribute and Attribute Value Quantity

For two attribute types (User Selection w/ Quantity Inputs for each Attribute Value and User Selection w/
Attribute Quantity Input) added as line items to products, the quantity box displays automatically in the
Configurator.

There are four quantity-related options that administrators can manage for all attributes listed as line items
(applies to all attribute types):

• User Can Enter Quantity - a checkbox in Products Product Attributes/Options Attribute Definition .
Selecting this option enables users to enter quantity to line items independently from the main item.
Whatever quantity is entered in the quote, it’s propagated back in the Configurator. The quantity users
enter in quotes overrides the default quantity, if defined.
• Inherit Quantity from Parent - a checkbox in Products Product Attributes/Options Attribute
Definition . When this option is enabled, the quantity of the line item is multiplied with the quantity of
the main item every time the quantity of the main item changes. The quantity is multiplied locally in the
quote and not propagated in the Catalog. If you go back to the Catalog, the product quantity remains as
initially defined.
• Default quantity (if not 1) - you can define default quantities of values in an attribute line item, so that
whenever the attribute is listed as a line item, the selected quantity is shown for each value. To define
default quantity, edit an attribute assigned to a product and in the Attribute Values section, select Show
More Columns. The Default quantity (if not 1) column is shown for editing quantity. The default quantity is
always overridden by the quantity users define in quotes or the quantity inherited from the parent item.
The NRC price of the item is multiplied by the default quantity and the multiplied price is shown in the
quote. However, the default quantity doesn't affect the recurring price, meaning that the recurring price
isn't multiplied by the default quantity like it’s the case with the NRC price.
• Formula for Calculating Attribute Quantity - to define a formula for calculating quantity on attribute level,
edit the attribute and find the field in the Additional Attribute Definition section. The maximum allowed
number of characters is 2500.

Application Parameters for Quantity

The following application parameters affect quantity:

• Execute rules on attribute value’s quantity change – the system triggers rules after changing the quantity of
attribute values in the Configurator.
• Calculate Auto-Reconfigure only items with modified ItemQuantity attribute – defines whether SAP CPQ
automatically reconfigures only those items whose item quantity attribute value is changed.
• Propagate Quantity to Nested Products – propagates quantity from the main item to all its underlying
items.
• Quantity Sign – enables administrators to select if the quantity is ONLY NON-NEGATIVE, ONLY POSITIVE,
or POSITIVE AND NEGATIVE.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 47
Attribute and Attribute Value Quantity - Specific Behavior

Managing attribute and attribute value quantity can differ depending on the type of the attribute listed as line
item. What follows are specific scenarios explained through an example:

Item Quantity

1.Laptop computer 1

1.1. Keyboard 1

1.2. Wireless mouse 1

1.3. Pen 1

User Selection w/ Attribute Quantity Input

When you enable users to enter quantity for attribute line items, the attribute quantity in the Configurator
displays the quantity of the last edited attribute in the quote.

Example

If you change the quantity of the line items in this order (Wireless mouse (Qty 2) > Pen (Qty 4) > Keyboard (Qty
2)), the quantity of the item in the quote is 2.

If the attribute inherits quantity from the parent item and has default values set for attribute values, the default
quantity of the value that was edited first displays in the Configurator.

Example

If you change the quantity of the line items in this order (Wireless mouse (Qty 4) > Pen (Qty 3) > Keyboard (Qty
2)), the quantity of the item in the quote is 4. The default value of the first selected item applies as quantity
to all other attribute values in the quote and can be overridden by changing the value of the parent item. If the
quantity of the parent item changes, the quantity of the line items changes accordingly. The same behavior
applies if users define the quantity of the attribute value and if there are default values defined in Setup. The
quantity of the value that was edited first applies to all quantities in the Configurator. If users change the
quantity of items in the quote, the quantity of the last edited item propagates back to the Configurator and it
applies to all quantities. After updating the quote, the new value applies to all items.

SAP CPQ Setup and Administration Guide


48 PUBLIC Product Administration
Container

For container attribute line items, there are two additional fields you need to manage when adding columns to a
container attribute:

• Column Type - select Product Attribute.


• Attribute - displays only if the column type is Product Attribute. Here you select the attribute that the
column references.

 Note

To handle quantity, a column in a container attribute needs to reference the ItemQuantity attribute.

Quantity Inheritance in Multi-Level Line Item Structure

If quantity inheritance from parent items is enabled, and you add a configurable product with multilevel line
items to a quote, the quantity of the underlying line items is multiplied by the quantity of the most immediate
main item.

Level Item Quantity

1 Computer 1

1.1 Monitor 1

1.2 Case 1

1.2.1 Hard drive 2

1.2.2 Motherboard 2

1.2.2.1 RAM 2

1.2.2.2 GPU 1

If users change the quantity of Computer to 3, the quantity of the underlying line items changes accordingly:

Level Item Quantity

1 Computer 3

1.1 Monitor 3

1.2 Case 3

1.2.1 Hard drive 6

1.2.2 Motherboard 6

1.2.2.1 RAM 12

1.2.2.2 GPU 6

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 49
2.1.6 Import/Export Attribute Translations

To translate multiple attributes via one Microsoft Excel file, you can export individual attributes or an entire
attribute type, update attribute translations in the resulting Microsoft Excel file, and import the file back to SAP
CPQ.

Procedure

1. Go to Import/Export Attribute Translations Export/Import .


2. In Step 1, select the attributes to export.
• Select by Attribute Name - enter a search term or specific attribute names. All attributes that match
the search term are exported.
• Select by Attribute Type - select an attribute type and pertaining attributes are exported.
Combining two search queries is also possible (for example, attributes with Color in their name that
pertain to the attribute type Container).
3. In Step 2, select the languages to export.
4. Click one of these export buttons:

• Export Attributes Translation - exports translations for all attribute types except Container.
• Export Containers Translation - exports translations only for Container attributes.

A Microsoft Excel file is downloaded to your computer. Attribute IDs, default names, and translations in
the selected languages, if defined, are displayed in the file. Also, a separate sheet contains attribute values
with corresponding translations. If Container attributes are exported, the file contains separate sheets for
translating container columns, properties, and validation messages.
5. Update attribute translations in the dedicated columns.
6. In Step 3, upload the Microsoft Excel file. The button on the right is for uploading files with container
attribute translations, and the button on the left for files with all other attribute types.

a. Click .
b. Browse for your file.

The name of the selected file shows in the bar.


c. Click Apply Template.

A success message displays.

Otherwise, if the import file contains invalid records, an error message pops up.
d. Click Import report.

Invalid records are marked in red and errors are described in the Error column.

When you or your underlying users select a language in SAP CPQ, if translations were imported for the
attributes, the system displays them in the Catalog.

SAP CPQ Setup and Administration Guide


50 PUBLIC Product Administration
Related Information

Attributes [page 19]

2.1.7 Attribute Import

In the Attribute Import page, you can export/import attributes in several ways.

You can perform attribute import by following one of these workflows:

• Download a sample template, fill out attribute details, and then import the file.
• Export all attributes in SAP CPQ.
• Export all attributes, change details, and add new attributes, then import the file.

Sample Template

The sample template lets you easily upload multiple new attributes in SAP CPQ. To download the import
template, click Sample Template in the Attribute Import page. The Excel file contains three sheets:

• Attributes - enter attribute details having in mind the restrictions detailed in the following section. The
layout of the sheet matches the layout of the file that you get when downloading all attributes in the
system.
• IMPORTANT INFO - instructions on filling out the columns.
• Data Type Defn - the first column lists the attribute types supported for upload. The second column lists
the possible values for the Contract Duration attribute type and the third column lists the possible values
for the Billing Cycle attributes.

Upload Restrictions

When you are populating the Excel template to upload or update attributes, have in mind the following
restrictions:

• Each line in the Attributes sheet corresponds to one attribute value. If an attribute has multiple values, the
attribute name, attribute external Id, and data type are the same for each value of one attribute.
• The column ID needs to remain empty for new attributes. If you are updating an existing attribute, do not
change the values in this field.
• The first cell in the column Index needs to always have the value 1 and the number should increment by one
in the subsequent cells.
• The maximum length of values in the Attribute Name cells is 50 characters.
• Attributes that are already in the system must have the system ID. Do not change or remove their system
ID in the list. If you are adding a new attribute, leave this column empty. If you are adding a new attribute
value to an existing attribute, you need to provide the system ID of that attribute or otherwise the system
will create a new attribute.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 51
• The maximum length of values in the Attribute External ID cells is 100 characters. This is not a required
field.
• Display Value - Attribute value with the measurement unit, if applicable (for example 150 kg). The
maximum length is 255 characters.
• Value - Attribute value code.The maximum length is 255 characters.
• Data Type - Data validation is set up on this column, so you can only select one of the attribute types stated
in the Data Type Defn sheet.
• Unit is required for Contract Duration attributes.
• Billing period is required for Billing Cycle attributes.
• Measurement - Name of the measurement unit of the attribute value as defined in Product Catalog > Unit of
Measurement.
• All attribute types except Autocomplete - sourced from a custom table, Autocomplete - sourced from a
quote table, and Container can be imported in the system through the Attribute Import feature.
• The maximum size of the Excel template file is 768 KB.

2.1.7.1 Create Template by Exporting Attributes

To update attributes that are already in the system, download all of them in an Excel file, update data and then
upload the file.

1. Click Create Template by Exporting Attributes in the Attribute Import page.


The spinning wheel next to the tab title indicates that the system is building the list of attributes.
When the process is completed, the button name changes to Exported Attributes.
2. Click the button to download the file.
The file has the same columns as the sample template.
3. Change the value of the attributes you wish to update. Don’t change the System Id.
You can also import new attributes through this template. Just continue filling out the list as described in
the Sample Template section.

 Note

Other than updating the existing and adding new attribute values, don't make any other changes in the
template. The template must contain all the columns described in Sample Template for the upload to be
successful. No special characters are supported.

1. Save the changes you have made in the file.


2. Click Choose File.
Browse your computer to find the file.
3. Click Import.
After the system processes data, a new window displays the number of valid and invalid records in the file
and the following buttons:
• Import Without Preview - starts the import and displays a message once the import is successfully
completed.
• Import With Preview - a grid with all the attributes in the file displays. You can see the status of each
entry and select/unselect it for import. Click Save to import the valid attributes.

SAP CPQ Setup and Administration Guide


52 PUBLIC Product Administration
• Import With Preview of Invalid Records Only - if there are invalid records, they’re displayed in this
grid. Messages informing you about the cause of the error are in the Status column. Selecting invalid
records for import is disabled. Click Save to import the valid attributes.

2.1.7.2 Importing Attributes with Unit of Measurement


Type

This type of Attribute Import is useful when you want to make an attribute that is determined by a unit of
measurement. It helps to remember that a unit of measurement, for example, Pressure, can’t be used on its
own without being attached to an attribute in a product.

Once you’ve defined your unit of measurement, you must create an attribute determined by that unit. In our
case, we have created unit Length and an attribute TestUnit; you must enter Measurement as your Attribute
Type. We've flagged Length M (meter) value as our Default unit of measurement.

Now, Attribute Import needs to be conducted. When you export your file, the Excel file includes a Measurement
column. The Sample Template also includes a new Measurement Column.

You must enter your Display Values (100 m and 500 m, respectively, in our case) and your unit of measurement
in the Measurement column. These values must be entered in the file being exported in order to be able to
convert these values from your default value (meters, in our example), to another value (kilometers and miles,
in our example).

Now, the file containing these conversions needs to be imported. You need to add the attribute to the product
you wish to configure.

Once you’ve done that, you’re ready to configure your product in Catalog. Length measurement values in the
Configurator have been converted to kilometers from meters.

 Note

SAP CPQ supports the deployment [page 669] of products containing Attribute Measurement Types. If the
chosen Unit of Measurement hasn’t been defined by the destination environment, the system creates that
unit. If the unit exists, the values of the deployed Attribute Measurement Type are added to the Conversion
Excel file.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 53
2.2 Products

The Products administrative section allows setting up new and editing the existing products.

Accessing this administrative section from the Products administrative menu displays a list of all existing
products in the system. From here, you can also create new products manually, or import them [page 111] via
Excel.

 Note

Products obtained via synchronization with SAP ERP and SAP Variant Configuration and Pricing have the
value Yes in the column Synced from Back Office. The column Synced from Back Office is visible only when
SAP CPQ is integrated with a back-office application, such as SAP ERP.

 Note

Variant Configuration product versions cannot be added or deleted in SAP CPQ, because they are obtained
along with their own effectivity periods via knowledge base synchronization. Product versions of Variant
Configuration products are permanently active in SAP CPQ as this behavior is controlled by the back-end
system and SAP Variant Configuration and Pricing (one product can have multiple active product versions
at the same time). If a product has multiple active product versions, you can distinguish them by their
different knowledge base versions.

According to their display type [page 83], products can be:

• Simple
• Configurable
• Collection of configurable products
• System (list) of configurable products
• Parent/child system (list) of configurable products

 Note

While loading the product, all related products are loaded and rules for each of them are executed. After
that, catalog code, price, cost, image, and product name of the related product will be used as catalog
code, price, cost, image, and display value of the attribute value. All related products have to be loaded
because it takes too long to load the product in the Configurator.

If the formulas for catalog code, price and cost of the related product are simple (there’s no need to load
related product and execute rules in order to evaluate them) this option can be used to increase the speed
of product loading. In that case, formulas for catalog code, price, and cost of the related product are used
as formulas of the attribute value.

Product Changes

In the product table, columns Date Modified and Modified By include fields that show at what time and on what
day the currently active product revision was modified last time, as well as who executed the change. If none

SAP CPQ Setup and Administration Guide


54 PUBLIC Product Administration
of the product versions are currently active, data is displayed for the product version with the highest version
number.

When you click Edit, you can see Created and Modified data. The data is displayed for the version that you’re
editing (you can edit different product versions, not just the currently active one).

SAP CPQ logs a rule change only when the rule was changed (not every time you click the Save button). This is
checked for all rule fields: Rule Name, Description, Condition, Action, and so on.

Product Copy

A Copy button gives you an option to copy existing products in the system. It’s displayed for all products,
including aliases.

SAP CPQ copies the product’s active revision. If no revision is active, the revision with the highest revision
number is copied. All product fields are copied – all fields from the product setup, database, ASPX pages and
so on.

Create Products [page 56]

Custom Configurator XSLT [page 76]


Users who use custom configurator XSLT transformation should replace a part of custom
transformation in order to enable attribute span functionality.

Drilldown [page 78]


This topic explains the drilldown feature.

Create Product Alias [page 80]


Product Aliases are used to create different variations of the same product.

Product Copy [page 81]


A Copy button gives you an option to copy existing products in the system. It’s displayed for all
products, including aliases.

Order Item Type [page 81]


Order Item Type is introduced primarily to enable mapping of complex product types coming from
back-end systems.

Standalone Subscription Products [page 82]

Standalone Service Contract Products [page 83]

Product Display Types [page 83]


The product display type depends on the the configuration level of a product. It is selected in the
Product Definition tab of the Product Editor.

Create Product Version [page 87]


The purpose of this feature is to enable you to create product versions, modify them and then activate
them in both Quote 1.0 and Quote 2.0. Meanwhile, the original product remains intact and is used in
SAP CPQ. You can decide when to activate a new product version or to roll back to the previous one.

Set Configuration Based on XML [page 88]


This feature enables you to preconfigure the product based on the XML configuration that
you’ve already defined. For this purpose, tag <*SetConfigurationBasedOnXML(xml)*> has been
introduced.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 55
Unit of Measurement [page 92]
The Unit of Measurement attribute refers to the attribute in the product configuration that displays
values of certain measurement types, such as Pressure, Temperature, Length, and so on.

2.2.1 Create Products

Context

Procedure

1. Go to Setup Product Catalog Products .

The list of all existing products displays. From this page, you can manually add new products, import them,
or import the products' translations.
2. Click Add New Product.

The Definition tab is displayed.


3. Fill in the fields in the Definition tab [page 57] to establish some general characteristics the product will
have.
4. Move on to the Pricing tab [page 59] to define the pricing type that pertains to the product.
5. Click Save if you're creating a configurable product and you wish to edit other tabs as well.
6. Move on to the Attributes tab [page 60] to define the product attributes.
7. Move on to the Rules and Messages tab [page 69] if you wish to add rules which will control what can and
can't be done during configuration.
8. Move on to the Scripts tab [page 73] to add product-level scripts and specify events that trigger the
execution of those scripts.
9. Move on to the Layout tab [page 74] to change the position of product attributes in the Configurator and
Responder, if needed.
10. Move on to the Advanced Settings [page 74] tab to set up code matching.
11. Once you're done, click Save.

The product is created.

SAP CPQ Setup and Administration Guide


56 PUBLIC Product Administration
2.2.1.1 Product Definition Tab

This tab is used for defining the basics of a product. It contains several logical segments for entering product
data.

General Fields

Name (required) The name of the product.

System ID (required) Generated automatically from the product's name and the
addition _cpq.

Active Selected by default. Only active products are available in the


Catalog.

Order Item Type Order Item Type [page 81] determines the product model
in SAP CPQ (which fields are available for product adminis­
tration, what columns are available on quote items and the
type of order that is created out of quote items when SAP
CPQ is integrated with a backend system, such as SAP S/
4HANA). Available only in Quote 2.0.

Display Type The configuration level of the product.

Product Type If a group of products with the same specifications (for ex­
ample, hardware, software) isn’t available, clicking the Add
New button next the dropdown list creates a new Product
Type.

Part Number Dynamic part numbers can be created by entering an ex­


pression in the Part Number field. You can also use the
Formula Builder to create an expression.

Unit of Measure This field enables you to quantify and track products. You
can only enter a three-character ISO code in the field, for
example, EA(each), PCE(piece), PK(pack).

Description Optional description of the product.

Image Visual representation of the product.

Alt Text Textual replacement of the Image. Recommended for per­


sons with impairments.

Dynamic Description Displayed to the user in a quote. You can create it by combin­
ing text and tags.

Category (required) A category which the product is associated with.

Permissions and Effectivity Dates

If Visible to Everyone option is enabled, all users can see the product. If not, only the selected user types,
companies, brands, and so on, can see it. The Start Date and End Date determine the period during which the
product is available.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 57
The visibility permissions defined for the category a product belongs to are not automatically propagated to
the product. Instead, you can define the permissions for the individual product in this section. Otherwise, if the
Visible to Everyone option is disabled, you can manually apply the permissions defined for the category to the
product by clicking Apply Category Permissions.

Products for which a user has restricted visibility don't display in the product search results to that user.
Furthermore, users can’t add those products to the quote. For example, if a product is visible to everyone and
its category is visible only to a Sales Manager, the logged-in Sales Representative will not be able to view the
product because it’s part of a category for which they don’t have the visibility rights.

Additional Product Data

The following options and fields are optional. They simply offer a finer layer of product personalization.

Product Version There can be only one active product version [page 87].
The active product version can't be deleted.

External ID Used for referencing the product with the ID from an external
system.

UPC (Universal Product Code) Can be used for the European Article Number (EAN) or In­
ternational Standard Book Number (ISBN).

MPN (Manufacturer Part Number) Needs to be used if the manufacturer part number is differ-
ent from part number used to mark the product (when sell­
ing through channels).

Inventory A descriptive field used for storing additional information


about the product. The entered data doesn’t influence the
product in any way but can be used in formulas.

Lead Time Used to describe how long it takes to get the product.

Family Code The family code is the key to validating that a consumer has
purchased a qualifying family of products.

Product Weight The label of this property depends on the value of the
application parameter Unit of Measurement. The value of
the product property is one of following: Product Weight in
GRAMS, Product Weight in KGS, Product Weight in LBS.

Large Image Displayed on user side when you visit the product's Details
page or modal, only when Large Image tag is used in the
ProductDetails templates.

Long Product Description A more detailed description can be added here, if needed.

SAP CPQ Setup and Administration Guide


58 PUBLIC Product Administration
User can enter quantity Determines whether users can enter quantity for this prod­
uct. Enter 1 to unconditionally allow users to enter quantity
or enter an expression to only allow it under certain condi­
tions.

 Note
Product’s quantity can be changed with a special attrib­
ute called ItemQuantity [page 45]. If this attribute exists,
then the system uses its value to determine the quantity
of the main item in the quote.

Allow Product Configuration Import Enables import of product configuration via an Excel file. An
IronPython script needs to be written in order to read the Ex­
cel file and assign values from a file to the product attributes.

For controlling whether to display a configuration tem­


plate you can use the application parameter Show
product configuration template. This parameter can be

found in Setup General Application Parameters

Configuration Tab .

Shipping Costs

This section contains shipping method [page 538] fields in which you can add or build a shipping cost formula
for each product.

When users add products to a quote, they can choose a shipping method which is calculated according to
shipping costs of products defined in this section by administrators.

2.2.1.2 Product Pricing Tab

In the Pricing tab, you can choose the Pricing Type for the created product. From the dropdown list, you can
select either Pricebook Lookup or Custom Pricing.

When checkbox Use recurring price and cost has been activated under in Setup General Application
Parameters , a new field for Base Recurring Price is added. For more details, see Recurring and Non-Recurring
Prices [page 533].

The base recurring price can be retrieved via CTX tags and scripting. BaseMRCListPrice object is
available in Quote.CurrentItem in CTX tag wizard and it has the following properties: DefaultDecimal,
DefaultDisplay, MarketDecimal, and MarketDisplay.

In scripting, there are two properties available: BaseMRCListPrice, and BaseMRCListPriceInMarket.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 59
If a product has both the recurring price and the base recurring price defined in the Setup, the CTX and
scripting properties retrieve the recurring price. However, if the recurring price is not defined, the properties
retrieve the base recurring price.

A Base Price can be entered for the product. If the price consists of more than just the base price plus the sum
of the attribute prices, then an expression can be entered through the Pricing Formula.

• Product price formula: Product price or main item price is calculated by computing the pricing formula if it
exists. Otherwise, if the formula is left blank, the product price is equal to the Product Price field plus a sum
of individual attribute prices, except for attributes that are marked as line items. Attributes that are marked
as line items display their own price and aren't included in the main item price. You can enter an expression
in the Cost field to determine the cost of the product.
• Product Cost Formula: Product cost or main item cost is calculated by computing this formula and adding
all attribute costs for all attributes that aren’t marked as line items to the formula. Attributes that are
marked as line items display their own cost and aren't included in the main item cost.

When Pricing Mechanism is Pricebook Lookup, pricing fields are hidden. A link View Prices is shown. Clicking on
View Prices brings back a popup window showing all pricebooks and all records for this part number in those
pricebooks.

Related Information

Tags and Expressions [page 731]


Pricing

2.2.1.3 Product Attributes Tab

You can add attributes to individual products directly from the product configuration in Setup. It is also possible
to create new attributes there, and they will automatically be available in the list of all attributes.

By clicking Define New Attribute, you will be redirected to the Attributes creation screen. From there, you can
follow the attribute creation procedure [page 20].

By clicking Add Attribute, a popup displays with a list of available attributes, and you can select the attribute
[page 19] you wish to use in the product.

Editing Attributes within Products

It's possible to define attribute behavior within each product separately. None of these options are mandatory.

 Note

Not all options presented in the following tables refer to all attribute types.

SAP CPQ Setup and Administration Guide


60 PUBLIC Product Administration
Display as Determines how the attribute is displayed [page 64] in the
Configurator.

Custom Label Replaces the default attribute name for this product only.
Formula Builder can also be used to retrieve the label from
other places in the application.

List as Line Item Attributes marked as line items are listed as separate items
in the quote and can be configured independently from the
products.

Required Determines whether it is mandatory to select an attribute


value to complete the configuration.

Hint Creates a tooltip next to the attribute label. The hint isn’t
displayed if the selected attribute display type is Hidden
Calculated.

The following options are displayed only if List as Line Item option is active.

Description What you enter here will be displayed below the line item
when it is configured.

User Can Enter Quantity Users can enter the quantity of child items independently
of the parent item quantity. If enabled, you can create a
formula with conditions which determine which permission
groups can edit quantity

If both this toggle switch and Inherit Quantity from Parent


are enabled, the line item quantity will be inherited from the
parent product, and user can’t enter quantity.

Inherit Quantity from Parent Line item inherits the quantity of the parent item. If enabled,
you can create a formula to expand the basic conditions
(yes/no).

Rank within the Cart If there are several items, their rank determines the order in
which they are displayed in the Configurator.

Additional Attribute Definition

In this section, you can define optional attribute values, which have an impact on the attribute’s behavior in the
Configurator.

Width Width determines how much space the attribute takes up in


the Configurator.

The value entered in this field isn't applied in the


Configurator if the Responsive Design is used.

In the Classic Design, width is applied to the following


attribute display types [page 64] :

• Free Form, Exact Match w/ Otherwise Option

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 61
• Free Form, Exact Match
• Free Form, Match Lower
• Free Form, Match Upper
• Free Form, Set Match Lower
• Free Form, Set Match Upper
• Free Input, No Matching

Height Height determines how many rows the attribute takes up in


the Configurator. The value defined indicates the number of
rows and not the number of pixels.

The value entered in Height is only applied in the


Configurator for the following attribute display types [page
64]:

• Free Form, Exact Match w/ Otherwise Option


• Free Form, Exact Match
• Free Form, Match Lower
• Free Form, Match Upper
• Free Form, Set Match Lower
• Free Form, Set Match Upper
• Free Input, No Matching

Formula for Calculating Attribute Quantity You can add a formula which calculates the attribute
quantity during configuration. For example, the quantity of
one attribute can be conditioned by the quantity of another
one. The maximum allowed number of characters is 2500.

Custom Range Error Text You can define an error message which displays if users
enter an incorrect value.

Valid Input is From/To These options are displayed for container attributes. You
can build formulas which determine the input validity
period.

Spans Across Entire Row in Configurator The attribute stretches across the entire row, so no other
attributes are positioned next to it.

Show One Time Price Enabling this option shows the one-time priceof the
attribute in the Configurator. By default, they are disabled,
so the price of the product is the only one displayed.

Show Recurring Price Enabling this option shows the recurring price of the
attribute in the Configurator. By default, they are disabled,
so the price of the product is the only one displayed.

Triggers Execution of Rules When the attribute value is changed in the Configurator,
a product rule is executed. Applicable only if rules are
attached to the product.

Refresh Configurator on Change Every time a user selects an attribute value,


the Configurator is refreshed.

Start Date/End Date The dates between which the attribute is available on the
product.

SAP CPQ Setup and Administration Guide


62 PUBLIC Product Administration
Inherit Product Type from You can select a product that the attribute will inherit the
product type from, even though by default the main item
serves as a source of the product type.

Manage Container Events

If the attribute is a container [page 22], this panel is displayed, and you can add scripts to the following
events which will be triggered once the listed events occur:

• Script on new row added


• Script on row copied
• Script on row deleted
• Script on cell edited

Attribute Values

Attribute values are automatically retrieved from the attribute's definition and displayed in the table of values.

Alternatively, you can add attribute values manually or you can add one of the products as a source of attribute
values.

• Add Values Manually – If selected, a table in which you can enter values, value code and rank displays.
• Add Values from Product List - If selected, a table with products displays, and you can select products from
which you will source the values.

After you make the selection of values, they will be displayed in the table below. You can use both manually
entered values and product values in one attribute. Values need to be selected in the Display to User checkbox
in order to appear in the Configurator.

Related Information

Container Attributes [page 22]


Attributes [page 19]
Create Attributes (General Procedure) [page 20]
Create Attribute (General Fields) [page 20]
Attribute Display Types [page 64]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 63
2.2.1.3.1 Attribute Display Types

Attribute display types define how and if the attribute appears in the Configurator. They are selected in product
attribute definition. Specific attribute display types are associated with specific attribute types.

Attribute Display Types


Attribute display type Associated attribute types Description

Autocomplete – Quote Table • Autocomplete – Sourced from a Used for autocomplete attributes
sourced from quote tables. The attrib­
Quote Table
ute is displayed as a dropdown list with
• User Selection an input field, where the user can enter
• User Selection w/ Attribute a value. The attribute will automatically
Quantity Input suggest values based on what the user
entered.
• User Selection w/ Quantity Inputs
for each Attribute Value

Autocomplete – Custom Table • Autocomplete – Sourced from a Used for autocomplete attributes
sourced from custom tables. The attrib­
Custom Table
ute is displayed as a dropdown list with
an input field, where the user can enter
a value. The attribute will automatically
suggest values based on what the user
entered.

Container • Container Containers are displayed as a table


which can be expanded by adding at­
tributes or products. Its columns are
defined in Setup, while its rows can be
added and deleted during product con­
figuration.

Checkbox • User Selection All attribute values are visible and there
is a clickable checkbox next to every
• User Selection w/ Attribute
value. You can select multiple values.
Quantity Input
• User Selection w/ Quantity Inputs
for each Attribute Value
• Measurement

Dropdown • User Selection Clicking on the attribute opens up a


dropdown list of attribute values, where
• User Selection w/ Attribute
you can select a single value.
Quantity Input
• User Selection w/ Quantity Inputs
for each Attribute Value
• Measurement

SAP CPQ Setup and Administration Guide


64 PUBLIC Product Administration
Attribute display type Associated attribute types Description

Radio Button • User Selection All attribute values are visible and there
is a clickable button next to every value.
• User Selection w/ Attribute
You can select only one value.
Quantity Input
• User Selection w/ Quantity Inputs
for each Attribute Value
• Measurement

Button • User Selection The attribute is displayed as a single


button. You can define the text dis­
• User Selection w/ Attribute
played on the button in product attrib­
Quantity Input ute definition.
• User Selection w/ Quantity Inputs
for each Attribute Value

Custom Control • User Selection This display type is used with the Drill­
down [page 78] functionality.
• User Selection w/ Attribute
Quantity Input
• User Selection w/ Quantity Inputs
for each Attribute Value

Display Only Text • User Selection Create text that is displayed in the con­
figuration. One way to use this attribute
• User Selection w/ Attribute
display type is to combine it with the
Quantity Input User Input or Computed – String [page
• User Selection w/ Quantity Inputs 38] attribute type, to create headers in
for each Attribute Value the configurator to separate groups of
attributes in a single tab.
• User Input or Computed – String,
Date, Number

File Attachment • User Selection The user is able to upload a file attach­
ment.
• User Selection w/ Attribute
Quantity Input
• User Selection w/ Quantity Inputs
for each Attribute Value
• User Input or Computed – String,
Date, Number

Image Button • User Selection This display type is similar to a radio


button, except that you perform the se­
• User Selection w/ Attribute
lection by clicking on an image. You can
Quantity Input select only one value.
• User Selection w/ Quantity Inputs
for each Attribute Value

List Box • User Selection A list displayed in a box, where you can
select a single value. This type is used
• User Selection w/ Attribute
the same way as the dropdown list but
Quantity Input appears different visually.
• User Selection w/ Quantity Inputs
for each Attribute Value

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 65
Attribute display type Associated attribute types Description

List Box Multi-select • User Selection A list displayed in a box, where you
can select multiple values. Multiple val­
• User Selection w/ Attribute
ues are selected using the Shift key
Quantity Input
(for a range of subsequent) or the
• User Selection w/ Quantity Inputs Control key (for choosing multiple
for each Attribute Value specific values).

Free Input, No Matching • User Selection This display type is used with all three
User Input or Computed [page 38] at­
• User Selection w/ Attribute
tribute types. It can only be selected
Quantity Input when the attribute has only one value.
• User Selection w/ Quantity Inputs When it is combined with Date, a date
for each Attribute Value picker is displayed in the configura-
tor, allowing for a single choice. With
• User Input or Computed – String,
Number and String, users can enter any
Date, Number
numeric or string value.

Free Form, Exact Match • User Selection The user needs to enter the exact at­
tribute value in the field. If the match
• User Selection w/ Attribute
isn’t exact, no value is saved. This dis­
Quantity Input play type has a similar function to the
• User Selection w/ Quantity Inputs dropdown display type. However, it is
for each Attribute Value more practical than the dropdown when
it comes to exceedingly large numbers
of attribute values, which would be diffi-
cult to navigate in a dropdown menu.

Free Form, Exact Match w/ Otherwise • User Selection The user enters the desired attribute
Option value in the field. If the value entered
• User Selection w/ Attribute
does not exactly match a defined attrib­
Quantity Input ute value, it is overwritten by a different
• User Selection w/ Quantity Inputs value. This display type is obsolete and
for each Attribute Value should not be used.

Free Form, Match Lower • User Selection The user enters the desired attribute
value in the field. The entered value is
• User Selection w/ Attribute
then matched with the adjacent lower
Quantity Input value. For example, if the attribute val­
• User Selection w/ Quantity Inputs ues are 25, 30, and 35, and the user
for each Attribute Value enters 32, the display value is saved as
32 in the configurator, but the attribute
value code selected in SAP CPQ is 30.

Free Form, Match Upper • User Selection The user enters the desired attribute
value in the field. The entered value is
• User Selection w/ Attribute
then matched with the adjacent higher
Quantity Input value. For example, if the values are 25,
• User Selection w/ Quantity Inputs 30, and 35, and the user enters 32, the
for each Attribute Value display value is saved as 32 in the con­
figurator, but the attribute value code
selected in SAP CPQ is 35.

SAP CPQ Setup and Administration Guide


66 PUBLIC Product Administration
Attribute display type Associated attribute types Description

Free Form, Set Match Lower • User Selection The user enters the desired attribute
• User Selection w/ Attribute value in the field. If the entered value
Quantity Input does not match any attribute values,
• User Selection w/ Quantity Inputs the value in the configurator is overwrit­
for each Attribute Value ten with the adjacent lower value and
that value is saved in SAP CPQ.

For example, if you are selling software


licenses in bulks of 10, 20, and 30 (us­
ing multi-tier pricing), if the user enters
25, the value is automatically corrected
to 20.

Free Form, Set Match Upper • User Selection The user enters the desired attribute
• User Selection w/ Attribute value in the field. If the entered value
Quantity Input does not match any attribute values,
• User Selection w/ Quantity Inputs the value in the configurator is overwrit­
for each Attribute Value ten with the adjacent higher value and
that value is saved in SAP CPQ.

For example, if you are selling software


licenses in bulks of 10, 20, and 30 (us­
ing multi-tier pricing), if the user enters
25, the value is automatically corrected
to 30.

Hidden calculated, Match Lower • User Selection Attributes with the Hidden calculated
• User Selection w/ Attribute display types are not visible in the
Quantity Input Configurator. Instead, they are used
• User Selection w/ Quantity Inputs in calculations, for which they use val­
for each Attribute Value ues from other fields. This display type
overwrites the value with the lower ad­
jacent attribute value.

Calculations in hidden calculated attrib­


utes are performed before rules are
executed.

Hidden calculated, Match Upper • User Selection Attributes with the Hidden calculated
• User Selection w/ Attribute display types are not visible in the
Quantity Input Configurator. Instead, they are used
• User Selection w/ Quantity Inputs in calculations, for which they use val­
for each Attribute Value ues from other fields. This display type
overwrites the value with the higher ad­
jacent attribute value.

Calculations in hidden calculated attrib­


utes are performed before rules are
executed.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 67
Attribute display type Associated attribute types Description

Hidden, Calculated, no Matching • User Selection Attributes with the Hidden calculated
• User Selection w/ Attribute display types are not visible in the
Quantity Input Configurator. Instead, they are used
• User Selection w/ Quantity Inputs in calculations, for which they use val­
for each Attribute Value ues from other fields. This display type
keeps the received value and does not
• User Input or Computed – String,
overwrite it with any attribute value.
Date, Number
Calculations in hidden calculated attrib­
utes are performed before rules are
executed.

Subproduct • User Selection This display type is no longer sup­


ported. Instead of the Subproduct at­
• User Selection w/ Attribute
tribute display type, the attribute type
Quantity Input Container should be used.
• User Selection w/ Quantity Inputs
for each Attribute Value

Related Information

Attribute Types [page 22]


Product Attributes Tab [page 60]
Attributes [page 19]

2.2.1.3.2 Product Attribute Visibility

This section allows setting visibility of attributes in SAP CPQ.

To access this section, go to Setup Product Catalog Attribute Visibility Restrictions . Here, you can see
the list of all available attributes.

Visibility restrictions are user type-based, so you first need to select a desired User Type in the dropdown
menu. You can make any attribute invisible in the Catalog and the Configurator by ticking a checkbox next to it
for users who belong to the selected User Type.

Furthermore, if you wish to use the same attribute visibility restrictions for more than one user group, you can
copy the settings with the Copy Settings From option.

SAP CPQ Setup and Administration Guide


68 PUBLIC Product Administration
2.2.1.4 Product Rules and Messages Tab

Formula rules, attribute triggers, simple rules, and product messages are displayed under the Rules and
Messages tab.

Rules can be used for limiting the configuration of the product. This ensures that the user is only able to create
an accurate and valid configuration of the product based on rules you've established in Setup. The Rules and
Messages tab allows creating complex rules through the use of SAP CPQ tags. The Formula Builder, which can
be accessed during the creation of every rule, can help in creating these rules in a user-friendly way.

Order of Execution

While modeling a product you may use different administrative methods of performing actions on attributes to
achieve desired results. These may include triggers or rules. When using both, you may run into trouble if the
actions begin to affect the same attributes. Knowing the order that these actions are run in the system may
help you when modeling your product. The system runs these methodsin the following order:

1. Triggers
2. Simple rules
3. Formula rules

Any time the user makes a selection or a product is loaded, these processes are run in this order. This is
important because if you create a trigger that selects the Color Red then have a rule created that selected the
Color Blue, then Blue will be the final selection despite the rule ranking of either the Trigger or the Rule.

Related Information

Non-Deterministic Product Rules Execution in SAP CPQ Engine

2.2.1.4.1 Formula Rules

You can create complex rules which impact the product behavior during configuration.

Each rule is created with a condition, which determines whether or not the action will run, and an action, which
tells the system what to do when the condition is true. Each rule is, in essence, an IF statement. IF the condition
is true, THEN the anything in the action field will run. There are SAP CPQ tags used especially for rules (and
attribute triggers) to create the condition and the action statements.

You can also import and export formula rules, and rank them in the order of execution.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 69
Name (required) Used as a reference and a brief description of a rule. It’s
recommended to use associative names, such as Processor
Blocks Memory, or Color Selects Widget. This makes it easier
to find the rule later, if it needs to be edited.

Description Used for additional explanations or notes. It can make it eas­


ier for other administrators to understand what the purpose
of the rule is, or how the rule fits in with other rules and the
product configuration.

Active Manually turns the rule on or off. This is useful for diagnostic
or testing purposes.

Start Date/End Date The dates between which the rule will be applicable.

Rank Determines the priority of the rule’s execution.

Condition (required) Restricts the rule’s execution in certain cases. If the condi­
tion is fulfilled (true), the rule will be executed, and vice
versa. You can use the Formula Builder for assistance when
creating a condition expression. Maximum allowed number
of characters is 3000.

Action (required) The action which occurs when the rule is executed. You can
use the Formula Builder for assistance when creating an ac­
tion expression. Maximum allowed number of characters is
3000.

Building Rules in Formula Builder


The Attribute Data Tags [page 741] topic contains a list and descriptions of all tags available for rule
expressions. For example, the following expression would be created for a rule which needed to state that when
the value Blue in the attribute Color is selected, then the value Red from the attribute Color and the value High
from the attribute Level need to be selected. The condition field would contain: <*ANYSEL(Color:Blue)*>.
This will return TRUE when Blue is selected from the attribute Color. Once the Condition (required) field returns
a value of TRUE, the system looks at the Action (required) field and runs that expression. The action field
should contain: <*SELATV(Level:high)*>; <*SELATV(Color:Red)*> or <*SELATV(Level:high,Color:Red)*>. This
orders the system to select the attribute value (SelectAttributeValue) High and Red in the attribute Level and
Color. Both statements in the example are correct. One statement may work better in a certain situation
depending on the rest of the expression. Make sure the Active check box is checked in order for the system to
run the rule.

If <*DisallowAttribute(NameOfAttribute)*> is used, all preselected attribute values will be unchecked.

Related Information

Guided Selling [page 95]

SAP CPQ Setup and Administration Guide


70 PUBLIC Product Administration
2.2.1.4.2 Attribute Trigger

Triggers allow you to perform an action, or actions, when an event occurs on a product attribute. They’re useful
for situations when you want to reset an attribute when another attribute is selected or has changed selections.

 Note

Triggers run before product rules in the system's processing order.

For example, there’s a Unit of Measure attribute that determines what length is going to be entered in another
attribute, Length. Unit of Measure includes the values Inches and Centimeters. If a user selects Inches, types in
12 in the Length attribute, but then decides to change Unit of Measure to Centimeters, then we need to reset
Length so that the user knows to enter a centimeter measurement instead of an inch measurement.

You can define triggers for each individual attribute in Rules and Messages Attribute Trigger . There are
three types of triggers that can be defined:

• Change Trigger - activates when the user changes the previously selected value within the attribute.
• Select Trigger - activates when the user selects any values from the attribute without the previous
selection.
• Reset Trigger - activates when the user deselects a previously selected value within the attribute.

It's also possible to have multiple triggers in the same attribute, and multiple actions in each trigger (separated
by a semicolon). Conditional expressions can also be used within each trigger to determine whether or not an
action tag can be run. Triggers can be entered manually, or by using the Formula Builder. In the Formula Builder
window, the Actions box under Triggers/Rules only contains actions appropriate for triggers. Conditional Tags
that return TRUE or FALSE, such as the ANYSEL tag, aren't available for Trigger expression-building in the
Formula Builder, but they can be used.

2.2.1.4.3 Simple Rules

In the Rules and Messages tab, you can create simple rules that are less complex than formula rules.

Simple Rules are displayed if the application parameter Display table for simple product rules is set to TRUE.

 Note

Simple rules cannot be exported, but they can be ranked.

When you click Add Simple Rule a new screen is displayed where you can define the rule:

Rule name (required) The name of the rule.

Description The optional description of the rule.

Start Date/End Date The dates between which the rule will be applied.

If You can look up product attributes and their values in this


dropdown. If a specific product attribute value is selected in
the Configurator, the condition for rule execution will be met.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 71
Then The dropdown contains three actions which will occur if the
condition is met - Disallow, Select and Reset & Select.

 Note
If the application parameter Show Allow Option for
Simple product rules is set to TRUE, the action Allow is
also displayed in the dropdown.

Selected Values Here, you can add the values which will be impacted by the
action selected in the Then dropdown

Related Information

Products [page 54]


Guided Selling [page 95]
Formula Rules [page 69]

2.2.1.4.4 Product Messages

Product validation messages are similar to product rules, but instead of executing an action during the
configuration change, they display as a message if the condition is satisfied. They’re executed after the
configuration change (that is, when a user selects attribute value in the Configurator).

Product messages have the following structure: validation name + condition stating when the message
displays + the message that is displayed in the Configurator.

 Note

Inactive, or expired (current date is outside of the specified start and end dates) validation messages are
ignored.

If Make product incomplete is checked, and the condition evaluates to 1 (true), and message is displayed, the
product is still incomplete even though all required product attributes are selected.

If Make product incomplete isn't checked, and Show in responder isn't checked, and the condition evaluates to
1 (true), the message isn't displayed but can be checked with a CTX tag Product.Validation(validation
name).

The CTX tag Product.Validation(validation name) is meant to only be used in attribute labels, to show
a message in addition to the responder. If used in product rules it returns unexpected results depending on the
rule order and configuration, since all rules haven't been executed and configuration hasn't been stabilized.

SAP CPQ Setup and Administration Guide


72 PUBLIC Product Administration
2.2.1.5 Product Scripts Tab

This tab enables you to define scripts in a product and specify events that trigger the execution of those
scripts. You can verify the execution of the script in the Log.

You can define a local script or attach a global script to individual products, in the Setup Product Catalog
Products Scripts tab. The purpose of local scripts is to be used on specific product for which they are
created, while global scripts are universal in their nature, and can be attached to multiple different products.

Local Scripts

If you wish to add a new local script, navigate to the Scripts tab, and click Add Script New Script . The
following fields and options are available when new local scripts are created.

Name (required) The name of the script.

Active Determines whether the script is currently executed when


events occur.

Description Scripts can be described in greater detail, if necessary.

System ID Automatically populated when the script name is entered.

Start Date/End Date The dates between which the script will be executed.

Force Proxy Generation Loads and refreshes the WSDL web services as the system
does not do it by default. The checkbox needs to be selected
only once when the script is saved for the first time.

Script You can only enter the IronPython script engine type.

Example: We can add a script Log.Write("Add


item", "Item added"). The event is adding an item
to a quote with the script writing in the Log that the item
has been added. Once you’ve clicked Add to Quote in the
Configurator, go to the Log to see if the script was exe­
cuted. Once you’ve added the product to the quote, the Log
Description field is populated with an Item Added update.

Check Syntax Used for ensuring that the script is valid.

Workbench Brings up the Script Workbench [page 723], which is a useful


tool for debuging and developing scripts.

Scripting Methods List Displays a list of relevant scripting methods.

Events Select an event which triggers the script execution.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 73
Global Scripts

If you wish to attach a global script to a product, navigate to the Scripts tab, and click Add Script Global
Script .

In the Global Script dropdown, you can select a global script you wish to attach to a product, and then the event
which will trigger the script.

Related Information

How-to Examples
Scripting [page 712]
Guided Selling [page 95]

2.2.1.6 Products Layout Tab


You can change the position of attributes in the Configurator and the Responder in this tab.

To change the position of attributes, drag and drop them as you see fit. You can also use Configuration Preview
to see what the product will look like when configured.

In Configuration layout, attributes can also be dragged and dropped to another tab.

Additionally, you can add global tabs that were previously created in General Tabs , and define tab
visibility directly in the Configuration layout.

To add a new tab:

1. Click Add/Edit Tab.


A pop-up displays.
2. Click Add New Tab.
3. In Tab Name, enter the name of the tab in the search field.
If the tab exists, it’s displayed in the dropdown list as you start typing.
4. In Tag visibility, define when the tab is going to be visible.
5. Tick the checkbox.
The name of the tab displays in the pop-up.
6. Click Save.

To rank tabs, drag and drop them.

2.2.1.7 Products Advanced Settings Tab (Code Matching)


In the Advanced Settings tab, you can set up code matching.

Code matching is used along with Intelligent Serialization (see the chapter on Sequence Substitution [page
101]) and the reverse part number lookup used in the Quick Search. This saves time for a user when

SAP CPQ Setup and Administration Guide


74 PUBLIC Product Administration
configuring a product because they don’t need to go through the full configuration process. If a user had a
part number and wanted an almost identical unit with a few changes, this would save time.

Code Matching is where this connection is defined between the part number and the product. This is done by
setting up Code Matching within a specific product. This allows the system to do a reverse part number search
when the user enters a part number in the Quick Search. Reverse part numbering is done with the Catalog Code
Generator field of the product.

This field can build the part number of the product through the use of attribute values/catalogue codes
and static text. For instance, the SMB2 Desktop Computer has this in its Catalog Code Generator field:
SMB2<*CATCODE(Processor) *><*CATCODE(Memory) *><*CATCODE(Hard Drive) *><*CATCODE(CD
or DVD Drive) *><*CATCODE(Monitor) *> This expression has the static text of “SMB2” to start out the
part number. This is then followed by the catalog code (CATCODE) of Processor, Memory, Hard Drive, CD or
DVD Drive, and Monitor. The CATCODE tag pulls the catalog code for the selected value of the attribute.

When the software does a reverse search of a part number, it checks if any of the values in the part number
are included in the attributes that make up the part number of the product. It does this in the order that the
attributes are entered for the part number. For instance, the part number SMB2-A3-102422H16-Com5T17 is
a result of the dynamic catalog code generation. To reverse search this part number, the software finds the
product to check (discussed later how) then checks if there’s a catalog code value for the attribute Processor
(<*CATCODE(Processor) *>) equal to -A3. It then moves to the next value and checks if the attribute
Memory contains a catalog code value (<*CATCODE(Memory) *>) equal to -1024. Once all the values of the
part number are found, the software opens that product and selects each value of the part number.

 Note

The user needs to enter a part number that includes all the attributes included in the catalog code
generator. If they don’t, then the system returns that it can’t find a product.

In order for the system to check the attributes of a product, it needs to know which product to look at. This
is where Code Matching comes in. Code Matching tells the system which product to look at for a given part
number. This is generally the static text used in the product’s part number.

To access Code Matching, choose Products under the Products admin menu and find the product that the serial
number corresponds to. Choose the manual definition method and open Code Matching under the Current
Product menu.

Enter the unique codes used to reference this product. Click Change/Add More Values to add more fields. To
delete a reference, select the check box next to it and click the Change/Add More Values button. When finished,
click the Finish button. This saves the values and creates the references to the product.

Related Information

Products [page 54]


Sequence Substitution [page 101]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 75
2.2.2 Custom Configurator XSLT

Users who use custom configurator XSLT transformation should replace a part of custom transformation in
order to enable attribute span functionality.

The code to be replaced:

<xsl:for-each select="/Configuration/Tabs/Tab[@selected='1']/Attributes/
Attribute[@DisplayAs != 93 and @DisplayAs != 94 and @DisplayAs != 96 and (@Rank
= $CurrentStep or @Rank = '1') and @IsPositionAbsolute = '0' and @AliasDisplay !
= '2' and not(@SimpleRefProduct='1') ]">
<xsl:sort select="@SubRank" data-type="number" order="ascending" />
<xsl:if test="(position()-1) mod $Columns = 0">
<xsl:variable name="parentPosition" select="position()"></xsl:variable>

<tr>
<td valign="top">
<xsl:if test="Allowed='True'">
<xsl:attribute name="class">inputborder</xsl:attribute>
</xsl:if>
<xsl:attribute name="width"><xsl:value-of select ="$ColumnWidth"/></
xsl:attribute>
<xsl:call-template name="ShowAttribute">
<xsl:with-param name="StdAttrCode" select="@StdAttrCode"></
xsl:with-param>
<xsl:with-param name="PA_ID" select="@PA_ID"></xsl:with-param>
<xsl:with-param name="SelectedTabId" select="$SelectedTabId"></
xsl:with-param>
<xsl:with-param name="CurrentStep" select="$CurrentStep"></
xsl:with-param>
</xsl:call-template>
</td>

<xsl:for-each select ="/Configuration/Tabs/Tab[@selected='1']/


Attributes/Attribute[@DisplayAs != 93 and @DisplayAs != 94 and @DisplayAs != 96
and (@Rank = $CurrentStep or @Rank = '1') and @IsPositionAbsolute = '0' and
@AliasDisplay != '2' and not(@SimpleRefProduct='1') ]">
<xsl:sort select="@SubRank" data-type="number" order="ascending" />

<xsl:if test="(position() &gt; $parentPosition) and (position() &lt;


($parentPosition + $Columns))">

<td valign="top">
<xsl:if test="Allowed='True'"><xsl:attribute
name="class">inputborder</xsl:attribute></xsl:if>
<xsl:attribute name="width"><xsl:value-of select
="$ColumnWidth"/></xsl:attribute>
<xsl:call-template name="ShowAttribute">
<xsl:with-param name="StdAttrCode" select="@StdAttrCode"></
xsl:with-param>
<xsl:with-param name="PA_ID" select="@PA_ID"></xsl:with-param>
<xsl:with-param name="SelectedTabId" select="$SelectedTabId"></
xsl:with-param>
<xsl:with-param name="CurrentStep" select="$CurrentStep"></
xsl:with-param>
</xsl:call-template>
</td>
</xsl:if>
</xsl:for-each>

<xsl:if test="position() &gt; $Count - $Columns ">


<xsl:variable name="TdLeft" select="($Columns - ($Count mod
$Columns)) mod $Columns"></xsl:variable>
<xsl:if test="$TdLeft &gt; 0">
<xsl:call-template name="RecurseEmptyTd">
<xsl:with-param name="CurrentCount" select="1"></xsl:with-param>

SAP CPQ Setup and Administration Guide


76 PUBLIC Product Administration
<xsl:with-param name="MaxCount" select="$TdLeft"></xsl:with-
param>
<xsl:with-param name="Width" select="$ColumnWidth"></xsl:with-
param>
<xsl:with-param name="Class" select="''"></xsl:with-param>
<xsl:with-param name="VAlign" select="''"></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:if>
</tr>
</xsl:if>
</xsl:for-each>

Replace the previous code with the following:

<xsl:for-each select="/Configuration/Tabs/Tab[@selected='1']/Attributes/
Attribute[@DisplayAs != 93 and @DisplayAs != 94 and @DisplayAs != 96 and (@Rank
= $CurrentStep or @Rank = '1') and @IsPositionAbsolute = '0' and @AliasDisplay !
= '2' and not(@SimpleRefProduct='1') ]">
<xsl:sort select="@SubRank" data-type="number" order="ascending" />
<xsl:if test="@IsFirstInRow ='1'">
<xsl:text disable-output-escaping="yes"><![CDATA[<tr>]]> </xsl:text>
</xsl:if>
<td valign="top">
<xsl:attribute name="colspan"><xsl:value-of disable-output-
escaping="yes" select="@Colspan"/></xsl:attribute>
<xsl:if test="Allowed='True'">
<xsl:attribute name="class">inputborder</xsl:attribute>
</xsl:if>
<xsl:attribute name="width"><xsl:value-of select ="$ColumnWidth"/></
xsl:attribute>
<xsl:call-template name="ShowAttribute">
<xsl:with-param name="StdAttrCode" select="@StdAttrCode"></
xsl:with-param>
<xsl:with-param name="PA_ID" select="@PA_ID"></xsl:with-param>
<xsl:with-param name="SelectedTabId" select="$SelectedTabId"></
xsl:with-param>
<xsl:with-param name="CurrentStep" select="$CurrentStep"></
xsl:with-param>
</xsl:call-template>
</td>

<xsl:if test="@NumberOfFollowingEmptyTD &gt; 0">


<xsl:call-template name="RecurseEmptyTd">
<xsl:with-param name="CurrentCount" select="1"></xsl:with-param>
<xsl:with-param name="MaxCount"
select="@NumberOfFollowingEmptyTD"></xsl:with-param>
<xsl:with-param name="Width" select="$ColumnWidth"></xsl:with-
param>
<xsl:with-param name="Class" select="''"></xsl:with-param>
<xsl:with-param name="VAlign" select="''"></xsl:with-param>
</xsl:call-template>
</xsl:if>

<xsl:if test="@IsLastInRow ='1'">


<xsl:text disable-output-escaping="yes"><![CDATA[</tr>]]> </xsl:text>
</xsl:if>
</xsl:for-each>

Related Information

Products [page 54]

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 77
2.2.3 Drilldown

This topic explains the drilldown feature.

Let’s say you are a transport vehicle manufacturer that produces 20,000 different vehicles and also services
the vehicles it sold to customers. While many of these models and types of services offered are completely
different from one another a high number of them are very similar, with a few distinguishable details. Making
a unique selection of the entity you want can be complex and very time consuming. This is where Drilldown
comes in: it allows you literally to drill through the many options and arrive at your final selection quickly and
efficiently.

When you arrive to your desired result, whether it’s data you need for your product configuration or the product
itself, you can use it to configure your product and continue creating your quote.

It helps to think of the Drilldown feature as a product attribute with two important entities – Source and Result
columns.

That said, the first step in the Drilldown process is creating a Custom Table that will contain your selection data.
You can create your Custom Table manually or import an Excel file containing table data. You must fill out the
table with source columns representing possible choices – with each choice followed by its sort column – and
the Result columns representing the final outcome.

The second step is adding the custom control (Hierarhical Drilldown) attribute, and other attributes that will
support Drilldown, into the product. We will explain this later in the document after we show you how to create
a custom table. The final step is drilling through your options in order to configure your product and complete
your quote (this is explained in the Doing the Drilldown section of this Help document).

First Step - Crating a Custom Table

1. Manually creating a Custom Table


Your custom table will include Source and Result columns. Source columns will be columns representing
choices while Result columns will represent the result of making choices. Remember that each Source
column will have its own sort column.
• Open the Product Catalog option from the submenu on the left-hand side.
• Open Custom Tables.
Click Define New to create a new Custom Table and then click Add New Column to add columns to the
table. Fill out the names of your Source and Result columns and define a name for each column and
type of it's data (numerical, textual etc.).
• Click Save to save your newly created custom table
• Find your newly created Custom Table in the list of tables and click the Eye icon to fill out the data in
your Source and Result columns.
• Click Save when done.
2. Importing a Custom Table
Open the Product Catalog option from the submenu on the left-hand side and click Custom Tables, then
click on Import New button. Make sure to include all columns that would otherwise be included in the
manually created custom table. Consult the Excel file below, we've created to see what we mean.

SAP CPQ Setup and Administration Guide


78 PUBLIC Product Administration
 Note

You can download a sample Excel file populated with the required data. Click on next link to download
the sample: Vehicle Drilldown Template .

Click Browse to locate the Excel file and click Save. Now go back to the Custom Table Administration page,
find your table and click the Eye icon to make sure all fields are in.

Second Step - Adding Custom Control and other Attributes

Now that you have created a Custom Table you should create a product that will have attributes with a display
type custom control and attributes which will present results. In our mock-up scenario we will use three
attributes but you can create as many attributes as it is needed for your drilldown model.

We will be using three because we need one attribute for custom control (we called it Drilldown_Vehicle) and
two attributes where results will be displayed. In our mock-up example the Results No. 1 and No. 2 are Part
Number and Model Year, respectively.

In the DrillDown_Vehicle attribute, select Custom Control as your display Type.

Click Setup on your right-hand side. A new pop-up windows is shown.

Enter the name of your custom table in the Table field, (in our example it is Vehicle_drilldown). You will notice
that there are two tabs, Source column and Result tabs. Click Add New Column.

Now you are going to fill out relevant Source column fields. Consult the definition of the fields below:

• Label: Enter text that will be displayed in the Configurator for that selection.
• Type: Select a display type of your selection. The display type can be radio button, image button or
drop-down. If you select Image Button as a column type, two more input fields will be displayed on the form
- Image On Column and Image Of Column
• Image On Column: Enter name of the column in custom table that holds a name of the image that will be
displayed as attribute value when the value is selected.
• Image Off Column: Enter name of the column in custom table that holds a name of the image that will be
displayed as attribute value when the value is not selected. To upload attribute “on/off” images, use File
Management in SAP CPQ located at Setup General File Management .
• Rank: Select the position in the hierarchy of your Source Columns.
• Sort column: Enter the name of the appropriate Sort Column as it appears in your custom table.
• Db Key Column: Enter a unique database Key indicator of your item. In this case it would be the name of the
column listed in your custom table but you can also generate the key through a SAP CPQ expression or a
regular string. Note that you should not change the Db Key column indicator - it ensures consistency of the
Drilldown process by preventing system error when its value changes.
• Db Value Column: Enter the value attached to the Key column.
• Condition for making field editable (leave empty if always editable): Enter a condition that will limit the
editability of this field (for example, you can limit it to a certain user, or user type, or place time frames
during which the field is editable).
• Preselection Expression enables you to preselect your attribute values that are determined by the attribute
value selections made earlier in the Drilldown process.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 79
Note that you must create as many source columns as the number of choice items you have previously
defined in your custom table. In our case those would be: Transport type, Vehicle family, Vehicle and Fuel
type.
At this point you must create your result columns. Select Result columns and then click Add new column.
And fill out your Result Column fields.

Final Step - Doing the Drilldown

Now that you have created your product with custom control, you can exit setup, configure the product and
complete your quote. During product configuration, make your selections from the Choose Drilldown dropdown
menu as you wish, and you will drill down to the result.

Related Information

Products [page 54]

2.2.4 Create Product Alias

Product Aliases are used to create different variations of the same product.

Context

Aliases can be useful when setting up several default configurations. This approach saves the user clicks or
allows marketing campaigns to configure products that are targeted to the end user. The original product
becomes the master and can be either active or inactive. There are no limits to the number of aliases created.
Different attribute values can be chosen as defaults when the product is configured. This is only possible if
rules haven’t already been created to prevent the default value selections.

Procedure

1. Click next to the original product.

A dropdown list displays.


2. Click Add Product Alias.

The product alias Definition tab displays.


3. Change the Alias name, Pricing, and other details if needed.

SAP CPQ Setup and Administration Guide


80 PUBLIC Product Administration
4. Click Save when finished.

The Attributes tab can now be opened.


5. Select one attribute value for each attribute you would like the alias to default to.

It isn’t necessary to select an attribute value for every attribute.

The currently valid attribute values are listed in the Selected attribute values box.
6. Click Save to save alias.

A product alias inherits all the properties of the parent product except the properties that can be
configured in the alias itself, even if the property on the original product is changed after the alias is
created.

When a user logs on, they see the alias in the category defined. The master product is the base with no
attributes selected.

 Note

Aliases don’t inherit the original product’s preselected attribute values. Use the default selections to
set preselected values.

Related Information

Products [page 54]

2.2.5 Product Copy

A Copy button gives you an option to copy existing products in the system. It’s displayed for all products,
including aliases.

If you click on the button, a popup window displays and you can enter the name of the copied product. By
default, the name of the copied product is Copy of <original product name>.

SAP CPQ copies the product’s active revision. If no revision is active, the revision with the highest revision
number is copied. All product fields are copied – all fields from the Product Setup Wizard, database, ASPX
pages and so on.

2.2.6 Order Item Type

Order Item Type is introduced primarily to enable mapping of complex product types coming from back-end
systems.

The value in the Order Item Type field determines the product model in SAP CPQ (which fields are available for
product administration, what columns are available on quote items and the type of order that is created out of
quote items when SAP CPQ is integrated with a backend system, such as SAP S/4HANA).

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 81
 Note

The Order Item Type field is available only in Quote 2.0.

Order Item Type Values

• Sales - products that can be created either in SAP CPQ or imported from a back-end system
(IsSyncedFromBackOffice set to either TRUE or FALSE, respectively). They use the standard product
model is expanded with three system attributes: SAP CPQ product model. In the integrated scenario with
SAP S/4HANA, this type of product corresponds to physical products.
• Subscription - the standard SAP CPQ product model is expanded with three system attributes: Contract
Duration, Billing Cycle and Contract Extension Period which is consequently reflected in a different layout
on quotes. Depending on the value of isSyncedFromBackOffice, there are two groups of subscription
products in SAP CPQ:
• If isSyncedFromBackOffice is set to TRUE, the product is originating in SAP Billing and Revenue
Innovation Management.
• If isSyncedFromBackOffice is set to FALSE, this is a standalone SAP CPQ subscription product
[page 82].
• Subscription Billing - IsSyncedFromBackOffice is always FALSE. These products are created in SAP
CPQ and used in the integration with SAP Subscription Billing. Product model is defined via rate plans.
• Service Contract - the standard SAP CPQ product model is expanded with the following system attributes:
Service Profile, Response Profile, Settlement Period, Billing Date and Service Contract Duration which is
consequently reflected in a different layout on quotes. IsSyncedFromBackOffice can have either of the
two possible values:
• TRUE - the product is coming from SAP Billing and Revenue Innovation Management and it is created
via the ImportMaterialsFromERP API.
• FALSE - SAP CPQ standalone service contract product [page 83].

Once a product is created or imported into SAP CPQ, the value of Order Item Type can’t be changed neither
via the API nor in the application, except when the integration with SAP Subscription Billing is enabled. In that
case, it is possible to change the Order Item Type value from Sales to Subscription Billing (and provide a rate
plan for the product).

2.2.7 Standalone Subscription Products

Clients with Quote 2.0 tenants can create and manage subscription products in SAP CPQ without having to
integrate with an external system. To do so, during product creation, administrators need to select Subscription
in the Order Item Type field and set the flag isSyncedFromBackOffice to FALSE if creating products via API.

Standalone subscription products have three system attributes (Contract Duration, Billing Cycle and Contract
Extension Period) and the quote layout different than the standard layout. Basically, standalone subscription
products have the same product model and system attributes as subscription products originating in SAP
Billing and Revenue Innovation Management, the only difference being that the standalone subscription
products can use only standard SAP CPQ pricing and they can only be used in standalone SAP CPQ scenarios.

SAP CPQ Setup and Administration Guide


82 PUBLIC Product Administration
2.2.8 Standalone Service Contract Products

Clients with Quote 2.0 tenant can create service contract products without having to integrate with an external
system. To do so, during product creation, administrators need to select Service Contract in the Order Item
Type field and set the flag isSyncedFromBackOffice to FALSE if creating products via API.

Standalone service contract products have five system attributes (Billing Date, Response Profile, Service
Contract Duration, Service Profile, and Settlement Period) and the quote layout different than the standard
layout.

Basically, standalone service contract products have the same product model and system attributes as service
contract products originating in SAP Billing and Revenue Innovation Management, the only difference being
that the standalone service contract products can use only standard SAP CPQ pricing (pricebook lookup and
custom pricing) and the standard configuration type.

2.2.9 Product Display Types

The product display type depends on the the configuration level of a product. It is selected in the Product
Definition tab of the Product Editor.

The following product types exist in SAP CPQ:

• Simple Product - A simple product is one that can have attributes assigned to it, but they can't be
configured. Because of nonexisting configuration of attributes, users can add the product to a quote
directly from Catalog. In addition to defining simple products, simple products can be imported from
Microsoft Excel.
• Configurable Product - Configurable products have attributes associated with them and they need to be
configured before being added to a quote. This is generally the standard configuration type used in the
system. Note that the quote contains a System (List) of Configurable Products, and that its default behavior
is as follows: if you delete one item from the system the entire system is deleted as well.
• Collection of Configurable Products - Each included product can have its own attributes and each can be
independently changed or reconfigured.
• System (List) of Configurable Products - Each product can have its own attributes, but added products
can't be independently changed or reconfigured. The entire system needs to be changed or reconfigured.
• Parent/Child System (List) of Configurable Products - A child product’s existence in SAP CPQ is determined
by its function in relation to the parent product. Each parent can have a range of child products and each
child can assume the role of a parent and have a range of its own child products.

2.2.9.1 Simple Product

A Simple Product doesn't require any attributes/options to be selected in order to be added to a quote.

Since simple products don't require, the, Configuration Layout and Rules tabs are inactive when the Simple
Product display type is selected

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 83
A simple product can have attributes added to it for additional properties, such as color, material, size, and
so on. These attributes can then be used for product comparison or product detail pages (see Product Details
Templates [page 634] for more information).

Simple products and their attributes are most often imported through the Product Import. See Bulk Product
Import/Export [page 111] for more information.

From the Catalog, simple products can be checked and added to a quote. By default, they aren’t displayed with
a Configure button, but an inactive Configure button can be shown by changing the Show customize button for
simple products setting in Setup General Application Parameters Product Catalog tab.

When added to a quote, a simple product is displayed as a single main item. Only the Copy and Delete actions
(Item Actions Workflow) are available in the quote.

Related Information

Manage Simple Products

2.2.9.2 Configurable Product

A Configurable Product requires attributes to be selected in order to be added to a quote. These attributes can
have inclusion, exclusion, or bundling rules enforced between them.

The Configuration Layout and Rules tabs are both active when the Configurable Product display type is
selected.

Attributes can be added and updated through the Product Attributes Tab [page 60].

Configurable products and their attributes are most often imported through the Bulk Product Import/Export
[page 111]. The import doesn’t provide a way to set up attribute pricing, display types, or product references.

From the Catalog, configurable products can be configured through the Configure button.

 Note

If all the required attributes in the configuration are preselected, then the Add button is active in the
Catalog, which allows the user to add the product to a quote without entering the configuration. This
behavior is also available if there are no required attributes in the configuration.

When added to a quote, a configurable product is displayed as a single main item. If the option List as Line
Item is selected for any attribute, they’re displayed as child items to the configuration in the quote. The Copy,
Delete, Edit, and Refresh actions (Item Actions Workflow [page 477]) are available for configurable products in
the quote.

SAP CPQ Setup and Administration Guide


84 PUBLIC Product Administration
2.2.9.3 Collection of Configurable Products

Collection of Configurable Products behaves as a Configurable Product in that it requires attributes to be


selected before it's added to a quote. Inclusion, exclusion, or bundling rules can be enforced between
attributes. This product display type is used when setting up product nesting or hierarchical product structure.

Attributes added through the Product Attributes Tab [page 60] must reference other products (child
products). Attributes that reference products must also be set as List as Line Item.

Since this product display type is used in product nesting or hierarchical product structure, which involves
referencing other products, it can't be imported through the Product Import.

From the Catalog, a collection of configurable products can be configured through the Configure button. The
configuration behaves in the same way as it does for a Configurable Product.

 Note

If all required attributes in the configuration are preselected, then the Add button becomes active in the
Catalog, which allows the user to add the product to a quote without configuring it. This behavior is also
available if there are no required attributes in the configuration.

When added to a quote, the collection of configurable products adds the products referencing the selected
attributes to the quote. These products are displayed as main items in the quote, not as child items (which
is true for configurable products). Only the products referenced by attributes (child products) are taken into
account. The parent product, which includes the fields under the Product Definition Tab [page 57], is ignored
when added to the quote.

This product display type differs from the System (List) of Configurable Products or Parent/Child System (List)
of Configurable Products display types in that the products added to the quote aren't a part of any system. They
become independent products in the quote. The parent product's configuration is also lost and can't be edited.

2.2.9.4 System (List) of Configurable Products

System (List) of Configurable Products behaves as a Configurable Product in that it requires attributes to be
selected before being added to a quote. Inclusion, exclusion, or bundling rules can be enforced between those
attributes. This display type is used when setting up product nesting or hierarchical product structure.

Attributes added through the Product Attributes Tab [page 60] must reference other products (child
products). Attributes that reference products must also be set as List as Line Item.

Since this product display type is used in a product nesting or hierarchical product structure, which involves
referencing other products, it can't be imported through Product Import.

From the Catalog, the system (list) of configurable products can be configured through the Configure button.
The configuration behaves in the same way as it does for a Configurable Product.

 Note

If all required attributes in the configuration are preselected, then the Add button becomes active in the
Catalog, which allows the user to add the product to a quote without entering the configuration. This
behavior is also available if there are no required attributes in the configuration.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 85
When added to a quote, the system (list) of configurable products adds the products referencing the selected
attributes to the quote. These products are displayed in the quote as main items, not child items (which is true
for configurable products. Only the products referenced by attributes (child products) are taken into account.
The parent product, which includes the fields under the Product Definition Tab [page 57], is ignored when
added to the quote.

This product display type differs from the Collection of Configurable Products display type in that the products
added to the quote are still part of the system. The parent product's configuration isn't lost and can be edited
by clicking the Edit action next to any products that are a part of that system.

The System (List) of Configurable Products display type differs from the Parent/Child System (List) of
Configurable Products display type in that the main item is ignored, and only the products referencing
attributes are taken into account.

2.2.9.5 Parent/Child System (List) of Configurable


Products
Parent/Child System(List) of Configurable Products behaves like a Configurable Product in that it requires
attributes to be selected in order to be added to a quote. Inclusion, exclusion, or bundling rules can be enforced
between the attributes. This product display type is used when setting up product nesting or hierarchical
product structure.

Attributes added through the Product Attributes Tab [page 60] must reference other products (child
products). Attributes that reference products must also be set as List as Line Item.

Since this product display type is used in a product nesting or hierarchical product structure, which involves
referencing other products, it can't be imported through Product Import.

From the Catalog, parent/child system (list) of configurable products can be configured through the Configure
button. The configuration behaves in the same way as it does for configurable products.

 Note

If all the required attributes in the configuration are preselected, then the Add button is active in the
Catalog, which allows the user to add the product to a quote without entering the configuration. This
behavior is also available if there are no required attributes in the configuration.

When added to a quote, parent/child system (list) of configurable products add the products referencing the
selected attributes to the quote. These products are displayed in the quote as main items, not child items
(which is true for configurable products). Not only are the products referenced by attributes (child products)
taken into account, but the parent product is also added to a quote, which includes the fields under the Product
Definition Tab [page 57]. Basically, this display type is a combination of a Configurable Product and a System
(List) of Configurable Products. Not only are the referenced products displayed in the quote, but also the main
item and any attribute line items that aren't referencing products.

This product display type differs from the Collection of Configurable Products display type in that the products
added to the quote are still a part of the system. The parent product's configuration isn't lost and can be edited
by clicking the Edit action next to any of the products that are part of that system.

The Parent/Child System (List) of Configurable Products display type differs from the System (List) of
Configurable Products display type in that the main item and the products referencing attributes are added
to the quote.

SAP CPQ Setup and Administration Guide


86 PUBLIC Product Administration
2.2.10 Create Product Version
The purpose of this feature is to enable you to create product versions, modify them and then activate them in
both Quote 1.0 and Quote 2.0. Meanwhile, the original product remains intact and is used in SAP CPQ. You can
decide when to activate a new product version or to roll back to the previous one.

1. Go to Setup Product Catalog Products .


The product list displays.
2. Click on the actions icon and select Product Version from the dropdown list.
A table with all product versions for the selected product is displayed.
• If you click on the Edit action, the standard SAP CPQ product setup page opens. Here you can modify
this version as you want and save changes.
• If you click on the Delete action, the system checks if there’s any quote that contains this product
version and if so, it doesn't delete the version. Otherwise, that product version is deleted. Make sure
that you delete only versions that are not active.
• You can Add, Activate, Edit, Preview, Configure, or Check Product Details for the product version by
clicking on the appropriate link or button on the product versioning page.
3. Click Create New Version.
A popup window for creating a new version is displayed.
4. You can edit version number or accept the one that SAP CPQ offers, and enter description.
5. Click Save.
The popup window is closed, and the new product version appears in the list of versions for the product.
6. Activate the new version to make it default. Have in mind that only one version should be active at a time.

In the Workflow edit page ( Setup Workflow/Approval Workflow ) there are two options for all quote
actions:

• Prompt Users For Update to New Product Versions - If the selected quote action is executed, a message
states that there’s a new product version available for some items and requires confirmation from you
whether to update those items or not.
If you confirm, all appropriate items are upgraded and the quote action is executed. Otherwise, the action
is executed without upgrading items to the new version.
• Automatically Update Items to New Product Version - If the selected quote action is executed, all items are
automatically upgraded to their new product versions if a new version is available.

 Note

By default, these options don't apply to quote items created from product aliases, but only to regular quote
items. To make either of these options apply to quote items created from aliases, in addition to enabling the
option in the Workflow, you need to set the application parameter Prompt user to upgrade product aliases to
new versions on opening the quote to TRUE.

Alternatively, you should enable the Upgrade to New Product Version action (and set the workflow permissions
for it) so it's always available on the quote and users can manually upgrade the product at any time.

 Note

If a container attribute is related to a product and that product has a new version, the container keeps the
reference to the old product version because the old version was the one that was active at the time the
relation with the container was established. However, on the user side in the Configurator, the system finds
the latest product version for users to configure it.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 87
To update the reference to the product version in the Setup, do the following:

• Remove all column references to the product attribute.


• Remove all product references.
• Save the changes in the container.
• Attach the product with the new version.
• Return the column reference to the product attribute.
• Save the changes in the container.

A limitation affects container attributes with part number lookup referencing a product whose different
versions have different part numbers. When a child product referenced by such a container is upgraded to
a new version, and the parent item is updated on the quote, the old version of the child product remains
displayed in the Configurator, although the new version of the child product is used on the quote. However,
if both versions of the referenced product have the same part number, the version is correctly updated both
on the quote and in the Configurator.

2.2.11 Set Configuration Based on XML

This feature enables you to preconfigure the product based on the XML configuration that you’ve already
defined. For this purpose, tag <*SetConfigurationBasedOnXML(xml)*> has been introduced.

The tag accepts XML as an input string parameter, which is parsed and used to preconfigure the product.
While parsing the input XML, SAP CPQ tries to match attributes from XML to attributes in the product. If
some attribute from XML couldn’t be matched to any product attribute, it’s skipped. SAP CPQ continues with
matching other attributes and setting their values without interruption and doesn't display any error.

The only thing that can break the process is an invalid XML input (XML wasn't well formed). SAP CPQ doesn't
display an error but it can't process any attributes.

Besides standard usage, this tag can be used through Iron Python scripting as well.

Since the <*SetConfigurationBasedOnXML(xml)*> tag doesn't support setting multiple attribute values,
you can use this script to select multiple values in a checkbox attribute:
Product.Attributes.GetByName('AttributeName').SelectDisplayValues('NameOfCheckBox1'
, 'NameOfCheckBox2', 'NameOfCheckBox3').

Look at the following examples to get familiar with the feature:

Example

This simple example shows how the input XML is supposed to look like if you want to set configuration for the
product that doesn’t contain any containers.

For this example, we use our sample product named e-car CallidusCloud, which has a few attributes. We added
an attribute Set configuration, which is of type Button. Also we’ve developed an IronPython script that provides
an input XML and parses the <*SetConfigurationBasedOnXML()*> tag. This script is attached to the Set
configuration button and once the button is clicked, the product becomes preconfigured based on the provided
XML.

SAP CPQ Setup and Administration Guide


88 PUBLIC Product Administration
At first, our product is loaded into the Configurator. No attribute is selected yet.

Then, when Set button is clicked, some attributes get populated.

Here is the underlying XML file that has been provided as input to the SetConfigurationBasedOnXML tag:

<?xml version="1.0" encoding="utf-8"?>

<Attributes>
<Attribute><Name>Exterior Color</Name><Value>gray</Value></Attribute>
<Attribute><Name>Number of airbags</Name><Value>8</Value></Attribute>
<Attribute><Name>Equipment</Name><Value>Classic</Value></Attribute>
<Attribute><Name>Fuel</Name><Value>Petrol</Value></Attribute>
<Attribute Quantity="5"><Name>warranty</Name><Value>YES</Value></Attribute>
</Attributes>

The entire process is driven by the IronPython script that was attached to the Set configuration button. Here is
the script:

xml = '<?xml version="1.0" encoding="utf-8"?>'

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 89
xml+= '<Attributes><Attribute><Name>Exterior Color</Name><Value>gray</Value></
Attribute>'
xml+= '<Attribute><Name>Number of airbags</Name><Value>8</Value></Attribute>'
xml+= '<Attribute><Name>Equipment</Name><Value>Classic</Value></Attribute>'
xml+= '<Attribute><Name>Fuel</Name><Value>Petrol</Value></Attribute>'
xml+= '<Attribute Quantity="5"><Name>warranty</Name><Value>YES</Value></
Attribute></Attributes>'

TagParserProduct.ParseString("<* (" + xml + ")*>")

Example

This example shows how the input XML looks like if the product contains container attributes.

<?xml version="1.0" encoding="utf-8"?>

<Attributes>
<Attribute Quantity="2">
<Name>AttrWithQuantity</Name>
<Value>1</Value>
</Attribute>
<Attribute>
<Name>Memory</Name>
<Value>256</Value>
</Attribute>
<Attribute>
<Name>Monitor</Name>
<Value>F19</Value>
</Attribute>
<Attribute>
<Name>Processor_name_of_att</Name>
<Value>P2</Value>
</Attribute>
<Attribute>
<Name>Warranty</Name>
<Value>4 yrs</Value>
</Attribute>
<Attribute>
<Name>Hard disk</Name>
<Value>60</Value>
</Attribute>
<Attribute>
<Name>Nested-FirstAttribute</Name>
<Rows>
<Row>
<Product>
<Name>Nested-First</Name>
<CatalogCode>PN-SMB10</CatalogCode>
<Attributes>
<Attribute>
<Name>Memory</Name>
<Value>3GB DDR2</Value>
</Attribute>
<Attribute>
<Name>Processor_name_of_att</Name>
<Value></Value>
</Attribute>
<Attribute>
<Name>Monitor</Name>
<Value>T17</Value>
</Attribute>
<Attribute>
<Name>Hard disk</Name>

SAP CPQ Setup and Administration Guide


90 PUBLIC Product Administration
<Value>60</Value>
</Attribute>
<Attribute>
<Name>Warranty</Name>
<Value>123<a href="#">test</a></Value>
</Attribute>
<Attribute>
<Name>NonProductContainer</Name>
<Rows>
<Row>
<Columns>
<Column>
<Name>Test1</Name>
<Value>12312321</Value>
</Column>
<Column>
<Name>Test2</Name>
<Value>Intel Pentium 3.0GHz</Value>
</Column>
</Columns>
</Row>
</Rows>
</Attribute>
<Attribute>
<Name>ProductContainer</Name>
<Rows>
<Row>
<Product ExecuteRules="True">
<Name>Smb2 Simple Computer container+</Name>
<CatalogCode>PN-SMB10</CatalogCode>
<Attributes>
<Attribute>
<Name>Memory</Name>
<Value>256</Value>
</Attribute>
<Attribute>
<Name>Processor_name_of_att</Name>
<Value>A3</Value>
</Attribute>
<Attribute>
<Name>Monitor</Name>
<Value>T17</Value>
</Attribute>
<Attribute>
<Name>Hard disk</Name>
<Value>60</Value>
</Attribute>
<Attribute>
<Name>Warranty</Name>
<Value>1232131232323</Value>
</Attribute>
</Attributes>
</Product>
<Columns>
<Column>
<Name>Memory</Name>
<Value>60GB</Value>
</Column>
<Column>
<Name>Monitor</Name>
<Value>T17</Value>
</Column>
<Column>
<Name>Processor</Name>
<Value>A3</Value>
</Column>
<Column>
<Name>AttributeTest</Name>

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 91
<Value>aaa</Value>
</Column>
</Columns>
</Row>
</Rows>
</Attribute>
</Attributes>

2.2.12 Unit of Measurement


The Unit of Measurement attribute refers to the attribute in the product configuration that displays values of
certain measurement types, such as Pressure, Temperature, Length, and so on.

When these attributes are created, their values are expressed in default units. You can select measurement
units for any measurement type. Based on your selection of the measurement unit, SAP CPQ converts
attribute values to the selected unit. The purpose of this functionality is to display values of Unit of
Measurement attributes in the units that you select.

The default unit of measurement is set up per user. The Unit of Measurement is available in Setup Product
Catalog .

• You can add as many measurement types and measurement units as needed.
• Once a measurement type and its units are added, the default unit can’t be changed anymore.
• If the default unit has to be changed, you need to delete the existing measurement type and to create it
again.
• If a measurement type that needs to be deleted is used in attributes, you need to delete those attributes
first, or change the attribute type, in order to remove the measurement type.

2.2.12.1 Unit Mapping Table


Unit Mapping Table contains the units of measurement that have been added to the system. They can be
downloaded.

Once you've added at least one default unit, you can download a Unit Mapping Table from Setup Product
Catalog Unit of Measurement by clicking Export Conversions. You can add the table once you export the
converted values.

If there are no attributes belonging to a certain measurement type, the exported Unit Mapping Table is empty.
For example, if you download a table containing no attributes whose measurement type is Pressure, the
downloaded table is empty.

The Unit Mapping Table format is as follows:

• The first column is a Default unit.


• The table has as many columns as there are added measurement units.
• The number of rows in the Unit Mapping Table is defined by a number of unique values of measurement
attributes.
• If there are attributes of a certain measurement type in the system, the exported Unit Mapping Table
contains the attributes' display value, and no duplicates.

SAP CPQ Setup and Administration Guide


92 PUBLIC Product Administration
• The column order is the same as the order in which measurement units are added.

If you already completed the conversion of a certain value, the Unit Mapping Table contains converted values as
well.

When two attributes use the same measurement, for example Pressure, the display value can be shown with a
space (25bar) or without a space (25 Bar). The format of the display value is defined by the system (or by
administrators) which creates Unit of Measurement attributes. When a Unit of Measurement attribute is loaded
in product configuration, the attribute display values are read from the Unit Mapping Table. The attribute values
format is as follows: 0.25 Bar and 0.25 bar are the same values, but one of the values exists in the unit
mapping table. The format of the first value entered in the system is applied to all other attributes with the
same values.

Example

New attribute: Attribute A with values 0.25 Bar, 0.35 Bar, 0.45 Bar.

New attribute: Attribute B with the following values, 0.25 bar, 0.35 bar, 0.45 bar, is displayed the
same way in configuration. However, in table mappings, the values 0.25 Bar, 0.35 Bar, and 0.45 Bar are
displayed.

 Note

0.25Bar and 0.25bar are the same values, but one value is present in the Unit Mapping Table. The format
of the first value entered in the system is applied to all other attributes with this value.

If a new value is compared to a value entered when you've completed a conversion for the last time, the new
values are added to the column Pressure, but values aren't converted into other units.

You need to download a Unit Mapping Table, conduct a conversion, and put the table back into the system.

2.2.12.2 File Import

This topic contains the procedure for importing units of measurement into SAP CPQ.

Procedure

1. Click the Edit icon of your Unit of Measurement.


2. Click Browse to choose your file.
3. Click Save.

The import is completed automatically once you upload the file. Creating measurement types and units
has to be completed prior to creating the attribute of the Unit of Measurement type.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 93
2.2.12.3 Attribute Type - Unit of Measurement

Measurement attributes need to be created in the system to support Unit of Measurement in product
configuration.

You can create a new attribute type ( Setup Product Catalog Attributes ). As soon as Measurement
is chosen as an attribute type, a Unit of Measurement field is displayed. Here, you can select one of the
measurement types you've previously added to the system. This field is required.

At this point, you can add attribute values and attribute value codes, in the same way you do for other attribute
types; and add the attribute to the product.

2.2.12.4 Unit of Measurement on User Page

Units of measurement can also be accessed from User Menu User Page .

As soon as a new measurement type is added to the system, that measurement type becomes a standard field
on the User Page and User Setup.

The Unit of Measurement field labels can be translated to the user’s language by adding its key to the
dictionary. The content of these fields, however, can’t be translated. You can add a default value to the Unit of
Measurement fields in User Setup. A default value can't be added through import, Users functionality, or user
API.

2.2.12.5 Unit of Measurement Scopes and Limits

This topic contains scopes and limits of the Unit of Measurement functionality.

Here are the scopes of the Unit of Measurement functionality:

• When a user edits a saved configuration, Favorites, or a configuration from an existing quote, and if
measurement attributes have selected values, the system shows the selected value of measurement
attributes in unit selected when the Edit action was executed.
• When a new product is created via API, the Unit of Measurement attribute type is supported. API is
expanded to support the Measurement type along with the attribute type.
• Creating an attribute type Unit of Measurement through Export/Import functionality is supported.
Importing attributes with Unit of Measurement type is required when you want to make an attribute
determined by a unit of measurement. When you conduct your Attribute Import, the Excel file needs
to include a column called Measurement where you can enter your Display Values and your Unit of
Measurement.These values must be entered in the exported file in order to be converted from your default
value (meters, for example) to another value (kilometers, for example).
• Making rules with this type of attribute and IronPython scripts is supported.
• Attribute Unit of Measurement tags - all SAP CPQ attribute tags have to work with this new attribute.
• Attribute Unit of Measurement in Deploy/Send Changes functionality – entire settings regarding
Measurement and the Unit of Measurement are deployed to a new environment.

SAP CPQ Setup and Administration Guide


94 PUBLIC Product Administration
Here are the limits of the Unit of Measurement functionality:

• Attribute Unit of Measurement translation - values of measurement attribute can’t be translated into other
languages. For example, translating 25,000 Pаscale in English to 25,000 Паскаль in Russian isn’t
supported.
• Attribute Unit of Measurement in quote - tags in the quote return the value of the default unit. The
converted values in the quote aren’t supported by the design; only tags in the Configurator return
converted values.

2.3 Guided Selling

Guided Selling is an automated Catalog filtering process which helps sales representatives easily find products
matching their needs by narrowing down the products in a category based on their attribute value selections.

When there is a category in which products share multiple attributes, you can create guided selling, which
users can activate if they need assistance while browsing the Catalog. For example, the Cars category consists
of multiple products which have attributes such as year of manufacture, body style and speed. You can list the
values of those attributes in a guided selling, and users can select the ones they are interested in browsing. If a
user wishes to find all minivans which were manufactured between years 2000 and 2009, with top speed of at
least 70 mph, they can do so more quickly in this way.

Create Guided Selling [page 95]


Guided selling can be either simple or complex, depending on the use case. You can only add attributes,
or you can create rules and scripts for more complex business scenarios.

2.3.1 Create Guided Selling

Guided selling can be either simple or complex, depending on the use case. You can only add attributes, or you
can create rules and scripts for more complex business scenarios.

Procedure

1. Go to Setup Product Catalog Guided Selling .

The page with the existing guided selling objects displays.


2. Click Add New Guided Selling.

The Definition tab is displayed.


3. Fill in the fields according to the Definition [page 96] tab table.
4. Move on to the Attributes [page 97] tab.
5. Click Add Attribute.
6. Select the attributes you wish to use as filtering criteria for the guided selling process and add them.

Once added, attributes can be customized.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 95
7. (Optional) If you’ve previously added any attributes, you can move on to the Rules tab.

You can create, edit or rank formula rules [page 69], simple rules [page 71] or attribute triggers [page 71] in
this tab.
8. (Optional) Move on to the Scripts tab.

You can create a new script or attach an existing global script [page 73] in this tab.
9. (Optional) If you’ve previously added any attributes, you can move on to the Layout tab.

You can configure what the guided selling will look like to the users. You can add new attributes and store
the available information into several tabs.

 Note

Make sure you've added attributes to the guided selling layout if you want it to be displayed in the
Configurator.

10. Click Save.

The guided selling is now created and can be used to filter the Catalog.

2.3.1.1 Guided Selling Definition Tab

In this tab you can provide general information about the specific guided selling process. The table provides
explanation of fields and options.

Name (required) The name of the guided selling process.

Active Selected by default. Only active guided selling objects will


be used for filtering products/services according to search
criteria.

System ID Generated automatically from the guided selling name and


the addition _cpq.

Created by/Modified by Automatically populated when the process is either created


or modified.

Description Optional description of the guided selling process.

Category (required) The list of categories for which the guided selling process will
be available.

Image Visual representation of the guided selling process.

Alt Text Textual replacement of the Image. Recommended for per­


sons with impairments.

SAP CPQ Setup and Administration Guide


96 PUBLIC Product Administration
Item Filter Criteria Only products which meet the selected filtering criteria are
displayed to users:

AND – Retrieve products which contain all selected attribute


values simultaneously.

OR – Retrieve products which contain at least one of the


selected attribute values.

Number of Search Result Groups The default number of search result groups is 3. The lowest
number you can enter is 1.

Results Are Grouped According to The parameters for equal distribution of products are:

Equal Price Range – Each group will contain all products


which fall under the same price range, which is established
by the number of groups and the most expensive product.

Equal Number of Products – Products are grouped equally in


the groups.

Guided Selling Visibility Parameters If Visible to Everyone checkbox is ticked, all users can see
use the guided selling. If not, only the selected user types,
companies, brands, and so on, will be able to see the guided
selling.

Start Date/End Date The dates between which the guided selling process will be
active.

2.3.1.2 Guided Selling Attributes

In the Attributes tab, you select which attributes are considered as filtering criteria when users search for
products/services in the Catalog.

All the attributes you add can be customized. Once you click Edit next to an attribute, the following fields and
options are displayed:

Display Type Attribute display types define how and if the attribute ap­
pears in the Guided Selling page in the Catalog.

Spans Across Entire Row The attribute stretches across the entire row, so no other
attributes are positioned next to it.

Triggers Execution of Rules When the attribute value is changed in the Configurator,
a product rule is executed. Applicable only if rules are at­
tached to the product.

Refresh Configurator on Change Every time a user selects an attribute value,


the Configurator is refreshed.

Custom Label Replaces the default attribute name in this guided selling
only. Formula Builder can also be used to retrieve the label
from other places in the application.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 97
Hint Creates a tooltip next to the attribute label. The hint isn’t
displayed if the selected attribute display type is Hidden
Calculated.

Start Date/End Date The dates between which the attribute is active.

Use Attribute as Search Parameter The attribute is included in the product-filtering process.

Use Attribute Only to Select in which Categories Values will be Select a category or a subcategory for which the search will
Searched be performed, while the products from other categories and
subcategories will be ignored.

You can also select which attribute values will be displayed to users and used as search criteria and rank them
in order in which you want them to be displayed to users.

2.4 Categories

Categories and subcategories are used to logically group products in the Catalog according to specific criteria.

On the user side of the application, the list of categories available to the user is displayed in the Catalog.
Additionally, on the Categories page in the Catalog, categories can be displayed alongside an image and a
description. A category can be accessed only by users with the appropriate permissions.

Users can sort and filter the products in categories, as well as switch between a tabular view and a list view.

Creating and Editing Categories

As an administrator, you can create new and manage existing categories in Setup Product Catalog
Categories .

A category name is limited to 50 characters. You can also add an optional description, which can include HTML,
to provide a summary of the products in the category.

Using the Active toggle switch, you can control whether the settings defined in category administration are
applied in the system.

Categories can be organized into hierarchies, meaning that a category can have a parent category and
subcategories. You can select a parent category by clicking Parent Category, as well as create and manage
subcategories in the Sub-Categories section, which display in a grid. When selecting a parent category, you
can choose to apply the parent category’s permission settings to the category you are creating or editing.
However, to apply the permission set for the current category to its subcategories, you need to use the option
in Permissions and Effectivity Dates.

In addition, by setting a Rank for a category, you can define the order in which categories appear on the user
side of the system. Likewise, you can define a redirection URL which will be triggered when users try to open
that category.

Moreover, you can upload up to three images which will display when users open the category in the catalog.
The image uploaded in the Image field is the main image, which is always displayed in the Catalog. The two

SAP CPQ Setup and Administration Guide


98 PUBLIC Product Administration
additional images can be used only with the classic design. It is also possible to add a mobile-only image, which
is optimized for iOS mobile operating systems.

 Note

Additional images are available only in the classic design and aren’t displayed by default. To see them in the
Catalog, you need to modify the XSLT by going to Setup UI Design Custom Category UI . When
you click Add New, you can select the Category for which you want to define the images. Then you can
select the XSLT file for transforming these images. You can define your own transformation file, select the
default file, or change the default file if needed.

For this feature to work properly, the appropriate transformation must be applied for all categories in the
Catalog. You can do this in Setup UI Design Catalog Layout . There, you can select the appropriate
XSLT file.

Permissions and Effectivity Dates

In Category Visibility Permissions, if the switch Visible to Everyone is enabled, the category is visible to all
permission groups. However, if you disable this option, you can define which permission groups are able to see
this category in the Catalog, by moving them from Available to Selected Permission Groups.

In addition, you can optionally define the start and end dates of an effectivity period during which the category
will be visible to users.

Category visibility permissions are not automatically applied to the products in the category, its subcategories,
or the subcategory’s products. If you decide that the same visibility rules defined for the category should apply
to its products and subcategories, you can manage this behavior by enabling the following options:

• Apply above specified category permission rules to all products in this category (not including products in
sub-categories).
• Apply above specified category permission rules to all subcategories and all products in those subcategories.

Default Catalog View

In Default Catalogue View, you can choose between a tabular, list, or custom view. The view you select here will
be applied by default to this category on the user side. If no selection is made here, the view which is set for the
user type in Users User Types Default category view is applied for this category, instead.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 99
2.5 Product Types

Product Types can be used in tracking quotation and order information. You can also separate subtotals in the
quote for each product type, which gives users the ability to use different discounts for different product types.

Each product created in the system can be assigned one Product Type. Multiple product types within a product
can be achieved by setting attributes within a product to a different product. This is discussed more in depth
later.

Selecting the Product Types link under the Products menu gives you access to the Product Types administrative
section. Here, Product Types can be Deleted or Edited. You can add a new Product Type by clicking the Add New
button.

Adding Multiple Product Types to a Product

Products can have only one product type. However, it's possible for a product to have multiple product types.
To achieve this, you need to configure attributes within the product to a different product type. This is done
through the Ref Product field in the product attributes definition screen.

The Ref Product field is used for connecting an attribute to another product. In this way, it’s possible to create
a parent child relationship between products. There are many benefits in doing this, including the ability to
configure the child product within the parent product. This is discussed more in depth in the Product Display
Types [page 83] topic.

One benefit of creating this parent child relationship between products is the sharing of product types. When
you reference another product in an attribute through the Ref Product field, the attribute takes on the same
product type as the product it’s referencing. This is useful when the referenced product has a product type
other than the parent product.

To take full advantage of a referenced product’s different product type, it's best to mark the attribute that
references the product as a line item. This way the attribute shows up separately from the main item in the
quote and includes a different product type. The quote then has separate product type subtotals, which can be
discounted (assuming you have the permission to do so).

Here is a simple example of how an attribute can be set up to have a separate product type from the main
product. We’ll use the SMB2 Desktop Computer product, which has a product type of Hardware in this example.
This product contains an attribute called Software that we set up with a product type of Software.

First we need to make sure that we have a separate product with the product type of Software. This product
can be a simple product without any attributes. Next we’ll go to the SMB2 Desktop Computer and go to the
attribute’s administration. In the Reference Product field we need to click the Select button. This displays a
pop-up window where you can search for the product that you’re going to reference. Here we will choose
the Software product. It’s named the same name as the product type to help us quickly identify it. Once it’s
selected the product is entered in the Referenced Product field.

 Note

In this example, we’re using the Product Editor to define the referenced product. This can also be done
through the manual product definition, but instead of a Select button you see a dropdown box.

SAP CPQ Setup and Administration Guide


100 PUBLIC Product Administration
Finally, we set the attribute as a line item so that we’re able to see the attribute listed separately from the main
item in the shopping cart. We’ll also see the subtotals for Software and Hardware in the Product Types section of
the cart.

2.6 Sequence Substitution

Part numbers can become lengthy and sometimes need to be limited in length by the underlining business
systems (ERP). Because of this, there’s a need to serialize an entire part number. or a part of it. Intelligent
Serialization implies that a part number can be serialized while preserving the part number logic; hence the
same configuration always yields the same serial number.

A simple example of this would be four attributes with three values each: Color (Blue, Red, Green), Material
(Wood, Aluminum, Steel), Voltage (120, 480, 600), and Size (Small, Medium, Large). If it's necessary to
uniquely capture these selections in the part number, then characters to represent these values. In this
scenario, a part number can be: Prefix-BW1M for a Medium-sized Blue widget, made out of Wood that works
with 120 Volts. However, if restricted to only two characters in the part number to represent these 4 attributes,
an intelligent Sequence Substitution would be defined, where any combination of these four attributes would
be replaced with a sequence. The sequence would be defined to range from 1 to 81 (34) and an attribute
mentioned above.

To define a Sequence Substitution, you first need to define a numeric sequence; for this example we’re using
1–81. You can find the Sequence Substitution page in Setup Product Catalog SEQ Substitution .

Here Sequence Substitution can be edited, deleted, or copied by selecting the appropriate button next to the
substitution's name. New sequence substitutions can be created by clicking Add New. When you're creating a
new sequence substitution, you need to fill in several fields:

• Name - The name that is called by the CXSUB function.


• Description - More details about the sequence substitution.
• Sequence - Selection of sequences that are used in the reference.
• Attributes - Selection of attributes that are referenced by the same number when selected.

Once a sequence substitution is defined, it can be used in a formula for building a part number using a special
tag called <*CXSUB(sequence substitution name) *>. Using sequence substitution in a product can be
performed by entering <*CXSUB(SEQsub)*> in Product Catalogue Code Generator. In this example, SEQsub is
the created sequence substitution. To the user, the product number looks like any other product number or a
serial code.

2.7 Creating Favorites Permissions

Create Favorites Permissions enables you to limit users who are permitted to share Favorites.

Let’s say you’re a large industrial manufacturer, comprising a tools unit and an equipment unit, with one unit
having no involvement in the operations of another. In this case, you want only the tools unit, and not the
equipment unit, to be able to see the tools Favorites, and vice versa. Create Favorites Permissions allows you

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 101
and other SAP CPQ users to define parties (individual users, company branches, or specific departments)
affected by, and involved in your product configurations who are able to share the Favorites.

Using the Feature

Create Favorites Permissions is divided into two panels:

• Define user types who will be able to define favorites on company level
• Select user types from the list view in the first panel. Those users can grant permission to other users
within their company to view the shared favorites.
• Tick the Everyone checkbox to give everyone the permission within their company to share Favorites.

 Note

Favorites created by a user with the appropriate rights will remain visible inside their company even if
the option Define user types who will be able to define favorites on company level is later disabled for
that user. In that scenario, the user will no longer be able to create favorites, but those they created
previously will still be accessible on the company level.

• Define user types who will be able to define favorites on system level
• Select user types from the list view in the second panel. Those users can grant permission to all users
within SAP CPQ to view the shared favorites.
• Tick the Everyone checkbox to give everyone the permission within SAP CPQ to share Favorites.

 Tip

• Hold down the Ctrl key to select more than one user type while making your selections.
• Click Save when you're done making your selections.

2.8 Custom Tables

SAP CPQ allows the use of data from nonstandard tables during the configuration process. Adding, editing, and
deleting tables along with their entries is done through Custom Tables.

Custom Tables allows you to:

• Define New – Create a new table by defining table and columns names
• Import New – Create a new table by importing an Excel file
• Edit Table – Add new columns to an existing table

 Note

When you’re editing existing custom tables, all column and types are read-only and they can't be
changed.

• Delete Table - Delete an existing table.

SAP CPQ Setup and Administration Guide


102 PUBLIC Product Administration
• Export Table Template - Export an empty Excel file with column names, so data records could be added and
imported (intended for initial import or appending).
• Export Table - Export an entire table.
• View Entries – Read through table entries, delete them, insert new entries or modify the existing ones.
• Audit Trails - See when table was modified and who modified it.

Defining a New Table

When defining a Table Name, bear in mind that it can't begin with sys_. Table Name is a required field, it must
start with a letter and can only contain lowercase (a-z) and uppercase (A-Z) alphabetic characters, numbers,
and the underscore character.

In Audit Trail Level you can define the level at which changes are logged in the audit trail. You can choose
between Audit at Field Level, Audit at Row Level and No Audit. You can learn more in Custom Table Logging
[page 105].

As soon as the custom table name is defined, the next step is to define columns. Column Name is a required
field. You can also define the type of each column. The following types are supported:

• bit
• int
• date
• datetime (displayed in the date format and date separator format selected for the logged-in administrator)
• nvarchar(size) [default(250)]
• decimal(decimal places) [default(2)]

 Note

Length/Decimal places column type is valid only for NVARCHAR, in which case it represents the length of
the string sequence, and the Decimal, in which case it represents decimal places.

By selecting the Personally Identifiable Information checkbox an administrator flags information as PII.

You can choose to prevent old and new values of personally identifiable information from being logged by
enabling the Suppress Information Logging toggle switch.

When you create a table via API, you can provide a type for each column within the attribute <DbType></
DbType>.

When a new table is created, primary auto increment key CpqTableEntryId is added to the table, which is later
used for manipulating entries. When Add New Column is clicked, the system adds a new blank column. Clicking
Undo Column removes the last created column.

Importing a New Table

A new table can be defined by importing it. When a new table is created, the primary auto increment key
CpqTableEntryId is added to the table. If a table name isn’t provided, the table name is populated with the

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 103
Excel file name. Table Name must be unique, must start with a letter and can only contain lowercase (a-z) and
uppercase (A-Z) alphabetic characters, numbers, and the underscore character. Columns in the db table will
be named after columns from the excel file, therefore the column names must be unique, and can contain only
alphanumerics and can’t start with a numeric.

View Table Entries

Here you can manipulate table entries:

• Add New Entry


• Edit Entry
• Copy Entry – if you want to add a new entry similar to an existing one, this functionality opens same page
as edit white populated data, but after saving, it creates new entry in the database table.
• Delete Entry
• Search Entries
• Custom Table Export

You can choose entries:

• Entries listed above – Entries displayed on the screen are exported


• All entries that match entered criteria – Entries that match entered criteria are exported
• All entries – All entries are exported

All Entries is the default selection. You can choose export format. Supported file formats are:

• Excel
• ZIP

Excel file is the default selection. If you choose the ZIP file, then XLS file is compressed to a ZIP file.

• Import
• Used for appending/updating data in existing table.
• If you just want to insert new rows, the Excel file mustn't contain a CpqTableEntryId column. However, if you
want to update and insert new rows, CpqTableEntryId is necessary for existing entries, while for new rows
this cell needs to be left blank.

 Note

If the application parameter Export All Custom Table Data as Strings by Default is set to True, all data is
treated as text data by the spreadsheet application. This parameter only influences data formatting when
exporting custom tables. Setting this parameter to True prevents trailing zeros from being removed from
text type columns in custom table column definition.

Adding/Editing Table Entries

This page is for adding or editing entries. When Save And New is clicked, the current data is saved, and this
page is displayed again, so a new entry can be added to the same table. When editing the existing entry,
CpqTableEntryId is displayed.

SAP CPQ Setup and Administration Guide


104 PUBLIC Product Administration
Audit Trail

Audit Trail provides you with the ability to see when custom table was created/modified and who performed the
action. Audit Trail is written every time you:

• Create a new table trough import.


• Create a new table through API.
• Create a new table through user interface.
• Modify the table by adding columns.
• Modify the table by adding, editing, or deleting table entries.
• Import an Excel to the existing table.
• Modify the table through API in any way.

2.8.1 Custom Table Logging

The timestamp and the performer of actions performed on custom tables are logged for each individual
row in the columns CpqTableEntryDateModified and CpqTableEntryModifiedBy, and displayed in the date and
separator format selected for the logged-in administrator.

From the administrator side, the columns are visible in Setup Product Catalog Custom Tables View
Entries , and from the user side, they’re visible in User Menu Manage Tables View Entries . The
columns are automatically populated with the date and time the table was modified, and the username and
the full name of the person that modified it. The action itself isn't logged. The columns are populated after the
following actions are performed:

• Add table
• Add row
• Edit row
• Copy row
• Import entries
• Import custom table
• Add column to the table
• Any actions affecting custom tables in Deploy/Send Changes

Moreover, the new columns are also populated when the following actions are performed via SOAP API:

• CREATETABLE
• DELETETABLE
• EXPORTROWS
• EXPORTTABLE
• INSERTROWS
• UPDATEROWS
• UPSERTROWS
• DELETEROWS

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 105
However, the following actions in custom tables are logged in Audit Trail Admin Actions :

• Add new table (via SOAP API, Excel, IP script or manually; also logged in the new columns)
• Add column to the table (also logged in the new columns)
• Changing the PII and Suppressed Information Logging flags
• Delete row
• Delete table

Level of Logging in Audit Trail

In custom table definition, you can define the level at which changes are logged by choosing between the
following options in Audit Trail Level:

• Audit at Field Level – when the table is edited, a record is logged in the audit trail for every field that is
edited. The record contains information about the values in that field before and after the change.
• Audit at Row Level – when the table is edited, only one record per row is logged in the audit trail. The record
contains information about the values in the fields in that row before and after the change.
• No Audit – if this option is selected, no records are logged for that custom table, regardless of edits. As
of November 2022, this option is selected by default on all new tables and no changes are logged until
administrators select another option.

2.8.2 Hidden Custom Tables

Hidden custom tables are custom tables that are conditionally visible in SAP CPQ Setup, depending on whether
you’ve marked the tables as Hidden.

When you create a new custom table (by clicking Define New), you need to decide whether to mark the tables
as Hidden or not. The tables can be Hidden with values True and False. The default value is always False.

Many projects require storing data on custom tables that shouldn't be shown in SAP CPQ Setup. These kinds
of tables are a part of clients’ SAP CPQ model, but SAP CPQ system administrators aren’t responsible for them
and, as a result, they aren't visible in SAP CPQ Setup.

 Note

Input parameters for creating a new custom field via API call have been expanded to support this property.
The IPython CreateTable method has also been expanded to support this property.

Parameter Show hidden tables

This parameter is located on the Custom Table page in Setup. When the value of this parameter is set to True,
SAP CPQ shows hidden tables. The parameter's default value is False. The value of this parameter is saved only
during your session. In other words, your selection is valid only you log out or unselect this parameter.

SAP CPQ Setup and Administration Guide


106 PUBLIC Product Administration
Parameter Edit hidden custom tables

If this parameter is set to True, custom tables are displayed in the Configurator. They look the same as other
custom tables. You can edit them, delete them or change their content.

2.9 Messages in Product Configuration

Messages can be displayed to users either in the Configurator (for example, in attribute labels) or in the
Responder. They’re also used for enforcing product business rules because, if displayed, they can render
product incomplete.

Messages are similar to product rules - they both have a condition that is evaluated against the current product
configuration. If message condition evaluates to 1 (true), this message is displayed in the Responder, and the
product configuration is rendered incomplete.

Message conditions are evaluated after product rules have been executed (after user selects an attribute,
product rules are executed followed by message condition evaluation).

 Note

To retrieve message text (and use it in attribute labels, for example), the tag
<*CTX(Product.Validation(message name))*> needs to be used. This tag shouldn't be used in
product rules because it returns incorrect values due to execution dependency between rules and message
evaluation.

Message can be displayed in the Responder and in the attribute label (via the tag) at the same time.

In order to translate content of product message, syntax {{Dictionary_Key}} can be used. It retrieves the
value from selected dictionary with the key Dictionary_Key.

2.10 Sequences

Sequences are typically used in constructing part numbers where an entire part number or a portion of a part
number is serialized.

Sequences can be defined as numeric or alpha sequences. They’re referenced using tags, which are discussed
later in the topic. Sequences can be administrated by clicking on Sequences link under the Products admin
menu. Here you can easily copy, delete, or edit existing sequences.

User can add a new Sequence by clicking the Add New button. It brings up a blank Sequence Definition page.
Editing a Sequence brings up the same screen.

• Seqname - Name given to the Sequence. This name is used when referring to the sequence in an
expression for part numbers or other definition area.
• Description – Describe a sequence using additional details such as intended use, and so on.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 107
• Globalseq – Specifies whether or not the sequence is shared globally among all products (Y) or
independently for different products (N).
• Startno – The first element in the Sequence. The value is set to 0 for if a string list is used.
• Endno – The last element in a sequence. This value can also be set to 0 if a string list is used.
• Stepval – Specifies what the Sequence is incremented by. Any value can be used.
• Order – Specifies whether the Sequence is set up as an Ascending Sequence or a Descending Sequence.
• Alpha – Specifies if the Sequence elements are interpreted as Alpha (Y) or Numeric (N).
• Stringlist – If the sequence consists of an arbitrary sequence such as an array of strings, enter the values
here. Each value needs to be separated by commas (for example: Alpha, Bravo, Charlie, Delta,
Echo, and so on).
• Presentation – Controls how the Sequence is displayed.
• • STR* - Displays the value by itself with no leading 0s
• STR2 – STR8 – Specifies that the value is preceded by 0s and the number of 0s that precede. The
choices count the number of digits in the number, not the number of 0s preceding (for example, for
STR* the number would be 8, for STR3 it would be 008 Seqtype – Specifies the type of Sequence.
NUMERIC only allows a Sequence of numbers while STRINGLIST allows any characters.
• CHAR – Used when creating a Sequence of the Alphabet.

A to Z Sequence

One method of creating an A to Z Sequence would be to type A, B, C, …, Z into the Stringlist field. An easier
way is to use the CHAR function in the Presentation dropdown box to generate an A to Z Sequence. To create an
A to Z Sequence, enter 1 for Startno, 26 for Endno and 1 for Stepval. Make sure the Order is Ascending, Alpha
is set to Y, and Presentation is set to CHAR. CHAR converts the Sequence value into an Alphabetic character. If
Lowercase is desired, use 33 for the StartNo and 58 for the Endno.

Sequences and Part Numbers

Sequences are used with part numbers to uniquely identify a configuration. There are two options for a
Sequence being attached to a product number: the Sequence can be assigned in the Configurator when the
product is being configured, or it can be assigned when the product has been added to the quote. If assigned
in the quote, sequence values are more likely to be assigned to configurations that turn into orders. Otherwise,
sequence values can be wasted.

There are two ways (in the standard functionality) to make this happen. There are a few settings under
Application Parameters (under General administrative menu) that relate to sequences and how they behave.
One setting is called Delay Sequence Generation. If it’s set to TRUE, a sequence can be assigned when the
product is being configured. Once a product has been flagged as complete, a button labeled Get Cat Code
shows up in the Responder. Clicking this button generates the sequence value in the Configurator. If Delay
Sequence Generation is set to FALSE, the Sequence Value is generated when the product gets added to the
quote. Another setting on the Application Parameters page is Do Not Recycle Sequences. It specifies whether
the system goes through the sequence again once the Endno has been reached. Setting it to TRUE notifies the
system not to go through the sequence again.

SAP CPQ Setup and Administration Guide


108 PUBLIC Product Administration
Another setting that is related to sequences on the Application Parameters page is Unique Product Codes.
Setting it to TRUE tells the system to make every product code unique and helps to ensure that duplicate
Product Codes aren't used in the system.

Working with Sequences

In order to include a sequence in the part number or other definition area, you can use one of these tags:

• PSEQ – product sequence


• GSEQ – global sequence
• SSEQ – nested sequences

PSEQ (syntax: <*PSEQ(sequence name)*>) is a product sequence, which allows several products to use the
same sequence independently of each other. In other words, under this scenario, two products can use the
same sequence in their part numbers.

For example, product ABC part numbers can be: ABC0001, ABC0002, ABC0003… Product XYZ part numbers
can be: XYZ0001, XYZ0002, XYZ0003, and so on. Both products have the same sequences (0001, 0002,
0003…).

GSEQ (syntax: <*GSEQ(sequence name)*>) is a global sequence, which allows several products to share the
same sequence. In other words, under this scenario, two products increment the same sequence and therefore
a sequence number is only used once.

For example, product ABC part numbers can be: ABC0001, ABC0002, ABC0004… Product XYZ part numbers
can be: XYZ0003, XYZ0005, XYZ0006…

Here Product ABC uses the sequence numbers 0001 and 0002. Product XYZ uses the sequence number
0003. Since 0003 had already been used, the next sequence number available for Product ABC was 0004.

 Note

In order for GSEQ to work correctly, all products that are incrementing the Sequence need to have GSEQ
used in their expressions.

SSEQ (syntax: <*SSEQ(sequence name1, sequence name 2, …, sequence name n)*>) allows
sequences to be nested. For example, two sequences go from 1 to 3, and they are named sequence One
and Two. The expression <*SSEQ (one, two)*> would result in 11, 12, 13, 21, 22, 23, 31, 32,
33.

Another example would be to have one sequence name of ABC with string elements A, B, C, and another
sequence named Ten going from 1 to 10, then expression <*SSEQ(ABC, Ten)*> would result in A1, A2, A3,
A4, A5, A6…, A9, A10, B1, B2, …, B10, C1…, C10.

Similarly, if a portion of a part number is defined as <*SSEQ(Ten, ABC)*> then the results would be 1A, 1B,
1C, 2A, 2B, …10C.

CXSUB (syntax: <*CXSUB(sequence substitution name)*>) is used for Sequence Substitutions.


Sequence Substitution is used with serial numbers and substituting a number to replace long string of attribute
values for a product number. Sequence Substitution tells the system to use the same serial number when
certain selected attributes are chosen again.

SAP CPQ Setup and Administration Guide


Product Administration PUBLIC 109
There are no limits as to how many sequences can be used in defining a part number. For example, a part
number can be defined as <*Value(Number of Poles)*><PSEQ(some seqname)*><*Value(another
attribute)*><PSEQ(another seqname)*><*GSEQ(third sequence)*><*SSEQ(seq four, seq
five)*>. Sequences can also be included in the part number only if certain conditions are met. This is
accomplished by using an IF statement: [If](condition) {expression if true}{expression if
false – note this is optional} [ENDIF]. The condition uses the following syntax ([operator]
(variable1, variable 2)).

For example, if there’s an attribute called Number of Poles and it needs to use numbers from 2000 to 2999
from a sequence named 2000-2999 when the number of poles is 2, but use numbers from 3000 to 4999, from
a sequence named 3000-4999, when the number of poles is greater than 3, the expression entered into the
Product Catalog Code generator would be as follows:

<*Value(some attribute)*><*CatCode(another attribute)*>


[IF]([EQ](<*Value(Number of Poles*>, 2)){PSeq( 2000-2999)}[ENDIF]
[IF]([GT](<*Value(Number of Poles*>, 3)){PSeq( 3000-4999)}[ENDIF]

SAP CPQ Setup and Administration Guide


110 PUBLIC Product Administration
3 Bulk Import/Export

Bulk Import/Export is a functionality you can use if you need to import or export extensive user, product,
product translation, or pricebook records in one go.

To use it, navigate to Setup Import/Export Bulk/Import Export . Once there, you can select which entity
you wish to import or export.

Bulk Product Import/Export [page 111]


Bulk Import/Export feature gives administrators more flexibility in defining product export filters, while
improving error handling, process stability and saving administrators’ time.

Bulk User Import/Export [page 113]


This functionality allows importing and exporting multiple users into or from SAP CPQ.

Bulk Pricebook Import/Export [page 117]


Bulk Import/Export feature gives you more flexibility in defining pricebook export filters, as well as
improved error handling and quicker export/import speed.

Bulk Product Translation Import/Export [page 118]


SAP CPQ administrators can upload translations for many products using XLSX or XLS files. You can
export translations of all products or products that match the filter criteria you provide. Product fields
and languages that are selected on Product Translations Import page are displayed in the exported file.

3.1 Bulk Product Import/Export

Bulk Import/Export feature gives administrators more flexibility in defining product export filters, while
improving error handling, process stability and saving administrators’ time.

Large product data files aren't interrupted by an error and large files don't need to be split into several smaller
files. This feature is not a replacement for the existing Import/Export functionality, both methods will be
available in SAP CPQ setup.

The Bulk Import/Export process starts by exporting products. Since the number of products can be very large,
this process had been designed as an asynchronous background process. This means that the administrator is
free to leave the page once the export process is initiated and continue with their administrative activities on
other pages, or leave SAP CPQ completely. Upon completion of the process, the administrator will be notified
via email, and provided with a link to the exported template.

 Note

The maximum number of products that can be imported with the Bulk Import/Export feature in one
instance is 10 000. If a larger number of products is imported, they will be imported in multiple instances.

This feature is accessed from Setup Import/Export Bulk Import/Export Bulk Product Import/Export .
It is also possible to reach the Bulk Import/Export screen from the Products section in Setup.

SAP CPQ Setup and Administration Guide


Bulk Import/Export PUBLIC 111
The Export Products section provides you with the options to export a blank template, export all products, or
to define multiple filters before exporting products. The first two options are straightforward. The third option
Filter and Export opens the filtering screen.

The first tab Filter Export by is used to define filter criteria for the common product properties, such as Product
Name, Part Number, Category and more. If an export involves multiple part numbers, you should enter them
one per line. If you want to constraint a number of columns, or define a list of attributes that you want to export,
you can do this under Columns and Attributes to export tab.

Clicking Apply Filter and Export starts the background export process. You can leave the page (or applicatio)
and come back later to check the download status and download the exported document.

After making the desired changes, you can upload the template document to SAP CPQ. When importing, you
must provide the Product Identifier column so that SAP CPQ can know whether to insert or update the existing
products. Available product identifiers are the same as for regular product export/import.

Import of product data also works as a background process. If any error occurs, they will be logged into the
same file uploaded for import. The column that holds the information about the row is named Status. You can
download the file at the end of the process, make corrections according to any reported errors and upload the
file again.

Product Price and Cost Bulk Export

The system decides which value to export for the product price, cost, recurring price and recurring cost based
on the pricing type selected in product administration.

The table below outlines the export behaviors:

Price Cost Recurring Price Recurring Cost

Custom Pricing Exports the value cal­ Exports the value de­ Exports the value de­ Exports the value de­
culated from the pric­ fined in the Cost field. fined in the Recurring fined in the Recurring
ing formula, if the for­ Price field. Cost field.
mula is defined. Oth­
erwise, it exports the
value from Base Price.

Pricebook Lookup Price defined in the Cost defined in the Recurring price de­ Recurring cost defined
user's pricebook (in user's pricebook (in fined in the user's pri­ in the user's pricebook
User Page), multiplied User Page), multiplied cebook (in User Page), (in User Page), multi­
by the reverse fac­ by the reverse fac­ multiplied by the re­ plied by the reverse
tor (1/(MarketFactor * tor (1/(MarketFactor * verse factor (1/(Mar­ factor (1/(MarketFac­
Currency Rate)) Currency Rate)). ketFactor * Currency tor * Currency Rate)).
Rate)).

 Note

When Variant Configuration and SAP Subscription Billing products are exported, the price, cost, recurring
price and recurring cost fields are empty.

SAP CPQ Setup and Administration Guide


112 PUBLIC Bulk Import/Export
 Note

The structure of the Excel file for product upload has changed in the 2202 release. If you are uploading
products after this release, make sure that you download the upload template first because if you use the
old template, it will lead to errors in the system.

Related Information

Products [page 54]

3.2 Bulk User Import/Export

This functionality allows importing and exporting multiple users into or from SAP CPQ.

The following properties of the Bulk User Import/Export make it a more efficient solution than the standard
User Import:

• Optimized importing (you initiate export/import and leave the action running in the back while managing
other SAP CPQ features).
• Email notifications when the process is finished.
• User-oriented interface.

There are different workflows you can follow in SAP CPQ to manage Bulk User Import. When you access
Setup Import/Export Bulk Import/Export Bulk User Import/Export , you can:

• Import new users through a predefined template [page 114].


• Export all users, add new or update the existing ones [page 116] and reimport the list.
• Filter the users and export the list [page 117] to later import it with new or updated data.

Import Through Template [page 114]


This workflow allows you to export a predefined template, fill it out with user details and reimport it into
SAP CPQ.

Update Existing Users [page 116]


SAP CPQ allows you to export a Microsoft Excel file with all users in the system, update their data and
reimport it into SAP CPQ.

Filter and Export Users [page 117]


The filtering option in Bulk User Import/Export allows you to export only the users that match your
search criteria.

SAP CPQ Setup and Administration Guide


Bulk Import/Export PUBLIC 113
3.2.1 Import Through Template

This workflow allows you to export a predefined template, fill it out with user details and reimport it into SAP
CPQ.

Context

Importing users through templates is recommended when you only wish to import new users without altering
the existing ones.

 Note

Exported files don’t contain columns Password, Must Change Password and Password Locked, and you can’t
import a file which contains those columns.

Procedure

1. In the Export Users section, click Export Template.


2. Open the Microsoft Excel template on your computer.
3. Fill out the columns in Users and save the file.

Find the instructions for filling out the templates in Template Guidelines [page 115].
4. Drag and drop the Microsoft Excel template in the Import Users section or browse for it.

The import is automatically recorded in the list of jobs. The status of the import shows Queued until
Finished (Download). A progress bar visually shows the progress.
5. (Optional) Select the Email me when done checkbox.

A notification is emailed to you when the import is finished. Once the Status column indicates Finished
(Download), the import is completed. To check the success of the import, click Finished (Download) and
open the file on your computer.
6. Check the Status column in the Users sheet.

If a row is highlighted in red, update it according to the status message and reimport the template.
Otherwise, if no rows are highlighted, the users are imported successfully. If you cancel an import before
the processing is completed, the file is still available for download.

The imported users can be reached in Setup Users or Manage Users.

Template Guidelines [page 115]


This topic contains the instructions for filling out the templates for user bulk import.

SAP CPQ Setup and Administration Guide


114 PUBLIC Bulk Import/Export
3.2.1.1 Template Guidelines

This topic contains the instructions for filling out the templates for user bulk import.

The Excel template for Bulk Import contains three sheets:

• Users - the import sheet with columns that match fields in SAP CPQ.
• IMPORTANT INFO - restrictions and requirements for each field.
• Timezones - timezone IDs and descriptions.

The Users sheet is a container for information related to users that are to be imported. Each user is placed in
a separate row. The system uses IDs to match the records in the template to existing users in SAP CPQ. When
importing new users, the column ID should not be populated. However, when updating the existing users, you
should not change the ID in the exported file. If you delete or modify the ID of an existing user during editing,
the user may be duplicated in SAP CPQ.

 Note

The order of columns and column names must stay unchanged, otherwise the import will not be
successful.

The Password, Must Change Password and Password Locked columns don’t exist in exported templates and
the import of those columns isn’t allowed. The exported templates contain the IsSSOUser column, the value of
which should be set to TRUE if a user is going to log in using the Federated Single Sign-On. The default value of
IsSSOUser cells is FALSE, and SAP CPQ sets them to FALSE if they are imported without any values.

A populated template that has already been imported into SAP CPQ contains the Status column indicating if a
user is successfully imported. In case of an error, a message explains what caused it. Additionally, users that
have not been imported are highlighted in red in the template. Unlike in the standard import where you supply
the ID for the managing, ordering and approval parents, in Bulk Import you supply their usernames. Also, in
Bulk User Import you can define the default market, default dictionary, date format, number format and the
expiration date for the underlying users.

Related Information

Bulk User Import/Export [page 113]


User Administration [page 120]

SAP CPQ Setup and Administration Guide


Bulk Import/Export PUBLIC 115
3.2.2 Update Existing Users

SAP CPQ allows you to export a Microsoft Excel file with all users in the system, update their data and reimport
it into SAP CPQ.

Context

Although you may add new users to the list, this workflow is recommended when updating the details of users
that are already in the system.

Procedure

1. In the Export Users section, click Export All Users.

The job is recorded in the list and its status changes accordingly (Queued > In Progress > Finished
(Download)).
2. Click Finished (Download) in the Status column.
3. Open the Microsoft Excel template on your computer.

All user fields from the system are exported.


4. Update the data.

Column order and column names must stay unchanged, or else the import won’t be successful. Also, make
sure not to change the user IDs as it may lead to duplication in the system.
5. Drag and drop the Microsoft Excel template in the Import Users section or browse for it on your computer.
6. (Optional) Select the Email me when done checkbox to receive an email when the import is finished.

Once the status changes to Finished (Download), the import is completed.


7. To check the success of the import, click Finished (Download) and check the Status column.

Passwords aren’t exported from the system.

Related Information

Bulk User Import/Export [page 113]


User Administration [page 120]

SAP CPQ Setup and Administration Guide


116 PUBLIC Bulk Import/Export
3.2.3 Filter and Export Users

The filtering option in Bulk User Import/Export allows you to export only the users that match your search
criteria.

Context

Procedure

1. In Users, click Filter and Export and a pop-up displays.


2. Select the field per which the users are filtered.
3. Select an operator and enter a value.
4. Repeat the steps to add filters.
5. Click Export.

A pop-up message informs you that the export has started and a job entry displays in the list.
6. Click Finished (Download) in the Status column to download the export file.

The system has filtered the users per your search criteria.

The file contains all their details except the passwords.

Related Information

Bulk User Import/Export [page 113]


User Administration [page 120]

3.3 Bulk Pricebook Import/Export

Bulk Import/Export feature gives you more flexibility in defining pricebook export filters, as well as improved
error handling and quicker export/import speed.

You can import/export pricebooks in bulk in Setup Import/Export Bulk Import/Export Bulk User
Import/Export .The page is divided into three sections:

• Export Pricebook - contains buttons for initiating different exports in SAP CPQ:
• Export Template - exports a Microsoft Excel template with two sheets: Pricebooks (template for
defining pricebook details) and Template_Glossary (contains descriptions of columns in the Pricebooks
sheet).

SAP CPQ Setup and Administration Guide


Bulk Import/Export PUBLIC 117
• Export Entire Pricebook - brings up the Export Entire Pricebook popup which prompts you to select a
market and a pricebook within that market that you wish to export.
• Filter and Export - allows filtering pricebooks per columns and exporting the results in Microsoft Excel.
• Import Pricebook- once you select the desired market and pricebook name, you can import pricebook data
in the form of a Microsoft Excel template either by dragging and dropping it in the indicated field, or by
manually browsing for it.
• List of import/export jobs - shows the type, progress status, requester's name and the date for each
export/import job. You can also manage email notifications here by selecting/unselecting the Email me
when done checkbox.

Pricebooks are imported sequentially, that is, if several import jobs are submitted, pricebooks will be imported
one by one.

 Note

The import process may take some time if there is an extensive number of rows in the pricebook, since the
system checks validity of each individual row and provides validation messages, which let you know if any
rows should be modified. If the import is taking too long, you can tick the Email me when done option and
check in as soon the import process is completed.

3.4 Bulk Product Translation Import/Export

SAP CPQ administrators can upload translations for many products using XLSX or XLS files. You can export
translations of all products or products that match the filter criteria you provide. Product fields and languages
that are selected on Product Translations Import page are displayed in the exported file.

In Setup Product Catalog Products Product Translation Import , you can choose a language that
needs to be translated from product fields (reference language) and a target language.

 Note

It is also possible to perform import/export of product translations directly from the Products page in
Setup.

Product Translation Import

When importing product translations, you can choose to use either SAP CPQ ID or Part number as a product
identifier when you want to import product translations. When SAP CPQ ID is selected, you can import or
export fields associated to the product object as well as the attribute and the attribute value object. When the
part number is selected, only the fields associated with the product object can be translated. The attribute
object and the attribute value object are disabled.

SAP CPQ Setup and Administration Guide


118 PUBLIC Bulk Import/Export
Product Translation Export

Exporting product translations is very similar to the process of exporting products – with ability to export
products from categories and to export all products.

Export Template - SAP CPQ exports a Microsoft Excel template with two sheets: Specification (explanation of
columns that can be populated) and Example (what the template that is ready for import should look like).

Export All Product Translations - SAP CPQ exports all selected product translation fields – fields from the
product object, the attribute object, and the attribute value object.

You can export translations for any product type (simple, configurable, collection, system, or parent/child
system).

Filter and Export - allows filtering pricebooks per the criteria you provide, and exporting the results in Microsoft
Excel.

• Useful Guidelines

• File format for import is XLSX or XLS.


• Columns don’t have to be sorted in prearranged order (system needs to be able to link column header and
content found in the column).
• System_ID column needs to be populated with object system_id. Objects are separated with ||.
• If the object is a product, the System ID is system_id of the product.
• If the object is an attribute, System ID needs to be populated with system_id||attribute system_id.

SAP CPQ checks if the object (product, attribute, and attribute value) exists in the system. If product
system_Id doesn’t exist in the system, that row is skipped, and translations aren't inserted. The same
behavior is applied on attributes and attribute values. If they don’t exist in the product, they aren't inserted.

Object column can have following values:

• Product
• Attribute
• Attribute value

Property column can have following values:

• Product properties: Product Name, Description, Long description, Description builder


• Product attribute properties: Label, Hint, Description, Error Message
• Attribute Value properties: Attribute value description

Attribute Value properties: Attribute value description:

• Reference language column – this column will be populated with chosen Translate from language. US
English is default.
• Language 1, Language 2 … - Each selected language for translation will be a separate column in xlsx file.
• If you rename column name, appropriate error message should be shown during the import.
• Columns and properties values should not be case sensitive.

Updating Product Translation: When you import a file, SAP CPQ should be able to understand whether product
translations already exist in the system for provided system_id. If yes, they will be updated.

SAP CPQ Setup and Administration Guide


Bulk Import/Export PUBLIC 119
4 User Administration

The following topics guide the administrator through the Users section of the Setup.

Guest User [page 120]


A guest user in SAP CPQ is a user with limited access rights. For example, guest users may need to log
in only to browse products in the catalog with or without making the final purchase.

User Registration [page 123]


User Registration allows users to create an account if you haven't previously created one for them.

Users [page 126]


The Users administration page enables you to manage the existing users in the system and add new
ones.

Companies [page 133]


Companies are organizations SAP CPQ users belong to.

Log In as a Proxy User [page 137]


If you have been granted access to another user’s account, you can log into SAP CPQ on their behalf to
troubleshoot and resolve the issues they encountered.

Permission Groups [page 138]


The Permission Groups section in Setup Users allows administrators to add new and modify
existing permission groups.

Quick Search and Advanced Search [page 141]


The SAP CPQ catalog can be searched via the quick search or the advanced search.

User Custom Fields [page 142]


User custom fields allow you to add additional fields for users.

User Types [page 144]


User types control how users interact with the system.

4.1 Guest User

A guest user in SAP CPQ is a user with limited access rights. For example, guest users may need to log in only
to browse products in the catalog with or without making the final purchase.

Administrator Side

To enable the guest user feature and allow browsing through products, administrators must first make
adjustments in the Setup.

SAP CPQ Setup and Administration Guide


120 PUBLIC User Administration
User and Workflow Adjustments
The details on creating a guest user are explained in Setting Up an Anonymous User [page 122]. Here are listed
the main steps.

• Create a user account that will be used for guest users and set the privileges for the categories and
products that should be visible to guest users. Make sure that the user is active, otherwise logging is
disabled.
• Create a company and a permission group for the guest user.
• Set up the workflow actions and permissions. Since a guest user has limited access to SAP CPQ features,
only some actions should be enabled (Add Item, Reprice, Save Quote and Copy).

Guest User Settings

All settings for guest users can be managed in Users Guest User and Default User Settings Guest User
Settings . The Guest User Settings tab contains the basic settings for guest users.

1. In Guest user, select a user.


Any user in SAP CPQ can be selected as guest user. Make sure that the selected user is active because
inactive users won’t be able to log in.
2. (Optional) Enable the following toggle switches:
• Guest user cannot add to quote - users can only browse items but they can’t add them to quotes.
• Guest user can proceed to check-out without self-registration - defines whether the guest user needs
to self-register in order to proceed with the checkout. If the parameter is enabled, the Customer Info
tab opens up after the checkout. If disabled, the login page opens after the checkout and users have to
register.
• When guest user creates a quote, system can pre-populate customer roles based on user's or user's
company info - defines whether the system prepopulates customer roles with user’s Bill-to and Ship-to
information as well as the user’s company information.
3. Click Save.
The guest user settings are adjusted.

Legacy SSO Settings


In this page, you define the settings for the User Registration page.

1. In Single Sign-On key and Single Sign-On vector, enter values to encrypt and decrypt a username.
You need to provide unique values.
2. Enable the Send Single Sign On Link to the Quote as result of NewQuote API method field.
3. Click Save.

A more detailed description is available in Single Sign-On.

Guest User Side

Guest users can log into SAP CPQ in the following ways:

• login page - administrators should provide the username/password/domain. After logging, users land to
the catalog.
• direct link - the format of the link should be app_name/mt/domain_name (for example,
v60.webcomcpq.com/mt/Your_Domain). The login screen is skipped and users land to the catalog.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 121
Users logged as guest users can browse the catalog and create quotes (if Guest user cannot add to quote is
disabled).

Setting Up an Anonymous User [page 122]


This topic explains the details about creating a guest user.

4.1.1 Setting Up an Anonymous User

This topic explains the details about creating a guest user.

Before creating a new user account that will be used for guest users, there are some preparations to be done.
First, in administration under Users it’s necessary to click the Companies option to create a new company
(such as “GuestUserCompany”). After that, user has to click the User Groups option – leave the Start Page
option empty and don’t change Visual Styles (except for Shopping Cart/Quote if necessary, since all other
changes won’t be visible). After the user group has been created, it’s necessary to set up the privileges for
categories (and products) that are wanted to be visible for guest users (for more information see Product
Administration [page 18]).

Guest users should have at least the Add Item action available, which is why Workflow Actions must also be
set. Next step is to open the Work-flow/Approval menu and click on the Workflow Permissions option. User will
choose the by User Types Premission type of listing and select the guest user’s group he’s created by clicking
. This brings up the Workflow Permissions Edit screen.

In addition to the Add Items action, user can also add Calculate and Save Quote actions. All other actions aren’t
available for guest users and selecting them here won’t make any difference.

Now, Guest User account can be created. Click on the Users option under the Users menu and choose Add
New. Make sure that the newly created company and user group had been selected for Companies and User
Group, respectively.

After a guest user account has been successfully created, user can go to the Guest User and Default User
Settings option and select a Guest user.

 Note

Inactive users won’t be able to log in, so try not to get into situations where your SAP CPQ is set up to use
inactive user as a guest account.

Related Information

Guest User [page 120]


User Administration [page 120]

SAP CPQ Setup and Administration Guide


122 PUBLIC User Administration
4.2 User Registration

User Registration allows users to create an account if you haven't previously created one for them.

Administrator Side

To allow users to register from the login page, activate the Allow User Registration toggle switch. If the toggle
switch isn't active, users can't register in the User Registration page and they are prompted to contact their
administrator.

Default User Settings for Self-Registered Users


This tab is for defining the settings that apply to every user that registers on their own, without an approval
from the administrator. To access the tab, go to Setup Users Guest User and Default User Settings
Guest User Settings .

1. In Custom Message, enter a message that appears on the User Registration page.
You can use HTML tags.
2. Activate the Allow User Registration toggle swich if you wish to allow users to self-register in the
environment.
3. Activate the Make New Self-registered Users Active toggle switch if you wish to allow new self-registered
users to be immediately active followiing their registration.

 Note

he toggle switch is by default turned off, which means that newly registered users are inactive until
administrators make them active. If you wish to allow users to self-register in their environments (via
the Allow User Registration toggle switch), but not to be active by default, they need to select at least
one administrator who will receive self-registration email notifications and activate new users.

4. In Default User Type, select a user type that is assigned to all self-registered users (see User Types [page
144]).
5. In Default Password Expiration Period in Days for Self-Registered Users, define the number of days before a
password expires.
To prevent users from self-registering to SAP CPQ, enter -1 in this field.
6. In Default Ordering Parent and Default Managing Parent, select the users that will be assigned as the
ordering and managing parents [page 450], respectively, to self-registered users.
The field offers autocomplete suggestions as you type in characters.
7. In the Optional Fields list, select the fields that the user can optionally fill out during registration on the User
Registration page. The unselected fields are mandatory. Additionally, all fields that users must fill out are
listed in the dedicated list. All user custom fields [page 142] display in the registration page and they are
listed in this page as well.
8. Click Save.
The settings for the User Registration page are now set up.
9. Choose which administrators from the Available Administrators will oversee self-registered users and
approve their registrations. The Selected Administrators will be notified via emails whenever new users
register in their environment and will then be able to approve them.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 123
Customizing User Registration Emails [page 124]
When you create users, they receive an email notification, which you can customize, containing their
account information, such as username, password, first name, and so on.

4.2.1 Customizing User Registration Emails

When you create users, they receive an email notification, which you can customize, containing their account
information, such as username, password, first name, and so on.

The information displayed represents user field values that are accessed in Dictionaries [page 702]. For each
value, there’s a corresponding tag that pulls the value from the dictionary when a new user is created. By using
value-tag pairs, you can customize the email notification that the newly created users and self-registered users
receive.

Customizing the Email Sent to New Users

To customize the email notification that the newly registered users receive:

1. Go to Setup General Dictionaries .


2. Find your default custom dictionary.

3. Click next to the dictionary to view its values.


A page with key/value pair displays.
4. In the Key column, find the WS.Notification.SendUserRegistrationNotification.Body key.
Enter the key in the search field and either click Search or press Enter.
Values of the key and their corresponding tags are displayed in the Value column.

5. Click next to the key to customize the value-tag pairs.


A pop-up displays.
When adding value-tag pairs to the Value field, use values and tags displayed in the table in the following
format: Value:{{Tag}}.
6. Click Save.

The following table displays supported user field tags and the corresponding values the tags pull when new
users are created.

Values Tags

Username {{Username}}

Password {{Password}}

First name {{FirstName}}

Last name {{LastName}}

Email {{Email}}

User type {{UserGroup}}

Address1 {{Address1}}

SAP CPQ Setup and Administration Guide


124 PUBLIC User Administration
Values Tags

Address2 {{Address2}}

URL {{URL}}

Domain {{Domain}}

City {{City}}

Province {{Province}}

Zip code {{ZipCode}}

Country/Region {{Country}}

State {{State}}

Phone {{Phone}}

Fax {{Fax}}

Title {{Title}}

Territory {{Territory}}

ID code {{IDCode}}

Company name {{CompanyName}}

Brand {{Brand}}

Customizing the Email Sent to Self-Registered Users

Customizing the email notification for self-registered users is done in the same way as for the newly created
users, the only difference being the key used - UserRegistration.NotificationUser.Body. The following table
displays supported user field tags and the corresponding values the tags pull when users self-register an
account.

Values Tags

Username {{Username}}

Password {{Password}}

First name {{FirstName}}

Requested company {{RequestedCompany}}

Last name {{LastName}}

Email {{Email}}

Address {{Address}}

Address1 {{Address1}}

Address2 {{Address2}}

URL {{URL}}

Domain {{Domain}}

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 125
Values Tags

City {{City}}

Province {{Province}}

Zip code {{ZipCode}}

Country/Region {{Country}}

State {{State}}

Phone {{Phone}}

ID code {{IDCode}}

In addition, values and tags that are supported for self-registered users, Password being the exception, can
also be applied to the email notification administrators receive when users self-register. In this case, the
UserRegistration.NotificationAdmin.Body key is used.

Related Information

User Registration [page 123]

4.3 Users

The Users administration page enables you to manage the existing users in the system and add new ones.

To view a list of all users in the system or add new users, go to Setup Users Users . A list of all existing
users displays, and their total number is visible in the top-right corner of the page.

Users can be filtered by specific and advanced criteria. To quickly filter users, enter one of the following search
queries in the search box:

• username
• first name
• last name
• user type
• email address

Additionally, when using the Advanced Search, users can be filtered by:

• username
• first name
• last name
• user type
• email
• company
• address

SAP CPQ Setup and Administration Guide


126 PUBLIC User Administration
• ZIP code
• managing parent
• ordering parent
• approval parent
• territory
• active status
• the name of the administrator who created them
• created date
• the name of the administrator who modified them
• modified date
• whether access to support is given or not
• federation ID.

Values in all columns can be sorted in ascending/descending order by clicking the column headings. Clicking

opens a pop-up where you can select the columns displayed on the Users page. Alternatively, clicking
the check mark in the upper-right corner of the Display Settings pop-up selects all columns.

 Note

The additional columns display in the grid only the first time they’re added.

Editing user’s information is done by clicking the Edit button next to the corresponding username. In addition,

copying or deleting a user is done by clicking and selecting the appropriate action.

Creating a New User

To create new user, go to Setup Users Add New User . All the information needed to create a user is
organized into the following four tabs: General, Address, Date and Number Settings, Additional Settings, and
Custom Fields. The Custom Fields tab contains all user custom fields [page 142].

General Tab
On the General tab, you define general information for the new user.

 Note

All fields must be filled out.

1. Enter user’s personal information.


2. Enable or disable the Active toggle switch to indicate whether the user is active.
The toggle switch is enabled by default. When the toggle switch is disabled, the user isn’t able to log into
SAP CPQ and doesn’t receive email notifications.
3. Check Is SSO if the user will log in with Federated Single Sign-On (FSSO) . Federation ID must also be
entered below for this method to work.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 127
4. Administrators can grant access to the SAP CPQ Support team from the Setup by enabling the Grant
Access to support toggle switch. After the toggle switch is activated, a date and a ticket number fields
display.
• Set an expiration date in the date field to limit the logon access. You can, either manually input the
date, or click the calendar icon to select the date. When the specified date expires, account access will
be revoked. To cancel access to the support manually, deactivate the Grant Access to support toggle
and save changes. Whether access to support is granted or revoked, all changes made on the User
Page are reflected in the Setup and vice versa.
• In the Ticket Number field, enter the number of the ticket for which you are specifically requesting
assistance and save changes.
In the grid with the list of existing users on the Users page you can find the Grant Access to support column
which specifies whether access to a user’s account has been granted to the support or not. Accordingly,
users can be filtered based on whether access to support is given or not.
5. In Username, define a username for the new user.
6. Enter the date until which the password will be valid in the Password Expiration Date field.
This field is required if the Password Validity Period application parameter is set to a certain number of
days. In that case, the date until which the password is valid is automatically calculated, but the field is still
editable.

 Note

You can't create, import or change passwords of other regular users and SSO users during user
creation either via user import/export, user management in the Setup, or API.

7. Enable the Set temporary password toggle switch to create a temporary password for your underlying
users [page 131].
Administrators and users with delegated authority can create temporary passwords, which is useful when
users forget their passwords, when their accounts are locked, or when they have issues with resetting the
existing password.

 Note

Enabling temporary passwords should be avoided whenever possible. Even though the password is
temporary, it is still shared with other users before it’s changed on the first login, and this may
potentially lead to security issues.

8. In User Type, select a user type the user belongs to.


The field offers autocomplete suggestions as you start typing a search query. User types matching the
input are displayed as suggestions.
1. (Optional) Click Add New User Type to define a new user type.
In the pop-up, you can only define basic user type information. For additional settings, go to Setup
Users User Types .
9. Enable/disable the Administrator toggle switch to indicate whether the user is the administrator.
The toggle switch is disabled by default when creating a new user.
10. Select a company the user belongs to.
The field offers autocomplete suggestions as you start typing a search query.
1. (Optional) Click Add New Company to define a new company.
In the pop-up, you can only define basic company information. For additional settings, go to Setup
Users Companies .
11. Select a brand from the Branding dropdown list.

SAP CPQ Setup and Administration Guide


128 PUBLIC User Administration
The selected brand determines the colors, logos, and visual styles the user sees in SAP CPQ, as defined in
Setup UI Design Branding .
12. Enter a title for the user (for example Mr.).
13. In Federation Id, enter a unique username that is used when federation is set up for the tenant. Federation
Id should be entered only if an SSO user is created.
If the application parameter Use Global User Id as Federation Identifier is set to TRUE, Global User Id field
is displayed instead of Federation Id in user administration and that ID is used to map users. Change of the
Global User ID should be an exceptional case since its value is used in integrations and any change may
affect the setup.
14. Click Save.
Alternatively, to save your changes and go back to the Users administration page, click Save & Go Back.

Address

On the Address tab, you define the contact information for the new user. The following table explains each field
displayed under the Address tab.

Field Description

Address(1) The primary address of the user.

Address(2) The secondary address of the user.

City The city where the user resides

Province The province where the user resides

ZIP Code The ZIP or postal code of the user’s address.

Country/Region The country/region/region where the user resides.

State The state where the user resides.

Phone The user's phone number.

Fax The user’s fax number.

Territory The territory the user belongs to if a business is organized


into different areas (for example EMEA), as defined in
Setup General Territories .

ID Code A unique identifier of the user’s address.

 Tip

Clicking Save & Go Back saves your changes and takes you back to the Users administration page.

Date and Number Settings

On the Date and Number Settings tab, you define how the user views dates and numbers in SAP CPQ. The
following table explains each field displayed under the Date and Number Settings tab.

Field Description

Date Format The format the user views dates in.

Date Separator The separator used between day/month/year in the date.

Number Format The format of numbers in SAP CPQ.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 129
Field Description

User Time Zone The user’s time zone.

Allow User to Change Time Zone When the toggle switch is enabled, the user is allowed to
change the time zone.

 Tip

Clicking Save & Go Back saves your changes and takes you back to the Users administration page.

Additional Settings
On the Additional Settings tab, you define additional information for the new user. Depending on the type, the
settings are grouped into Market and Hierarchy sections.

 Note

All fields must be filled out.

The following table explains each field displayed under the Additional Settings tab.

Field Description

Show Quotes Within (up to the current date) Specifies which quotes are visible to the user.

Default Market The default market retrieved for all new quotes.

Default Pricebook The default pricebook retrieved for all new quotes.

Default Dictionary A dictionary with default SAP CPQ UI text (button labels,
tooltips, warning messages, and so on).

Approval Parent Receives quotes submitted for approval. Whether or not the
user’s approval parent receives a quote depends on how the
rules are set up on the Approval Rules page.

Managing parent Can edit or delete child users. The managing parent can
also reassign quotes between child users.

Ordering Parent Receives all orders placed by child users for confirmation.

Federation Id A unique username used when federation is set up for the


tenant.

 Tip

Clicking Save & Go Back saves your changes and takes you back to the Users administration page.

By default, regular users (who aren’t using the Federated Single Sign-On to log into SAP CPQ) receive two
emails. One of these emails contains a username and a domain, while the other one contains an URL, which the
email recipient needs to use in order to create a password. You can prevent SAP CPQ from sending emails after
registration is complete if the Do not email login details to users created by admin parameter is set to TRUE.
SSO users don’t receive any emails after they are created, regardless of the selected value of Do not email login
details to users created by admin as they are managed by another system, the client’s internal IdP. They can
only use Federated Single Sign-On method to log in. .

SAP CPQ Setup and Administration Guide


130 PUBLIC User Administration
 Note

Companies who have SSO users to whom they wish to send email notifications [page 439] attached
to actions (for example, notifications for quote approval or quote rejection) need to update the
SAP CPQ URL which will be sent as a part of the emails. For example, if the URL was http://
tenantID.webcomcpq.com/Login.aspx, it should now consist of the user's IdP like this: https://
tenantID.webcomcpq.com/fed/domainName/Login.aspx?quote=CFCECFCACFCFC7CA.

Related Information

User Administration [page 120]

4.3.1 Create Temporary Password

A temporary password gives users a possibility to log into SAP CPQ just to be able to create a new password
which won’t be shared with the administrator.

Administrators and users with delegated authority can create temporary passwords for their underlying users
in the General tab of the user creation process. Temporary passwords are useful in case users forget their
passwords, their accounts are locked, or they have issues with resetting the existing password.

To enable creating temporary passwords, set the application parameter Allow Admins to Set Temporary
Password to TRUE.

The application parameter Do not email login details to users created by admin defines whether the user will
receive email notifications. If the parameter is set to FALSE, the following occurs:

• if a temporary password is set for a new user, the user receives one email with the username, and another
email with the URL and the domain for which the temporary password was set.
• if a temporary password is set for an existing user, the user receives only the email with the URL and the
domain for which the temporary password was set.

In either case, you must communicate the temporary password to the user outside SAP CPQ (for exampe, via
email). After the user logs in with the provided temporary password, they are redirected to set a new password.

 Note

This feature is available only for regular SAP CPQ users, not for SSO users.

The temporary password can also be set up through other features for creating/updating users:

• import of users via Excel


• SOAP and REST users APIs
• in User Menu by users with delegated authority.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 131
Related Information

Users [page 126]


Application Parameters [page 637]

4.3.2 Forgot Your Password

If you forgot your password, you can reset it and regain access to your account. If you attempt to reset your
password three times within five minutes, you have to wait an hour before submitting a new password reset
request.

Procedure

1. On the login page, click Forgot your password?.

You're redirected to a new page.


2. Enter your email and the domain name.
3. Click Submit.

Instructions on how to reset your password are sent to your email address.
4. Go to your inbox and find an email with the subject Reset your password.
5. Click the Reset Password button in the email or copy and paste the provided link to your browser.

You're redirected to a new page.

 Note

The password reset link is valid for 30 minutes.

6. Enter your new password in the dedicated fields.

To ensure that your new password meets the required criteria, refer to the Password Requirements section.
7. Click Submit.

You're redirected to the login page. An email stating that the password is successfully changed is sent to
your address.
8. Go to the login page and use your new password to log in.

SAP CPQ Setup and Administration Guide


132 PUBLIC User Administration
4.3.3 Change Password

After logging in, you can easily change your password in User Page or in user settings in Setup. We advise
changing the password regularly to ensure better security and protect the privacy of your data.

User Page

1. Click your name in the top-right corner.


2. Click User Page in the menu.
3. Enter your username, the current and the new password.
4. Click Change Password.
A confirmation message displays.

Setup

In Users [page 126], administrators can create temporary passwords for users or define password expiration
periods.

4.4 Companies

Companies are organizations SAP CPQ users belong to.

Once companies are set up, you can assign individual users to a particular company. To view a list of all
companies in the system or add new companies, go to Setup Users Companies . A list of all existing
companies displays, and their total number is visible in the top-right corner of the page.

Companies can be filtered by specific and advanced criteria. To quickly filter companies, enter one of the
following search queries in the search box:

• name
• company code
• address(1)
• city
• state
• country/region

Additionally, when using the Advanced Search, companies can be filtered by:

• name
• company code
• address

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 133
• city
• state
• country/region

Values in all columns can be sorted in ascending/descending order by clicking the column headings.

Clicking opens a pop-up where you can select the columns that are displayed on the Companies
page. Alternatively, clicking the check mark in the upper-right corner of the Display Settings pop-up selects all
columns.

 Note

The additional columns display in the grid only the first time they’re added.

Editing company information is done by clicking the Edit button next to the corresponding company name. In

addition, copying or deleting a company is done by clicking and selecting the appropriate action.

Add a New Company [page 134]


To create a new company, go to Setup Users Companies Add new company

Companies Export/Import [page 136]


In organizations that support multiple companies within a single SAP CPQ environment, administrators
can easily export/import multiple companies at once

4.4.1 Add a New Company

To create a new company, go to Setup Users Companies Add new company

All the information needed to create a company is organized into the following two tabs: General and
Permissions.

General

On the General tab, you define general information for the new company.

 Note

Name and Company Code are the only required fields.

1. In Name, enter a name for the company.


System ID is automatically created based on the name entered in Name.
2. In Company Code, enter a unique identifier for the company (up to 25 characters).
If there are several companies with the same name in the system, unique company codes help you assign
the right company to a user.

SAP CPQ Setup and Administration Guide


134 PUBLIC User Administration
3. Select a location for the company from Country/Region and State dropdown lists.
4. In Address(1), Address(2), City and ZIP Code, enter address information for the company.
5. In Company Logo, select a logo for the company from the drop-down list or upload a new one.
These formats are supported: .jpg, .jpeg, .png, .gif, .bmp, .tif, .jfif and .tiff.
6. In Phone, Fax and E-mail, enter company’s contact information.
7. If applicable, in CRM Account ID, enter a unique identifier the company has in a CRM system.
8. Enable or disable the Create Customer Record toggle switch.
When the toggle switch is enabled, the system creates a global customer [page 550] using the information
entered for the company.
9. Click Save.
Alternatively, to save your changes and go back to the Companies page, click Save & Go Back.

Permissions

On the Permissions tab, you define permission groups that can administer the company. To move permission
groups from Available Permission Groups to Selected Permission Groups, you can:

• Type a search query into the Available Permissions Groups search box.
Permission groups matching the entered search query display as you type.
• Expand the group (for example Companies) and select a specific group from the list that displays (for
example SAP).
Alternatively, to expand all available permission groups, click Expand All. Selecting a specific permission
group from the list is done by either clicking on the name of the group in question or by clicking the arrow
which appears when hovering over the name of the group.
• Add all groups belonging to the main permission group.
To do so, hover over the name of the main permission group and click either Add all or the rightward-
pointing arrow.
The selected permission groups are listed in Selected Permission Groups.

Additionally, each of the selected permission groups can be removed from the list. Alternatively, to remove all
selected permission groups, click Clear All. Once permission groups are selected, click Save.

Alternatively, if you want to save your changes and go back to the Companies page, click Save and Go back.
Alternatively, if you want to save your changes and go back to the Companies page, click Save and Go back.

Related Information

Companies [page 133]


Companies Export/Import [page 136]
User Administration [page 120]

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 135
4.4.2 Companies Export/Import

In organizations that support multiple companies within a single SAP CPQ environment, administrators can
easily export/import multiple companies at once

In the Companies Export/Import page you can export/import companies following one of these workflows:

• export all companies in SAP CPQ


• download a template > fill out company details > import the file
• export all companies > change details and add new companies > import the file.

Import Template

The sample template lets you easily upload multiple new companies in SAP CPQ. To download the import
template, click Download Template in the Companies Export/Import page. The Excel file contains two sheets:

• Companies - enter details of the companies that you wish to import in this sheet.
• Important info - displays which fields are required and what are the restrictions for some fields. Required
fields are Company Name, Country/Region, Company code and System Id. Do not edit this sheet.

Update Existing and Add New Companies [page 136]


This procedure describes how to export all companies in the system, change their details, add new
companies, and import the updates in SAP CPQ.

4.4.2.1 Update Existing and Add New Companies

This procedure describes how to export all companies in the system, change their details, add new companies,
and import the updates in SAP CPQ.

Context

The best practice for importing new companies in the system is to do it through the import template. To update
existing company details, you need to export them from the system, change the data and then import them
again.

Procedure

1. Click Export.

A file is downloaded to your computer.


2. Populate the file with new data.

SAP CPQ Setup and Administration Guide


136 PUBLIC User Administration
 Note

Company Name, Country/Region, State, Company code, and System Id are required fields. Don’t
populate the MEMBER_ID column as these values are automatically generated by the system.
Additionally, you shouldn’t change the member id of the existing companies.

3. In Import, click .
4. Select the file for import.
5. Click Apply Template.

A message informs you that the companies are imported successfully.

In case of an unsuccessful import, an error message pops up.


6. Click Download report and open the file.

Invalid records are marked in red and errors are described in the Error Message column.

Related Information

Companies Export/Import [page 136]


Companies [page 133]
User Administration [page 120]

4.5 Log In as a Proxy User

If you have been granted access to another user’s account, you can log into SAP CPQ on their behalf to
troubleshoot and resolve the issues they encountered.

 Note

The visibility of the Login as Proxy User page in default SAP CPQ tenants is now assigned via the Access
Rights feature. It can’t be accessed in other tenants regardless of the assigned access rights.

You can log in as a proxy user for both regular and SSO users [page 126].

Administrator Logging In as a Proxy User

If you’re an administrator and a user granted you access to their account, take the following steps to log in on
their behalf.

1. Go to Setup Users Users .


2. Find the user who granted you access to their account.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 137
3. Click next to the username and select Login as Proxy User.
The page reloads, and you’re automatically logged in as the user who granted you access. You remain
logged in as a proxy user until you log out. Furthermore, your login is logged in the User Actions tab of the
Audit Trail.

Related Information

User Administration [page 120]


Users [page 126]
User Registration [page 123]

4.6 Permission Groups

The Permission Groups section in Setup Users allows administrators to add new and modify existing
permission groups.

Users should be included in a permission group to share access rights over SAP CPQ objects (Pricebooks,
Tables on Quotes, etc.). As a result, administrators can assign access rights to multiple users in one click.

Permission groups can be filtered by specific and advanced criteria. To quickly filter permission groups, enter
one of the following search queries in the search box:

• permission group name


• member name

Group members can be quickly filtered by their username.

Additionally, when using the Advanced Search, permission groups can be filtered by:

• permission group name


• description
• members

User Search Logic

To add users to a group, administrators can perform simple and/or advanced search or browse for specific
users. To do a simple search, you select User Types, Companies, Markets, and Brands. The logic AND is applied
between each of the groups. However, if multiple values are selected within a group, the logic OR is applied.
When combining simple and advanced search, the logic AND is applied. The advanced search is performed
through formulas you can create when Advanced mode is selected.

SAP CPQ Setup and Administration Guide


138 PUBLIC User Administration
Example

To enable the same permission rights to all Sales Administrators who work in SAP Sales Cloud, you should
combine simple and advanced search. Selecting Sales and Sales Management user types and SAP Sales
Cloud company filters a group of Users that match both criteria. After an advanced formula such as
CTX(Visitor.IsAdmin ) is applied, the group is additionally filtered to Administrators. Due to AND logic between
the simple and advanced search, the Permission Group contains Sales Administrators from SAP Sales Cloud.

Advanced Mode

The Advanced Mode allows you to filter Users per custom fields and also per fields that aren’t included
in the simple search. To perform a search, you create a formula using SAP CPQ tags. Note that formulas
should primarily be used to inspect the field values for the logged User. Retrieving values from the Quote and
Configurator-related fields won’t return valid results.

Re-Evaluating Permission Group Formulas

Once a Permission Group formula is created, the system re-evaluates it on the following occasions to include/
exclude Users:

• When Users log in.


• After saving personal details on the User Page.
• When the Quote is loaded.
• After the Quote market is changed.

If you create a formula inspecting a Quote field, the system doesn't re-evaluate it every time a change is made
on the respective Quote but only when the Quote is loaded. The re-evaluation of formulas isn’t triggered by
the changes on Quotes and consequently, the formula filters the same Users as before the change was made.
Reloading the Quote re-evaluates the formula and corresponding Users are included in the Permission Group.

Create a Permission Group [page 140]


To create a Permission Group, you can either apply simple and advanced filter criteria or browse for
exact Users you wish to include in the group.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 139
4.6.1 Create a Permission Group

To create a Permission Group, you can either apply simple and advanced filter criteria or browse for exact
Users you wish to include in the group.

Procedure

1. In Setup, access Users Permission Groups .


2. Define the name of the permission group. The System Id is automatically generated as you enter the name
of the group.
3. (Optional) In Description, describe the group and add any additional notes you might have.
4. In Logic Between Selected Permission Groups, select one of the following values:
a. AND - the user must belong to all selected permission groups to be included in the main permission
group.
b. OR - the user must belong to at least one of the selected permission groups to be included in the main
permission group.
5. Move permission groups from Available Permission Groups to Selected Permission Groups.
a. Type a search query into the Available Permissions Groups search box.
b. Expand the group (for example, Companies) and select a specific group from the list that displays (for
example, SAP Sales Cloud). Alternatively, to expand all available permission groups, click Expand All.
Selecting a specific permission group from the list is done by either clicking on the name of the group
in question or by clicking the arrow that appears when hovering over the name of the group.
c. Add all groups belonging to the main permission group. To do so, hover over the name of the main
permission group and click either Add all or the rightward-pointing arrow. The selected permission
groups are listed in Selected Permission Groups.
d. Enable the Advanced mode toggle switch for a more complex filtering. In advanced mode, you can
create formulas to inspect values of User custom fields.
e. Click Formula Builder and a formula builder pops up.
f. Create an advanced formula using tags. The system accepts only the tags that pull values from the
fields of the logged User. You can’t pull values from the Quote or the Configurator context.
g. Click Save. The filtered Users are included in the group.

 Note

If you know the names of Users you wish to include, you should skip the simple and advanced search
and enter their name in the Users search field. Multiple selections is allowed and the list of Users is
displayed below the search field.

For more details on defining permission groups, click See how to combine fields into permission group,
placed above Available Permission Groups.

SAP CPQ Setup and Administration Guide


140 PUBLIC User Administration
Related Information

Permission Groups [page 138]


User Administration [page 120]

4.7 Quick Search and Advanced Search

The SAP CPQ catalog can be searched via the quick search or the advanced search.

Quick Search

Catalog Quick Search works with an autocomplete option. Users conduct the search by entering a key word(s)
for the name/description of the product they are looking for. Quick Search will look for the product’s name/
description in the user selected language. If it doesn’t find the translation, Quick Search will then look for the
product name/description in the user default dictionary. The Quick Search result will always contain an entire
text body of the product name/description that users enter. In other words, if you search for a product with
the word “window” in it, and you enter the word “indow,” your Quick Search result will comprise all products
containing the word “indow” in them.

We have defined several parameters to improve search performance in Catalog Quick Search with an
autocomplete option. For now, if a number of products in the system exceeds 100,000 for search by Part
Number and Product Name, and 10,000 for search by Description, Word or Phrase, the words entered in the
Search box must equal the starting sequence of the text searched. Hidden parameters may be modified by SAP
CPQ administrators in the capacity that will not affect search performance.

These parameters are not used when using options Show more results and Advanced Search.

Advanced Search

Advanced search works a bit differently. When the user enters the search box field, Advanced Search will divide
the text into word segments (the search will follow the same search logic of the user selected language; if
it doesn’t find the translation, Advanced Search will then look for the product name/description in the user
default dictionary). The role of the functionality’s application parameter, “When users enter several words in
search box, SAP CPQ will find products based on each entered word (instead of searching based on entire
phrase)” is to define if the result of the product name or description must contain all individual words in the text
entered, (though not necessarily in the same order) within their textual values; or if it can contain at least one
word from the text entered.

Parameter=FALSE - must contain all words

Parameter=TRUE - must contain at least one word

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 141
 Note

The explanation provided in this document refers only to using the search by entering the product name/
description field.

4.8 User Custom Fields

User custom fields allow you to add additional fields for users.

To view a list of all user custom fields in the system and/or add new custom fields, go to Setup Users
User Custom Fields . A list of all existing user custom fields displays, and their total number is visible in the
top-right corner of the page.

User custom fields can be filtered by specific and advanced criteria. To quickly filter user custom fields, enter
one of the following search queries in the search box:

• name
• label

Additionally, when using the Advanced Search, user custom fields can be filtered by:

• name
• label
• rank
• type
• whether information logging is suppressed or not.

Values in all columns can be sorted in ascending/descending order by clicking the column headings.

Clicking opens a pop-up where you can select the columns displayed on the User Custom Fields
page. Alternatively, clicking the check mark in the upper-right corner of the Display Settings pop-up selects all
columns.

 Note

The additional columns display in the grid only the first time they’re added.

Editing a user custom field is done by clicking the Edit button next to the corresponding field name. In addition,

copying or deleting a user custom field is done by clicking and selecting the appropriate action.

SAP CPQ Setup and Administration Guide


142 PUBLIC User Administration
Adding a New User Custom Field

To create a new user custom field, go to Setup Users User Custom Fields Add New User Custom
Field . All the information needed to create a user custom field is organized into the following two tabs:
General and Permissions.

 Note

Once created, the user custom field is displayed:

• below standard fields in Users Edit Additional Settings


• on the User Registration page
• in Setup Users Guest User and Default User SettingsGuest User and Default User Settings
Default User Settings for Self-Registered Users . .

General
On the General tab, you define general information for the new user custom field.

1. In Name, enter a name for the new user custom field.


2. (Optional) In Label, enter a label for the new user custom field.
Even though label is automatically created based on the name entered in Name, you can enter a different
label or leave the field blank.
3. In Rank, click Set Rank.
A pop-up displays.
1. Drag and drop the user custom field to set its rank.
2. Click Save.
4. Select the type of the user custom field from the Type dropdown list.
• Free Form - the user custom field appears as a text box in which the user inputs a value. There are no
restrictions on what the user can enter.
• Date - the user custom field appears as a text box in which the user enters a date. The date the user
enters must match the date format set on User Page.
• Attribute - the user custom field is attached to an attribute. Selecting this option triggers another
dropdown list to display where the user can select the attribute that the field will be connected to.
• Long Text - the user custom field appears as a large text box in which the user can enter multiple lines
of text. There are no restrictions on what the user can enter.
5. (Optional) Enable the Suppress Information Logging toggle switch.
Previous and new values aren’t logged in the Audit Trail.
6. Click Save.
Alternatively, to save your changes and go back to the User Custom Fields page, click Save & Go Back.

Permissions
On the Permissions tab, you define user custom field permissions. The tab displays:

• Same permission for all Permission Groups - the switch is enabled by default, allowing all users in the
system the same type of access to the user custom field.
• Field permission dropdown list - here you select the type of access for the users.
• Editable - the user custom field can be edited.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 143
• Read-Only - the user custom field can’t be edited.
• Required - the user custom field must be defined.
• Hidden - the user custom field isn’t displayed to everyone.

To grant the same access to users, leave the toggle switch enabled and select the type of access from the
dropdown list.

To limit the access, disable the toggle switch.

When the toggle switch is disabled, you define permission groups for each of the four field permissions by
moving permission groups from Available Permission Groups to Selected Permission Groups. If a user custom
field is hidden for all permission groups, it can’t be seen or changed on User Page > Modify Personal Details, but
the local administrator can still manage that field for the users.

Related Information

User Administration [page 120]


Users [page 126]

4.9 User Types

User types control how users interact with the system.

For example, products, reports and workflow actions can have permissions set according to user types. To view
a list of all user types in the system and/or add new user types, go to Setup Users User Types . A list of
all existing user types displays, and their total number is visible in the top right corner of the page. User types
can be filtered by specific and advanced criteria. User types can be quickly filtered by group name. Additionally,
when using the Advanced Search, user types can be filtered by:

• group name
• group description
• XSLT file
• start category
• whether or not a user is able to create a quote from an incomplete configuration.

Values in all columns can be sorted in ascending/descending order by clicking the column headings. Clicking

opens a pop-up where you can select the columns that will be displayed on the User Types page.
Alternatively, clicking the check mark in the upper-right corner of the Display Settings pop-up selects all
columns.

 Note

The additional columns will display in the grid only the first time they are added.

SAP CPQ Setup and Administration Guide


144 PUBLIC User Administration
Editing a user type is done by clicking the Edit button next to the corresponding group name. In addition,

copying or deleting a user type is done by clicking and selecting the appropriate action.

Add a New User Type [page 145]


You can add a new user type in Setup Users User Types Add New User Type .

Legacy UI Design [page 147]


XSL and XSLT files, which are also referred to as transformations, are used to customize the layout
and the information displayed on the following pages: Shopping cart/Quotes, My Quotes, Waiting for
Approval, Place Order, Other Quotes, and Preview.

Setting Up a Landing Page [page 147]


To define where users land after they exit Setup, log into SAP CPQ and land from CRM, these settings
need to be managed.

New Project/Quotation Landing Page [page 148]


After users click New Project/Quotation, the system evaluates three parameters for redirecting users to
a specific page.

4.9.1 Add a New User Type

You can add a new user type in Setup Users User Types Add New User Type .

Context

Group name is the only required field. However, it’s recommended to fill out other fields too.

Procedure

1. In Group name, enter a name for the new user type.

System ID is automatically created based on the name entered in Group name.


2. In Description, enter a more detailed description of the group.
3. Define the start page by clicking one of the following:

• Select Product – a list of configurable and parent/child product items. The system saves the system ID
of the selected product so it can be used in scripting (User.UserType.LandingProductSystemId).
• Select Page – a predefined list of pages:
• Home Page (default) – default page on which users land, for example Catalog
• Quote List – a list of existing quotes.
• New Quote – an empty quote.
• New Quote – Customer Tab – the Customer Info tab of an empty quote.

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 145
• Catalog – With empty quote – the Catalog page (the system creates an empty quote in the
background).
• Catalog – catalog with product items.
• Approvals – list of quotes in the Waiting for Approval tab.
4. Click Start category to define the category users belonging to the user type land to in SAP CPQ.
5. In the Categories pop-up, select a product category on which users land.

Categories with a downward-facing arrow next to it contain subcategories. Clicking the arrow expands the
category.

 Note

For more details on setting up landing page for a user type refer to Setting Up a Landing Page [page
147].

6. Enable or disable the displayed toggle switches:


• Display tree navigation – determines whether category tree is displayed in the catalog in classic design.
• Show Fields in a Quote Search/Filter – determines whether the advanced search is available on the
Existing Quotes page. For more information on how to define search fields that are available to users,
refer to Search Fields [page 366].
• When creating a new quote, require customer to be selected first – determines whether users are
redirected to fill out customer information first when creating a new quote.
• Show prices – determines whether users belonging to the user group are able to see prices in the
catalog (all available views), detailed view, configurator, and shopping cart. The visibility of prices in the
shopping cart can be controlled through XSL transformation.
• Allow adding incomplete items – determines whether users belonging to the user group are able to
create a quote from an incomplete configuration. When the toggle switch is disabled, a message
displays, notifying users from the group that the configuration is incomplete and needs to be complete
before a quote can be created.
7. From the Default category view dropdown list, select the view that is used as the default view for categories
in the Catalog.

The options are as follows: Tabular, List, and Custom.


8. In Not visible views, select the views that won't be available to users in the Catalog when they use the SAP
CPQ classic design.
9. In Legacy UI Design, select an existing XSLT file or upload a new one for each visual style displayed.

More information is available in Legacy UI Design [page 147].


10. In UI Design, add a custom template.
11. Click Save.

Alternatively, to save your changes and go back to the User Types page, click Save & Go Back.

 Note

Selections made in Start page and Start category apply to users logging directly into SAP CPQ and
users landing from external CRM systems (Salesforce, MS Dynamics and NetSuite CRM systems).

SAP CPQ Setup and Administration Guide


146 PUBLIC User Administration
Related Information

User Types [page 144]


User Administration [page 120]

4.9.2 Legacy UI Design

XSL and XSLT files, which are also referred to as transformations, are used to customize the layout and the
information displayed on the following pages: Shopping cart/Quotes, My Quotes, Waiting for Approval, Place
Order, Other Quotes, and Preview.

A different XSL/XSLT file can be assigned to each visual style available in the Legacy UI Design section
by selecting a file from the dropdown list. Alternatively, files specially tailored for company’s needs can be
uploaded by clicking Upload new file. You can download or delete the XSL or XSLT files you selected or
uploaded. If no files are selected for the above-mentioned pages, the system uses the default transformations
defined in Setup General Application Parameters .

The following table explains Visual Style application parameters.

NameName Description

Visual styles (Shopping cart/Quotes) Defines the XSL file that is used to render a quote page.

Visual Style (My Quotes) Refers to the tab displayed on the Existing Quotes page.

Visual Style (Waiting For Approval) Refers to the tab displayed on the Existing Quotes page.

Visual Style (Place Order) Defines the XSL file for the screen that shows a summary of
the order.

Visual Style (Other Quotes) Refers to the tab displayed on the Existing Quotes page.

Visual Style (Preview) Defines the XSL file for the page used to display a quote
preview (Preview action).

Related Information

User Types [page 144]


User Administration [page 120]

4.9.3 Setting Up a Landing Page

To define where users land after they exit Setup, log into SAP CPQ and land from CRM, these settings need to
be managed.

• Start page and Start category in Users User Types

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 147
• When creating a new quote, require customer to be selected first - toggle switch in Users User Types .
In previous versions, this option was named Customer Required and it has kept the same behavior.
• Default (Pre-populate) with User Info and Default(Pre-populate) with User's Company Info checkboxes
in Customers/Customer Roles Customer Role Defaults for the Bill To customer role. When these
options are enabled, the system prepopulates new quotes with the customer bill to information and the
company information.

To determine the landing page for a user, the system first evaluates the start page. If the start page isn’t
defined, users land into Catalog, regardless of the value of other parameters. If the start page is Catalog -
With empty quote and New Quote, the system also evaluates the value of When creating a new quote, require
customer to be selected first, Default (Pre-populate) with User Info, and Default(Pre-populate) with User's
Company Info. If the selected start page isn’t in the quote context, the parameters aren’t treated and users land
to the selected start page.

 Note

If When creating a new quote, require customer to be selected first is enabled and the parameters for
prepopulating user and company info are on, users land into the Catalog and an empty quote is created in
the background.

Related Information

User Types [page 144]


User Administration [page 120]

4.9.4 New Project/Quotation Landing Page


After users click New Project/Quotation, the system evaluates three parameters for redirecting users to a
specific page.

The parameters in question are the following:

• When creating a new quote, require customer to be selected first


• Create Empty Quote First - application parameter in General Application Parameters Shopping Cart
and Quotes .
• Default (Pre-populate) with User Info and Default (Pre-populate) with User's Company Info for the Bill To
customer role.

If When creating a new quote, require customer to be selected first is on and the two options for prepopulating
data on the Customer Role Defaults page are selected, users land into Catalog with an empty quote in
the background since the Customer Info tab has been prepopulated. If When creating a new quote, require
customer to be selected first is disabled and Create Empty Quote First is TRUE, users land on the Quotation tab
of an empty quote.

 Note

Whenever When creating a new quote, require customer to be selected first is enabled, regardless of other
settings, a new quote is created in the system. The only scenario in which a new quote isn't created is if

SAP CPQ Setup and Administration Guide


148 PUBLIC User Administration
both When creating a new quote, require customer to be selected first and Create Empty Quote First are
disabled.

Related Information

User Types [page 144]


User Administration [page 120]

SAP CPQ Setup and Administration Guide


User Administration PUBLIC 149
5 Quotes Administration

This section contains description of all features that are related to creating and managing quotes in SAP CPQ.

Document Generation [page 152]


Document Generation allows users to transfer quote details to documents that can be printed,
downloaded, and emailed.

Quote 2.0 [page 199]


Quote 2.0 is the improved quote engine available since June 2018. The new quote engine was
developed as a part of the initiative to make SAP CPQ the state-of-the-art software that allows users to
create large quotes more quickly than in Quote 1.0.

Quote Tables [page 347]


SAP CPQ supports tabular structure for displaying dynamic data on Quotes. Quote Tables can be a
useful resource for displaying Customer purchase history, capturing payment details, etc.

Quote Tab Permissions [page 359]


The Quote Tab Permissions allows managing visibility of the quote tabs based on the workflow statuses
and permission groups.

Custom Quote Fields [page 360]


The Custom Fields administration allows creating custom fields in the shopping cart for users to
include additional information, such as terms of payment or other specific information to your
company.

Key Attributes [page 364]


Key attributes provide you with an option to set up attributes as search criteria on the user side.

Search Fields [page 366]


The Search Fields administration allows controlling which fields will be available for users to filter their
load quote page by.

Quote Visibility [page 367]


As an administrator, you can use quote visibility rules to define which quotes are accessible to users in
the Other Quotes tab.

Reports [page 371]


The Reporting Module allows authorized users to create reports, such as how many configurations
have been completed in a certain time frame, who completed them, how many quotes were
generated or how many projects were created, their status, activities by departments, individual users,
customers, etc. SAP CPQ administrators can set these reports up by using the administrative interface
for the reporting module.

Cart Level Aggregates [page 378]

Bulk Deletion [page 379]


The Bulk Deletion section allows administrators to delete other users, their quotes or their customers.

Column Headings [page 380]


The Column Headings administrative section allows SAP CPQ administrators to control the columns
displayed to users on the Existing quotes page.

Email Customers / Quote Acceptance Settings [page 381]

SAP CPQ Setup and Administration Guide


150 PUBLIC Quotes Administration
This option can be used when there is need to customize default settings when sending an email after
generating documents.

Favorites [page 383]


Favorites will be presented to users in a widget that will be placed in different pages in SAP CPQ (quote,
catalog, configuration and special page for Favorites).

Images for Quote Actions [page 386]


The purpose of this feature is to enable images for quote actions so that users can easily spot them.

MRC Column in Existing Quotes [page 387]


The purpose of this feature is to allow MRC total amount as column in the list of existing quotes.

Quick Config (also referred to as Reverse Search ) [page 388]


The purpose of the Quick Config functionality is to provide a shortcut for searching and configuring the
configurable product at the same time.

Quick Product Search in the Quote [page 389]


Quick product search on ‘Add Products’ section is used for finding all types of product (simple or
configurable) or favorites by typing any part of its part number, product name or description.

Quote Item Custom Fields [page 391]


Custom fields on quote items are able to hold values of different types.

Quote Layout [page 394]


This functionality enables system administrators, and selected users, to personalize their shopping
cart/quote. This functionality is available in Responsive Design only.

Quote Revisions [page 396]


A quote revision is a copy of the quote from which the revision was created.

Create Quote Tab [page 397]


Quote tabs are used for organizing information on quotes.

Renewal Management (only Quote 1.0) [page 398]


Renewal of product and services is one of the key business operations in many industries, especially in
Service oriented industry.

Report Module [page 403]


This feature gives users a Reports and Dashboards Overview Page that includes a list of existing reports
in the system. As an SAP CPQ administrator, you can search reports and executed different actions on
them.

Standard Quote Fields [page 409]


Listed here are the standard quote fields that are present in the quote by default.

Scheduled Quote Deletion (Soft Delete) [page 414]


Deleting quotes from the list of quotes only removes them from the user interface (doesn't delete them
from the system) and marks them for a scheduled automatic deletion (soft delete).

Parallel Work on Quote 1.0 (Administrator Side) [page 415]


Quote 1.0 does not support parallel work on quotes. This means that only one user at a time can edit a
quote.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 151
5.1 Document Generation
Document Generation allows users to transfer quote details to documents that can be printed, downloaded,
and emailed.

This feature allows administrators to create document templates with tags that retrieve specific quote details.
Users, on their side, can generate documents based on those templates. The format and style of the resulting
printable document, including fonts, colors, and images, is entirely based on the layout of the document
template. Once users create a quote, they often need to email the details to customers for further review.
The Document Generation feature provides a practical solution for that, while providing administrators with
sufficient autonomy to define the format and the style of the document. Users can generate simple documents
with only one section, as well as section documents to be later included in multisection documents.

For data to be displayed in generated documents, you need to enter dedicated tags in the template. Each tag
can retrieve any specific quote details, configuration, customer, or user-related information that is meant to
be displayed in the output document. The list of all tags and a detailed explanation with examples is in the
Document Generation Tags [page 153] section. Alternatively, you can use the standard CTX tags instead of
quote template tags to retrieve data.

 Tip

If you need to create templates with basic quote details and you don't have experience with document
generation tags, use the Template Creation Tool.

In addition to tags, you can also insert any object that Microsoft Word supports into a Microsoft Word template,
such as an image or another document file (which can be another document template). Administrators can
configure document templates in Setup Quotes Document Generation Templates . This feature owes
its flexibility to the fact that administrators can define the visibility and format permissions, as well as select
additional fields and documents to be included in the generated document. Additionally, administrators can
enable users to administer templates on the user side.

Document Generation Tags [page 153]


Generated documents in SAP CPQ are populated via tags (you insert a dedicated tag into a template
and when users generate documents, specific data is retrieved from the system and displayed in the
document).

Create Document Generation Template [page 179]


The Document Generation Templates page displays a list of all document templates in the system,
letting you manage, create, and delete templates and translate their names.

Document Generation Engines [page 189]


SAP CPQ has two engines for generating documents: the old and the new document generation engine.

Setup Administration [page 190]


This page covers the workflow adjustments that need to be made to enable document generation and
the parameters that need to be set.

Manage Content Documents [page 192]


Documents that you wish to attach as additional content or additional documents to a generated
document must first be uploaded in the Manage Content Documents section in Setup Quotes .

Template Creation Tool [page 193]


The Template Creation Tool lets you create templates with basic document tags so you don’t need to
add them manually.

SAP CPQ Setup and Administration Guide


152 PUBLIC Quotes Administration
Document Generation User Journey [page 196]
The purpose of this feature is to visually guide new, less experienced or less frequent users through the
process of selecting products, creating a shopping cart, generating a quote document.

Document Generation Tips and Tricks [page 198]


This page lists the workarounds and methods of avoiding issues with document generation in SAP
CPQ.

5.1.1 Document Generation Tags


Generated documents in SAP CPQ are populated via tags (you insert a dedicated tag into a template and when
users generate documents, specific data is retrieved from the system and displayed in the document).

All available tags are grouped and described in these sections:

C Tags [page 154]


C tags retrieve data for each item in a quote. The system processes C tags only if they are within C2
tags.

Q Tags [page 155]


Q tags retrieve quote data (currency, user and owner data, etc.).

Miscellaneous Tags [page 160]


This page lists various tags that don't belong to any of the categories.

Special Tags [page 161]


Special tags begin with ST.

Custom Table Tags [page 162]


These tags retrieve data from custom tables.

Nested Products Tags [page 163]


To display parent/child product structure in generated documents, you should add MAIN tags for
children products inside parent MAIN tags.

Container Tags [page 166]


Use container tags to display data from a container in SAP CPQ in a generated document.

C2 Loop [page 167]


You can use the C2 tags when you wish the system to iterate through all items in a quote.

Conditions [page 170]


Standalone conditions and tag-dependent conditions let you restrict what data tags retrieve.

Quote Table Tags [page 172]

SAP Subscription Billing Integration Tags [page 172]


When SAP CPQ is integrated with SAP Subscription Billing, you can use these tags in the document
generation template to retrieve elements specific to the integration.

SECTIONS Loop [page 174]


The SECTIONS loop makes SAP CPQ iterate through all Solution Design sections and retrieve
information such as their names, hierarchy Ids, ranks (the ordinal numbers of the sections’ rows),
values from all their custom fields, and section totals.

Involved Parties Tags [page 176]


INVOLVED_PARTIES tags retrieve details of business partners and partner functions.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 153
Example Templates [page 178]
Here you can download Microsoft Word and Microsoft Excel templates that contain several frequently
used tags for document generation and CTX tags for retrieving specific data.

5.1.1.1 C Tags

C tags retrieve data for each item in a quote. The system processes C tags only if they are within C2 tags.

Tag Description

<<C_TAG()>> The basic C tag. Add any modeling tag (CTX tag, table tag,
etc.) in the parenthesis.

<<C_TAG_FILE()>> Retrieves a document from Manage Content Documents


and inserts it into the generated document for each item.
The name of the file must contain the extension. Only CTX,
TABLE and other tags from the SyntaxChecker can be used
for this tag.

<<C_VALUE(RolledUpCartItem)>> Retrieves rolled up quote item IDs (the ID of the items as


they display in the quote, not their ordinal numbers). For
example, 5.1, 5.2, etc.

<<C_EMPTY>> Returns an empty space.

<<C_INSERT_FILE_FROM_ATTRIBUTE()>> Inserts a file from a file attachment attribute.

<<C_ROLLED_UP_LIST>> Sum of extended list prices for all line items. Applicable only
when added to main items.

<<C_PIMAGE_LARGE>> Large product image set up for the product.

<<C_PIMAGE>> Product image.

<<C_PATTR()>> Takes any product level tag (for example,


<*Value(AttributeName)*>) and retrieves its value. It's used
only for attributes that are line items.

<<C_PATTR2()>> Same as <<C_PATTR(...)>>. It's left in for backward


compatibility.

<<C_PATTR_FILE()>> Retrieves a document (Word, PDF, and images) from


Manage Content Documents and inserts it into the
generated document. You can use this tag when there the
document you wish to insert contains dynamically retrieved
data. The name of the file must contain the extension.

<<C_PATTR_FILE_STATIC>> Retrieves a document (Word, PDF, and images) from


Manage Content Documents and inserts it into the
generated document. This tag should be used only when
the document that you want to insert doesn't have
any data that is dynamically retrieved via tags. In that
case, when there's dynamic data in the file, use the
<<C_PATTR_FILE()>> tag. The name of the file must
contain the extension.

<<C_PATTR_EXCEL()>> Retrieves an Excel document from Manage Content


Documents and inserts it into the generated document. This

SAP CPQ Setup and Administration Guide


154 PUBLIC Quotes Administration
Tag Description

tag should be used only when the document that you want
to insert doesn't have any data that is dynamically retrieved
via tags. In that case, when there's dynamic data in the
file, use the <<C_PATTR_FILE()>> tag. The name of the file
must contain the extension.

<<C_KEY_ATTR()>> Inserts the value of the key attribute.

The following C tags are considered to be obsolete and can be replaced with CTX tags [page 731].

<<C_ID>> Retrieves the ordinal number of the item in the quote. For
child items with cart IDs 5.1 and 5.2, for example, the tag
retrieves 6 and 7 as items' ID.

<<C_PNUM>> Part number of all quote items.

<<C_QTY>> Quantity of quote items.

<<C_DISCOUNT>> The discount percent of quote items.

<<C_USER_DESC>> The description that users entered for quote items.

<<C_DESC>> The description of quote items.

<<C_DESIRED>> The base price of quote items.

<<C_BASE>> Returns the base price of quote items.

<<C_LIST>> The list price of quote items.

<<C_PRICE>> Quote item total extended amount.

<<C_ROLLED_UP_DESIRED>> Sum of net prices for all line items. Applicable only when
added to main items.

<<C_ROLLED_UP_LIST>> Sum of extended list prices for all line items. Applicable only
when added to main items.

<<C_ROLLED_UP_BASE>> Sum of base list prices for all line items. Applicable only
when added to main items.

<<C_PTYPE>> Product type.

<<C_PNAME>> Product name.

5.1.1.2 Q Tags

Q tags retrieve quote data (currency, user and owner data, etc.).

The following tables display Q tags that you can add anywhere in the document template to retrieve data from
quotes. Q tags mainly retrieve general quote information (currency, user and owner data, etc.).

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 155
General Tags

Tag Description

<<Q_QUOTE(TOTALNET)>> Retrieves NRC quote total net price. Use the


CTX tag to retrieve the MRC total net price:
<<Q_TAG(<*CTX(Quote.Total.NetPrice.Display)*>)>>.

<<Q_QUOTE(BASE_TOTALNET)>> NRC total net price without the shipping amount.

<<Q_QUOTE(BASE_TOTAL)>> NRC total net price including the shipping amount.

<<Q_QUOTE(FREIGHT_METHOD)>> The name of the shipping method.

<<Q_QUOTE(FREIGHT)>> The shipping amount.

<<Q_QUOTE(COMMENT)>> Quote comment.

<<Q_QUOTE(VALID_UNTIL)>> Retrieves the date 30 days from the current date. To


retrieve a different date, specify it in the tag (for example,
<<Q_QUOTE(VALID_UNTIL+45)>> retrieves a date 45 days
from the current day). For different date formats, use a CTX
tag (for example, <*CTX(Date.AddDays(20).Format(yyyy-
MM-dd) )*>).

Quote User Tags

Tags Description

<<Q_USER(COMPANY)>> The name of the user's company.

<<Q_USER(USERNAME)>> The username of the user.

<<Q_USER(NAME)>> User's name.

<<Q_USER(TYPE)>> User's type.

<<Q_USER(EMAIL)>> User's email address.

<<Q_USER(ADDRESS1)>> User's first address.

<<Q_USER(ADDRESS2)>> User's second address.

<<Q_USER(CITY)>> User's city.

<<Q_USER(STATE)>> User's state.

<<Q_USER(ZIPCODE)>> User's zipcode.

<<Q_USER(COUNTRY)>> User's country/region.

<<Q_USER(PHONE)>> User's phone number.

<<Q_USER(FAX)>> User's fax number.

Other Tags
In these tags, we'll use an example custom field Company Policy.

Tag Example Description

<<Q_CUSTOM_FIELD()>> <<Q_CUSTOM_FIELD(Company Retrieves the value of the custom


Policy)>> field. This tag can be replaced with
<<Q_QP()>> which has the same
behavior.

SAP CPQ Setup and Administration Guide


156 PUBLIC Quotes Administration
Tag Example Description

<<Q_CUSTOM_FIELD_FILE()>> <<Q_CUSTOM_FIELD_FILE(Company Retrieves the document from the


Policy)>> custom field and inserts it into the
generated document. First, you need
to upload the document in Manage
Content Documents and enter the
file's name with the extension in the
Company Policy field. The format of
the template and the file that you wish
to insert must be the same (if you're
creating a .doc template, the file in
the custom field must have the .doc
extension). This tag can be replaced
with <<Q_QP_FILE()>> which has the
same behavior.

<<Q_CUSTOM_FIELD_IMAGE()>> <<Q_CUSTOM_FIELD_IMAGE(Custom Retrieves the image from the custom


FieldName)>> field and inserts it into the generated
document. First, you need to upload
the document in Manage Content
Documents and enter the file's name
with the extension in the Company
Policy field. All image formats stated
in the Manage Content Documents
page when adding a new image are
supported. This tag can be replaced
with <<Q_QP_IMAGE()>> which has
the same behavior.

<<Q_FILE()>> <<Q_FILE(Policies and Retrieves a document from Manage


Conditions.docx)>> Content Documents and inserts it into
the generated document. The template
and the document must be in the same
format.

<<Q_FILE_STATIC()>> <<Q_FILE_STATIC(New Policies and Retrieves a document from Manage


Conditions.docx)>> Content Documents and inserts it
into the generated document. This
tag should be used only when
the document that you want to
insert doesn't have any data that is
dynamically retrieved vi tags. In that
case, when there's dynamic data in the
file, use the <<Q_FILE()>> tag.

<<Q_TAG()>> <<Q_TAG(<*CTX(Quote.Total.Amount. This tag should contain a CTX tag


Display)*>)>> that retrieves a value from SAP CPQ
into the generated document. You can
use the <<Q_TAG()>> to replace any
other specific tag. Also, CTX tags
should be used when there are no
document generation tags and when
the condition for retrieving data is
too complex and no existing tags can
retrieve it.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 157
Tag Example Description

<<Q_TAG_FILE()>> <<Q_TAG_FILE(<*CTX(Quote.Custom Retrieves images of type:


Field(Company Policy))*>.jpg>> GIF,JPG,WMF,BMP, word document of
type: DOC and excel document of type:
XLS that are already stored in Manage
Content Documents. In the example,
the tag retrieves a .jpg image stored in
the custom field Company Policy.

The following Q tags are considered to be obsolete and can be replaced with CTX tags [page 731].

Tag Description

<<Q_QUOTE(NUMBER)>> Quote number.

<<Q_QUOTE(TOTAL)>> Retrieves NRC quote total amount. Use the


CTX tags to retrieve the MRC total amount
<<Q_TAG(<*CTX(Quote.Total.MrcAmount.Display)*>)>>.

<<Q_QUOTE(DATE_CREATED)>> Retrieves the date when the quote was created, displayed in
the user's date format. For other formatting, use the CTX
tags:
<<Q_TAG(<*CTX(Quote.DateCreated.Format(dd.MM.yy) )*
>)>> and
<<Q_TAG(<*CTX(Quote.DateCreated.Format(dd,MMMM
yyyy))*>)>>.

<<Q_QUOTE(DATE_MODIFIED)>> Retrieves the date when the quote was last modified,
displayed in the user's date format. For other formatting,
use the CTX tags:
<<Q_TAG(<*CTX(Quote.DateModified.Format(dd.MM.yy)
)*>)>> and
<<Q_TAG(<*CTX(Quote.DateModified.Format(dd,MMMM
yyyy))*>)>>.

<<Q_QUOTE(CURRENCY)>> The name of the currency.

<<Q_QUOTE(CURRENCY_SIGN)>> Currency sign.

<<Q_QUOTE(REVISION)>> Quote revision number.

<<Q_QUOTE(USER_ID)>> ID of the current user.

<<Q_QUOTE(OWNER_ID)>> ID of the quote owner.

<<Q_QUOTE(CART_ID)>> ID of the current quote.

<<Q_QUOTE(STATUS)>> The current status of the quote.

Company Tags

Tag Description

<<Q_COMP(NAME)>> Company name.

<<Q_COMP(EMAIL)>> Company's email address.

<<Q_COMP(ADDRESS1)>> Company's first address.

<<Q_COMP(ADDRESS2)>> Company's second address.

<<Q_COMP(CITY)>> Company's city.

SAP CPQ Setup and Administration Guide


158 PUBLIC Quotes Administration
Tag Description

<<Q_COMP(STATE)>> Company's state.

<<Q_COMP(ZIPCODE)>> Company's zipcode.

<<Q_COMP(COUNTRY)>> Company's country/region.

<<Q_COMP(PHONE)>> Company's phone number.

<<Q_COMP(FAX)>> Company's fax number.

Quote Owner Tags

Tags Description

<<Q_OWNER(COMPANY)>> The name of the owner's company.

<<Q_OWNER(USERNAME)>> The username of the owner.

<<Q_OWNER(NAME)>> Owner's name.

<<Q_OWNER(TYPE)>> Owner type.

<<Q_OWNER(EMAIL)>> Owner's email address.

<<Q_OWNER(ADDRESS1)>> Owner's first address.

<<Q_OWNER(ADDRESS2)>> Owner's second address.

<<Q_OWNER(CITY)>> Owner's city.

<<Q_OWNER(STATE)>> Owner's state.

<<Q_OWNER(ZIPCODE)>> Owner's zipcode.

<<Q_OWNER(COUNTRY)>> Owner's country/region.

<<Q_OWNER(PHONE)>> Owner's phone number.

Bill-to Ship-to and End-User Tags

Tags

Bill To Tag Ship To Tag End-User Tag Description

<<Q_BILLTO(COMPANY)>> <<Q_SHIPTO(COMPANY)>> <<Q_ENDUSER(COM­ User's company.


PANY)>>

<<Q_BILLTO(FIRST­ <<Q_SHIPTO(FIRST­ <<Q_ENDUSER(FIRST­ User's first name.


NAME)>> NAME)>> NAME)>>

<<Q_BILLTO(LASTNAME)>> <<Q_SHIPTO(LAST­ <<Q_ENDUSER(LAST­ User's last name.


NAME)>> NAME)>>

<<Q_BILLTO(EMAIL)>> <<Q_SHIPTO(EMAIL)>> <<Q_ENDUSER(EMAIL)>> User's email address.

<<Q_BILLTO(ADDRESS1)>> <<Q_SHIPTO(ADDRESS1)>> <<Q_ENDUSER(AD­ User's first address.


DRESS1)>>

<<Q_BILLTO(ADDRESS2)>> <<Q_SHIPTO(ADDRESS2)>> <<Q_ENDUSER(AD­ User's second address.


DRESS2)>>

<<Q_BILLTO(CITY)>> <<Q_SHIPTO(CITY)>> <<Q_ENDUSER(CITY)>> User's city.

<<Q_BILLTO(STATE)>> <<Q_SHIPTO(STATE)>> <<Q_ENDUSER(STATE)>> User's state.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 159
Tags

Bill To Tag Ship To Tag End-User Tag Description

<<Q_BILLTO(PROVINCE)>> <<Q_SHIPTO(PROVINCE)>> <<Q_ENDUSER(PROV­ User's province.


INCE)>>

<<Q_BILLTO(ZIPCODE)>> <<Q_SHIPTO(ZIPCODE)>> <<Q_ENDUSER(ZIP­ User's zipcode.


CODE)>>

<<Q_BILLTO(COUNTRY)>> <<Q_SHIPTO(COUNTRY)>> <<Q_ENDUSER(COUN­ User's country/region.


TRY)>>

<<Q_BILLTO(PHONE)>> <<Q_SHIPTO(PHONE)>> <<Q_ENDUSER(PHONE)>> User's phone number.

<<Q_BILLTO(FAX)>> <<Q_SHIPTO(FAX)>> <<Q_ENDUSER(FAX)>> User's fax number.

<<Q_BILLTO(CUSTOMER­ not available <<Q_ENDUSER(CUSTOMER­ User's customer number.


NUMBER)>> NUMBER)>>
You can use this tag to re­
trieve

other bill-to customer cus­


tom fields:

<*CTX(Quote.Cus­
tomer(BillTo).Custom­
Field(FieldName))*>

 Note

Every tag that inserts files supports these formats: DOCX, PDF, and images (BMP, EMF, GIF, ICO, JPG,
JPEG, PCX, PNG, TIF, TIFF, WMF).

5.1.1.3 Miscellaneous Tags

This page lists various tags that don't belong to any of the categories.

• <<INCLUDE_DOCUMENTS(DocumentName.pdf)>> and <<INCLUDE_DOCUMENTS_END>> - includes a


PDF file in the generated document. First, you need to upload the document in Manage Content
Documents. Afterwards, in the Additional Files tab of your template, enter the name of the PDF file with its
extension. The tags must be in two separate rows.
• <<UPDATE_TOC>> - updates the table of contents in the document after the document is processed. If
you are using a document generation template with multiple sections, make sure that the section with
the table of contents contains all the styles from the other sections. If there are issues with the table of
contents detecting styles, use the first section as the template for the subsequent sections, or use the
same template file for all sections.
• EVAL [EVAL(…)] EVAL function treats an expression as a VBScript call, evaluates it and returns the result.
When writing EVAL in Word, the program uses two sets of different quotation marks, open-ended (“)
and closed-ended (”). VBScript expects the same set (” ”) and doesn't evaluate the expression when two
different sets are entered. To prevent this from happening, type the expression in Notepad and copy paste
it to Word.

SAP CPQ Setup and Administration Guide


160 PUBLIC Quotes Administration
 Note

To remove ”,” from a price 12,345.99 returned by <<C_PRICE>> : [EVAL(Replace(+~:

<$$C_PRICE»”,”,”,””))]. In the above example <<C_PRICE>> is processed first resulting in


[EVAL(Replace(“12,345,99”,”,”,””))]. Once EVAL is processed, it will return 12345.99.

• HTML [HTML(…)] HTML tag takes the content and interprets is as HTML and inserts it
in the document. For example, [HTML(<<C_DESC>>)] . If <<C_DESC>> returns <a href=“http://
www.webcominc.com”>Webcom, Inc.</a>, the link is inserted in the document. If there's any text before
or after the HTML tag, the HTML content will be inserted in a new paragraph right before it. For example:
text before - [HTML(<<C_DESC>>)] - text after. Will result in: html returned content text before - - text
after. To include static text and have it on same line, just simply put it inside HTML tag. [HTML(text before -
<<C_DESC>> - text after)]

5.1.1.4 Special Tags

Special tags begin with ST.

Tag Description

<<ST_LOGO>> Company logo.

<<ST_USERFILE()>> Used for embedding files in the templates. Add this tag to
the part of the template in which you wish the file to be
displayed and add its name in the parenthesis. When a user
generates a document, they can upload a file and select it
from a dropdown list which is named after the value you've
entered in the tag parenthesis.

<<ST_USERFILE_IMG()>> Images can be uploaded and placed exactly where the tag
is located in the template. The name of the file with the
extension must be stated in the parenthesis.

<<ST_GROUP_SUBTOTAL()>> Returns subtotal for the group stated in the parenthesis.

<<ST_GROUP_DESCRIPTION()>> Returns a description for the group stated in the


parenthesis.

<<ST_GI()>> Returns value of Global Info ”…”.

<<ST_GI_FILE()>> Returns value of Global Info and inserts it as a file.

<<ST_GI_IMAGE()>> Returns value of Global Info 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 the label of the cart items group with the id you
provided. (for example, << ST_GROUP_LABEL (A)>>).

<<ST_PTYPE_NETPRICE()>> Calculates the Netprice for the product type provided by tag
(for example, <<ST_PTYPE_NETPRICE(Accessories)>>)

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 161
5.1.1.5 Custom Table Tags

These tags retrieve data from custom tables.

Word Tags Description

<<CUSTOM_TABLE(...)>> Always comes in pair with its closing tag


<<CUSTOM_TABLE_END>>. As a parameter, this tag
accepts the name of the custom table. (for example,
<<CUSTOM_TABLE(additional_options_custom_table)>>).

<<CUSTOM_TABLE_HEADER>> Always comes in pair with its closing tag


<<CUSTOM_TABLE_HEADER_END>>. This tag doesn't
accept any parameters and it's used to define the header
of the table that displays data.

<<CUSTOM_TABLE_ROW>> Always comes in pair with its closing tag


<<CUSTOM_TABLE_ROW_END>>. This tag defines the
table row where data is displayed. It can contain one or
more <<CUSTOM_TABLE_COLUMN>> tags.

<<CUSTOM_TABLE_COLUMN(...)>> This tag retrieves data from a specific cell (intersection of


a table column and a table row). This tag doesn't have a
closing tag. This tag accepts a parameter (the name of the
custom table column that you want to be displayed). This
tag is always placed within <<CUSTOM_TABLE_ROW>> tag.

Excel Tags Description

<<QUOTE_CUSTOM_TABLE(...)>> As a parameter, this tag accepts the


name of the custom table. (for example,
<<CUSTOM_TABLE(additional_options_custom_table)>>).

<<QUOTE_CUSTOM_TABLE_HEADER(rowXcolumn)>> This tag accepts the number of rows and number of


columns (for example, 1x3) and it's used to define the
header of the table that displays data.

<<QUOTE_CUSTOM_TABLE_ROW(rowXcolumn)>> This tag defines the table row where data


is displayed. It can contain one or more
<<QUOTE_CUSTOM_TABLE_COLUMN>> tags. It accepts
the number of rows and number of columns (for example,
1x3) as parameters.

<<QUOTE_CUSTOM_TABLE_COLUMN(...)>> This tag retrieves data from a specific cell (intersection


of a table column and a table row). This tag accepts a
parameter (the name of the custom table column that you
want to be displayed). This tag is always placed within
<<CUSTOM_TABLE_ROW>> tag.

Example
Assuming that SAP CPQ administrator has already defined a custom table named
additional_options_custom_table with two columns: additional_description and options, you can create a
template section to display data from the custom table as follows:

<<C2>>
<<MAIN>>
<<CUSTOM_TABLE(additional_options_custom_table)>>
<<CUSTOM_TABLE_HEADER>>
Additional description —- Options

SAP CPQ Setup and Administration Guide


162 PUBLIC Quotes Administration
<<CUSTOM_TABLE_HEADER_END>>
<<CUSTOM_TABLE_ROW>>
<<CUSTOM_TABLE_COLUMN(additional_description)>> ----
<<CUSTOM_TABLE_COLUMN(options)>>
<<CUSTOM_TABLE_ROW_END>>
<<CUSTOM_TABLE_END>>
<<MAIN_END>>
<<C_END>>

5.1.1.6 Nested Products Tags

To display parent/child product structure in generated documents, you should add MAIN tags for children
products inside parent MAIN tags.

The first main item in the tag structure can be any root item from the quote, which satisfies the condition. All
main tags inside that tag act as children items. Furthermore, there can be a child main tag inside a child main
tag, and so on. Main tags should be marked with a number according to their level (the root main item (parent
product) is marked with 1 and children main items are marked with 2, 3, etc, respectively). Nesting is possible
up to 9 main items.

<<QUOTE_PRODUCTS>>
<<NESTED_PRODUCTS>>
<<MAIN_1>>
<<CONTENT>>
<<CONTENT_END>>
<<LI>>
<<CONTENT>>
<<CONTENT_END>>
<<LI_END>>
<<MAIN_2>>
<<CONTENT>>
<<CONTENT_END>>
<<LI>>
<<CONTENT>>
<<CONTENT_END>>
<<LI_END>>
<<MAIN_3>>
<<CONTENT>>
<<CONTENT_END>>
<<LI>>
<<CONTENT>>
<CONTENT_END>>
<<LI_END>>
<<MAIN_END_3>>
<<MAIN_END_2>>
<<MAIN_END_1>>
<<NESTED_PRODUCTS_END>>
<<QUOTE_PRODUCTS_END>>

 Tip

If you add conditions for retrieving nested products, the <<CONDITION_END>> tag isn't required.

 Note

<<QUOTE_PRODUCTS>> and <<NESTED_PRODUCTS>> are not supported in Microsoft Excel templates.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 163
Sorting

Sorting conditions can be defined on <<MAIN_1>> tag in the following ways:

• without sorting preferences - takes one parameter, for example a CTX formula, and orders items by the
parsed value of that formula.

<<<MAIN_1: SORT_BY(<*CTX( Quote.CurrentItem.PartNumber )*>)>>

• with sorting preferences - takes two parameters, for example a CTX formula and sorting preferences, and
orders items by taking the items that were filtered out and sorts them in the specified order.

<<MAIN_1:
SORT_BY(<*CTX( Quote.CurrentItem.PartNumber )*>::PartNumber1,PartNumber2,PartN
um3)>>

Conditions

If needed, you can add a condition to the <<MAIN>> and <<LI>> tags to limit which items are displayed in the
document. The condition on each tag is parsed independently. If the condition is not met, the content of that
tag and the underlying tags are not displayed.

In order to set the condition, it is necessary to define a formula. This formula is parsed during document
processing. The condition is satisfied if the result of formula is 1.

An example tag with the condition:

<<MAIN_1: CONDITION([EQ](<*CTX( Quote.QuoteNumber )*>, 11980014)) >>

 Note

No need to use "=" or "!".

Examples

Example 1

<<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…

SAP CPQ Setup and Administration Guide


164 PUBLIC Quotes Administration
<< CONTENT_END>>
<< LI _END>>
<<MAIN_END_1>>
<<NESTED_PRODUCTS_END>>
<<QUOTE_PRODUCTS_END>>

In this example, children main tags are nested inside parent main tags. The 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 prints information for the parent item, which is of type Hardware. After that, child item
information will be printed (for all children items of type Software), and then again parent item information will
be printed, followed by a parent line item information of type Memory. This way, information from the child item
is printed multiple times in the parent item. Also, child tag can have another child MAIN tag inside, to describe
real SAP CPQ product nesting.

Example 2
There can be multiple CONTENT tags defined, so HEADER, and FOOTER tags are redundant. The example
below shows a MAIN root tag structure:

<<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's information from the child main item. Following that, information from a
root line item are printed. Also, HEADER and FOOTER tags are redundant in this case, since CONTENT could
replace both of them.

Example 3
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's 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)…

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 165
<<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>>

5.1.1.7 Container Tags

Use container tags to display data from a container in SAP CPQ in a generated document.

Container tags must be in the main section of C2 tags.

Below is the basic structure of container tags:

<<MAIN>>
<<CONTAINER(ContainerName)>>
<<CONTAINER_HEADER>>
<<CONTAINER_HEADER_END>>
<<CONTAINER_ITEM>>
<<CONTAINER_ITEM_END>>
<<CONTAINER_FOOTER>>
<<CONTAINER_FOOTER_END>>
<<CONTAINER_END>
<<MAIN_END>>

Inside CONTAINER sections, use CONTAINER_TAG with a CTX tag to retrieve data (for example,
<<CONTAINER_TAG(<*CTX(Container(Project Tasks).Row(2).Column(Total).GetFormatted))*>)>> returns
the value of the Total column for the second row in the container, keeping the original format).

SAP CPQ Setup and Administration Guide


166 PUBLIC Quotes Administration
5.1.1.8 C2 Loop

You can use the C2 tags when you wish the system to iterate through all items in a quote.

You can add C2 tags only to main and line items. You can't add a C2 loop inside a C2 loop, but you can add a
condition inside a C2 loop. Make sure you don't add too many C2 tags (500 tags and more) because that will
affect the performance poorly.

 Note

If you separate C2 loop into two or more sections by placing them inside table cells, or in any other way, the
output will not work.

Below is the outline of the structure of a C2 tag. You can copy/paste the structure in your template and enter
any additional tags.

<<C2>>
<<HEADER>>
<<HEADER_END>>
<<MAIN>>
<<C_STOP>>
<<MAIN_END>>
<<LI>>
<<C_STOP>>
<<LI_END>>
<<FOOTER>>
<<FOOTER_END>>
<<C_END>>

 Note

Opening and closing tags (for example, <<LI>> and <<LI_END>>) must each be displayed in a separate
row.

A C2 tag can optionally have four sections (header, main items, line items, and footer) and each of them is
described in more details below.

Header

A header is displayed only once at the beginning of a C2 tag. You can add only Q tags inside the header because
other tags aren't parsed. If there's a table in your template, the table header should be displayed in the header
tags.

 Note

If you have a table that displays on more than one page, check the Repeat as header row at the top of each
page in Word to display the header on each page.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 167
Main Items

The main tag retrieves all main items in a quote (there should be one set of MAIN tags for each main item). For
the system to properly process the items, you need to add the <<C_STOP>> tag before the closing main tag.
If there’s parent/child item structure, the system treats child items as main items. If tabular representation is
needed, you should add table rows that contain item data.

Line Items

The line item tag retrieves all line items in a quote (there should be one set of LINE ITEM tags for each line
item). For the system to properly process the items, you need to add the <<C_STOP>> tag before the closing
line item tag. If you need to represent line items in a table, you should add table rows within the line item tags.

Footer

A footer is displayed only once at the end of a C2 tag. You should add only Q tags inside the footer because
other tags aren't parsed. If there's a table in the template, the table footer should be displayed in the footer
tags.

 Note

There has to be at least one blank space (or a new line) after <<C_END>> for the system to process it
properly.

Other C2 Tags

Tag Description

<<C2_PTYPE(...)>> Same functionality as <<C2>> except it only lists main


items that have product type as defined in parentheses and
their line items (regardless of the product type of line item).

<<C2_PTYPE_ALL(...)>> Same functionality as <<C2>> except it only lists main


items and line items that have product type as defined in
parentheses.

<<C2_PTYPE_ALL_SortByRank()>> This tag enables you to sort products by product


type rank order. If you have two product types
(Drive ranked 10 and Hardware ranked 5), the
<<C2_PTYPE_ALL_SortByRank(...)>> tag sorts all your
product types by Hardware and then by Drive as a result
of the ranking set on each of the product type.

SAP CPQ Setup and Administration Guide


168 PUBLIC Quotes Administration
Tag Description

<<C2_PTYPE_ALL_SortByRankButStartWith(First,Second, This tag enables you to sort product type rank order, but
Third...)>> 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,Hardwa
re, Services)>> sorts all your products by Drive, Hardware,
and Services first. In this case the sorting starts with
Computers, followed by the remaining product types in
order by rank. The new sort type enables you lots of
flexibilities when ordering your product types.

<<C2_PTYPE_ALL_SortByName()>> This tag enables you to sort product types by


the product name. If you have two product types,
Drive and Hardware, ranked 10 and 5 respectively,
<<C2_PTYPE_ALL_SortByName()>> tag sorts all your
products by Drive and then by Hardware due to their
alphabetical order.

<<C2_PTYPE_ALL_SortByNameButStartWith(Drive, This tag enables you to sort the product type in the
Services, Hardware, Computer)>> 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 sorts all your products by
Drive, Services, and Hardware first; then, it starts 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
flexibilities when ordering your product types.

<<C2_OPTIONAL(...)>> It lists items based on the value in the parenthesis that


can be Y,N and ALL. Y lists only optional items. N lists only
nonoptional items. ALL lists both nonoptional and optional
items (<<C2_OPTIONAL(ALL)>> is equivalent to <<C2>>).

<<C2_CONSOLIDATE(...)>>

This tag consolidates items based on a common denominator. For example, if we have 2 items with the same
part number, using consolidate (<<C2_CONSOLIDATE(C_PNUM)>>) lists it only once.

<<HEADER>>
<<HEADER_END>>
<<ITEM>>
Item number: <<UNIQUE(C_PNUM)>>
Item QTY: <<SUM(C_QTY)>>
Item IDs: <<APPEND(C_ID)>>
<<C_STOP>>
<<ITEM_END>>
<<FOOTER>>
<<FOOTER_END>>
<<C_END>>

In the above example, items are consolidated based on the part number. <<UNIQUE(C_PNUM)>> lists the
unique part number. Important thing to note is that the inner tag (C_PNUM) in this example shouldn’t be

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 169
surrounded with << >>. <<SUM(C_QTY)>> takes the quantity of each item that has this part number, add it
up and display it. <<APPEND(C_ID)>> lists all IDs that have this part number. List is separated by a comma
(Item IDs: 1,3,4). By default consolidate runs 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)>>.

Tag <<C2...>> in Excel Templates

<<C2>> tag can be used in Excel template as well. In Excel, you define a cell range where you want to render
information. You don’t need to define the range for tags that retrieve simple data, for example C and Q tags.

<<C2(10X10|CONDITION:[AND](<*CTX( Quote.CurrentItem.IsOptional )*>,[EQ]


(<*CTX( Quote.CurrentItem.IsMainItem )*>,False))=1)>>
<<MAIN(1X10)>>
<<C_PNUM>>
<<LI(1X10)>>
<<C_PNUM>>

This example shows scenarios in which 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 that are being
allocated one more row. Also notice that main item aren't displayed, based on the condition we have set, but
<<MAIN>> tag must exist in the template to follow a valid template tags sequence.

5.1.1.9 Conditions

Standalone conditions and tag-dependent conditions let you restrict what data tags retrieve.

Standalone conditions can be added anywhere in the template and they aren’t dependent on any tags.
Standalone conditions are used to control if section of a document are displayed or not. Conditions are
processed after all the other tags have been processed. Using conditions may slow down a performance if large
number of conditions are used to determine in the end if one section is displayed or not. On the left side is a
tag whose value is compared and on the right side is list of values to compare with. Values are separated by “|”
Conditions can use the OR logic. To check if value is equal use ”=” and if not equal use ”!”. Typical examples of
conditions are as follows:

[CONDITION,<<Q_QP(myproperty)>>=golf|soccer|basketball]
Any static text or tables or tags
[CONDITION_END]

As seen in the example, condition tags can't be used in a single line - they must be separated into multiple lines.

Conditions can also consist of several expressions connected by the AND (&&) operator. All expressions within
the combined condition need to be TRUE for the condition to be fulfilled.

 Note

The AND logic can only be used in the new document generation engine.

[CONDITION, <<Q_TAG(<*CTX( Quote.MarketId )*>)>> = 2 &&


<<Q_TAG(<*CTX( Quote.Customer(BillTo).FirstName )*>)>> = TestName]
Example Content

SAP CPQ Setup and Administration Guide


170 PUBLIC Quotes Administration
[CONDITION_END]

Tag-dependent conditions - create a condition by adding :CONDITION() to a tag (for example,


<<QUOTE_ITEMS:CONDITION([EQ](<*CTX(Quote.CurrentItem.ProductTypeName)*>,Hardware))>>). Add
these conditions in C2 tags and when retrieving quote products, containers, and quote items (main and line
items, header, and footer).

 Caution

[CONDITION,…] tags don’t support table tags (<*Table(SQL query)*>). Also, [CONDITION,…] tags must
not be nested.

Conditions aren’t required in templates. They allow you to retrieve data only when the condition is fulfilled.

Tag Conditions

Tag conditions can be applied to every tag to perform an action based on the value the tag returned. Not all
condition tags can be used in both document generation engines and in both Microsoft Excel and Microsoft
Word templates.

New Document Generation Engine

• DOCX - D, d, P, p, B, b, U, DC, DR, DCOL, DELETE_TABLE


• Excel - d, DR.

Old Document Generation Engine

• DOCX - D, d, P, p, DC, DR, DCOL, DELETE_TABLE.


• DOC - D, d, P, p, B, b, U, DC, DR, DCOL, DELETE_TABLE.
• Excel - d, DR.

The explanation of tag conditions is listed below:

D Deletes a line.

d Deletes the value that the tag returns.

P Inserts a page break after the value that the tag retrieves.

p Inserts a page break before the value that the tag retrieves.

B Makes the entire line bold.

b Makes the value that the tag returns bold.

U Converts the value to uppercase.

DC Deletes the content of the cell, if the value displays in a table


cell.

DR Deletes the content of the row, if the value is displayed in a


table.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 171
DCOL Deletes the content of the column in which the value is dis­
played. Deletion may fail if there are merged cells in the
column.

DELETE_TABLE Deletes the content of the entire table, if the value is dis­
played in a table.

5.1.1.10 Quote Table Tags

The content of quote tables can be included in documents generated in SAP CPQ. To retrieve the content, use
the following tags:

• «QUOTE_TABLE(TableNameHere)»
• «QUOTE_TABLE_HEADER» (Enter column definitions or what you want to display on header for the table).
• «QUOTE_TABLE_HEADER_END»
• «QUOTE_TABLE_ROW»
• «QUOTE_TABLE_COLUMN(NameOfColumnHere)» …
• «QUOTE_TABLE_COLUMN(AnotherColumnHere)»
• «QUOTE_TABLE_ROW_END»
• «QUOTE_TABLE_FOOTER» (Enter column totals or what you want to display on footer for the table).
• «QUOTE_TABLE_FOOTER_END»
• «QUOTE_TABLE_END»

 Note

QUOTE_TABLE tags shouldn't be used within the HEADER tags.

5.1.1.11 SAP Subscription Billing Integration Tags

When SAP CPQ is integrated with SAP Subscription Billing, you can use these tags in the document generation
template to retrieve elements specific to the integration.

See Quote Item Fields on SAP Subscription Billing Products for a list of CTX tags which you can use to retrieve
the values of standard subscription item fields in the quote.

<<C2>>
<<MAIN>>
<<C_PNAME>>
<<CHARGES>>

One Time

<<One_Time>>

SAP CPQ Setup and Administration Guide


172 PUBLIC Quotes Administration
<<Rate_Plan_Element>>
<<Price>>
<<Discount>>
<<Total>>
<<One_Time_End>>

Recurring

<<Recurring>>
<<Rate_Plan_Element>>
<<Price>>
<<Discount>>
<<Total>>
<<Recurring_End>>

Block Pricing Charge

<<Block_Pricing>>
<<Rate_Plan_Element>>
<<Included_Quantity>>
<<Block_Size>>
<<Price>>
<<Discount>>
<<Total>>
<<Block_Pricing_End>>

Tiered Pricing Charge

<<Tiered_Pricing>>
<<Rate_Plan_Element>>
<<Minimum_Blocks>>
<<Block_Size>>

Pricing Tiers

<<Pricing_Tiers>>
<<Up_To>>
<<Price_Per_Block>>
<<Discount_Per_Block>>
<<Total_Per_Block>>
<<Pricing_Tiers_End>>
<<Tiered_Pricing_End>>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 173
Volume

<<Volume_Pricing>>
<<Rate_Plan_Element>>
<<Minimum_Blocks>>
<<Block_Size>>

Tiers

<<Tiers>>
<<Up_To>>
<<Price_Per_Block>>
<<Discount_Per_Block>>
<<Total_Per_Block>>
<<Fixed_Price>>
<<Fixed_Discount>>
<<Fixed_Total>>
<<Tiers_End>>
<<Volume_Pricing_End>>
<<Percentage>>
<<Rate_Plan_Element>>
<<Price_Per_Unit>>
<<Discount>>
<<Total>>
<<Ratio>>
<<Percentage_End>>
<<CHARGES_END>>
<<MAIN_END>>
<<C_END>>

5.1.1.12 SECTIONS Loop

The SECTIONS loop makes SAP CPQ iterate through all Solution Design sections and retrieve information such
as their names, hierarchy Ids, ranks (the ordinal numbers of the sections’ rows), values from all their custom
fields, and section totals.

Below is the structure of a SECTIONS loop. You can copy/paste the structure in your template and enter any
additional tags.

<<SECTIONS>>
<<SECTIONS_HEADER>>
<<SECTIONS_HEADER_END>>
<<SECTIONS_LOOP>>
<<SECTIONS_LOOP_END>>
<<SECTIONS_FOOTER>>
<<SECTIONS_FOOTER_END>>
<<SECTIONS_END>>

To filter only a specific type of sections, add the section type in the opening loop tag:

• Regular «SECTIONS(Regular)»
• Distribution «SECTIONS(Distribution)»

SAP CPQ Setup and Administration Guide


174 PUBLIC Quotes Administration
• Distributed «SECTIONS(Distributed)»
• All «SECTIONS(ALL)» or «SECTIONS(Regular, Distribution, Distributed)»

Section Products

To retrieve all products in a section, you should use the SECTION_PRODUCTS tag. Check the following example
for the document structure:

<<SECTIONS>>
<<SECTIONS_HEADER>>
This is the document header.
<<SECTIONS_HEADER_END>>
<<SECTIONS_LOOP>>
<<C_TAG(<*CTX(Quote.Sections.CurrentSection.Name)*>)>>
<<SECTION_PRODUCTS>>
<<C_TAG(<*CTX(Quote.CurrentItem.ProductInfo.ProductName)*>)>>
<<SECTION_PRODUCTS_END>>
<<SECTIONS_LOOP_END>>
<<SECTIONS_FOOTER>>
This is the document footer.
<<SECTIONS_FOOTER_END>>
<<SECTIONS_END>>

Header

The header is displayed only once below the opening SECTIONS tag. It can contain a table with the section
name, rank, hierarchy, and any custom fields, the values of which you wish to add. It’s also possible to add Q
Tags [page 155] in the header, if needed.

Loop

Section items you’ve filtered in the opening SECTIONS tag are processed in this part. C Tags [page 154] can be
used inside the loop, along with CTX Tags [page 731] for retrieving hierarchy Id, rank, and the section name, as
well as custom fields.

Footer

The footer can contain section totals and Q tags.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 175
Microsoft Excel Templates

In Microsoft Excel templates, the SECTIONS loop has the following structure:

<<SECTIONS>>
<<SECTIONS_HEADER>>
<<SECTIONS_LOOP>>
<<SECTIONS_FOOTER>>

For filtering section items in the opening SECTIONS tag, you can use the condition SECTION_TYPE (not case
sensitive), with the allowed values ALL, REGULAR, DISTRIBUTION, DISTRIBUTED (not case sensitive).

Example of the syntax for the use of the SECTIONS loop in a Microsoft Excel template: <<SECTIONS(13X5 |
SECTION_TYPE: Distributed, Regular)>>. In this example, the tag retrieves 13 rows and 5 columns of
sections of the type Distributed and Regular.

5.1.1.13 Involved Parties Tags

INVOLVED_PARTIES tags retrieve details of business partners and partner functions.

Template Structure

Below is the outline of the structure of a template with INVOLVED_PARTIES tags. You can copy/paste the
structure in your template and enter any additional tags.

<<INVOLVED_PARTIES(ALL or partner function key of a specific partner function)>>


<<INVOLVED_PARTIES_HEADER>>
<<INVOLVED_PARTIES_HEADER_END>>
<<INVOLVED_PARTIES_LOOP>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PartnerFunctionName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PartnerFunctionKey)*>)>>
<<INVOLVED_PARTIES_LOOP_END>>
<<INVOLVED_PARTIES_FOOTER>>
<<INVOLVED_PARTIES_FOOTER_END>>
<<INVOLVED_PARTIES_END>>

The INVOLVED_PARTIES_LOOP should contain the CTX tags inside the C_TAG. Below are listed the supported
CTX tags:

<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PartnerFunctionName)*>
)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PartnerFunctionKey)*>)>
>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.ExternalId)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.Name)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.FirstName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.LastName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.Country)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.State)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.Region)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CityName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PostalCode)*>)>>

SAP CPQ Setup and Administration Guide


176 PUBLIC Quotes Administration
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.TimeZone)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AddressName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AddressAdditionalName)*
>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.EmailAddress)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.Phone)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.VatNumber)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.TaxNumber1)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.TaxNumber2)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.Fax)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.BankAccount1)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.BankAccount2)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.PrimaryIndustry)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.BusinessPartnerType)*>
)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.SystemId)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.FormOfAddress)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AddressName3)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AddressName4)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.TaxJurisdiction)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.POBoxPostalCode)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.District)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.POBox)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.StreetPrefixName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AdditionalStreetPrefixN
ame)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.StreetName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.StreetSuffixName)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.AdditionalStreetSuffixN
ame)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.HouseNumber)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.TransportZone)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CorrespondenceLanguage
)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.MobilePhone)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(CustomFiel
dName))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(CustomFiel
dName).AttributeValue)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(CustomFiel
dName). AttributeValueCode)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).Format(y))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).Format(d))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).Format(ddMMyyyy))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).Format(yyyyMMdd))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).Format(yyyy-MM-dd))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).InUserTimeZone)*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).InUserTimeZone.Format(yyyy-MM-dd))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).InUserTimeZone.Format(yyyy-MM-dd))*>)>>
<<C_TAG(<*CTX( Quote.InvolvedParties.CurrentInvolvedParty.CustomFields(DateCustom
Field).InUserTimeZone.Format(y))*>)>>

 Note

CTX( Quote.InvolvedParties.CurrentInvolvedParty.xxxx) tags can be used only for document


generation and not for building formulas.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 177
Filter by Business Partner Key

Filtering by partner function key is possible in both .docx and .xlsx documents:

• in a .docx template, pass the partner function key as an argument to the <<INVOLVED_PARTIES>> tag (for
example, <<INVOLVED_PARTIES(BLT)>> ).
• in an .xlsx template, add the partner function key as a condition for the <<INVOLVED_PARTIES>> tag (for
example, <<INVOLVED_PARTIES(7X25 | PARTNER_FUNCTION: BLT)>>).

Related Information

What are Business Partners and Partner Functions? [page 333]


Create Business Partner in SAP CPQ [page 337]
Create Partner Function in SAP CPQ [page 342]
Involved Parties [page 344]
Example Templates [page 178]

5.1.1.14 Example Templates

Here you can download Microsoft Word and Microsoft Excel templates that contain several frequently used
tags for document generation and CTX tags for retrieving specific data.

The templates contain some simple examples and can be used as a reference for the proper usage of
document generation tags. [page 153]

Microsoft Excel Example Templates

Download the Excel Templates Examples zip file that contains these templates:

• Container Tags Example - a simple template for retrieving data from a container column using CTX tags.
• C2 Loop with PTYPE and Condition - this template contains three examples for using the C2 loop with
product type tags and condition tags.
• Quote Tables Excel - a simple template for retrieving data from a quote table.
• C2 Loop Listing Items - an example Microsoft Excel template with two sheets. The first sheet contains Q
tags for retrieving basic quote information and a C2 loop for listing items. The second sheet contains Q
tags and CTX tags for retrieving customer details.
• Involved Parties - a simple Microsoft Excel template for getting business partner and partner function
detailes using document generation tags and CTX tags.
• Custom Table Excel - a simple Microsoft Excel template for retrieving custom table data in a generated
document.
• Solution Design Regular - a simple Microsoft Excel template for retrieving details of regular sections [page
174] in the Solution Design tab.

SAP CPQ Setup and Administration Guide


178 PUBLIC Quotes Administration
Microsoft Word Example Templates

Download the Word Templates Examples ZIP file that contains these templates:

• C2 Loop Simple - a simple template that lists items, their descriptions and product types. This template
also contains CTX tags that retrieve the list price of items and the total list price.
• C2 Loop with PTYPE Tag - a template with the C2 loop and the PTYPE tag. The PTYPE tag retrieves items
that have the Software product type in the first block and the Hardware product type in the second block.
• C2 Loop with Container Tags - the tags in this template retrieve data from columns in a container.
• Quote Tables Word - a simple Microsoft Excel template for retrieving data from a quote table.
• C2 Loop with Conditions - the C2 loop lists all items that have a product type different from Service.
Additionally, a condition is added so that items that have a list price equal to 0 are not displayed in the
generated document.
• Involved Parties - a simple Microsoft Word template for getting business partner and partner function
detailes using document generation tags and CTX tags.
• Custom Table Word - a simple Microsoft Word template for retrieving custom table data in a generated
Microsoft Word document.
• Solution Design Simple Regular - a simple template to access section information [page 174] in the
Solution Design tab in Quote 2.0.

5.1.2 Create Document Generation Template

The Document Generation Templates page displays a list of all document templates in the system, letting you
manage, create, and delete templates and translate their names.

Context

Here, you can manage the format and language settings that apply to all existing and new templates:

• Select Language - select the language in which template names and descriptions are displayed. If a
template name or description has no specified value in the selected system dictionary, the values are

retrieved from the default dictionary instead. To translate a template name or description, click,
select the target language, and enter the new value.
To see the translated template names and descriptions from the user side, after a translation is entered
here, the user can choose the language for which the translations were added in the Default Dictionary on
the User Page. Following that, template names and descriptions display in the selected language for that
user (given that translations are available).
• Default Output Format - select the format in which all documents are generated by default. If format
permissions [page 184] are enabled for a user type, the pertaining user has the possibility to choose in
which format a document is generated. You can only choose between DOC, DOCX, and PDF files here
because Microsoft Excel templates are always generated as XLSX files.
• Users can choose customer’s language when creating documents - if selected, users can select the
language in which the document is generated in the Customer’s language dropdown menu when selecting

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 179
a template for a specific quote. The selected language is applied to the generated document, the email
sent to the customer, and the proposal page which customers access by clicking the proposal link in the
email. After selecting a language, it’s also necessary to include the appropriate tags [page 153] in the
document for the translations to display. This option is available only in Quote 1.0, as translations for
document generation templates aren't supported in Quote 2.0.

On this page, you can create simple, multisection, and section templates. All templates that exist on the tenant
are organized in the Output Templates and Section Templates lists. In addition to the template name and type,
the lists display other relevant details (visibility permissions, dates when the templates were last modified and
the names of administrators who last modified them, and so on).

In the Output Templates list, administrators can organize in which order templates appear when they’re
presented to the user. When users are selecting the template for their documents, only output templates
(both simple and multisection) are available on the user side.

Depending on the type of template that you’re creating, you have access to different tabs when editing
a template. For simple templates, Sections is disabled, and for multisection templates, Additional Content
is disabled. Additionally, when creating section templates, you can’t manage the Sections and Format
Permissions tabs. Additional Documents is available when editing multi-section or simple templates.

The Filename column is always blank for multisection templates. The Master Section column indicates which
section controls the header and the footer of the document. Moreover, the Contained Sections column lists all
the sections in a multisection template.

The initial steps are the same for creating any type of template:

Procedure

1. In Document Generation Templates, click Add New Template.

In Output Templates, you create simple and multisection templates, and in Section Templates, you create
sections that are included in multisection templates.
2. Enter the template name.
3. Click Save.

A new page displays with multiple tabs. The Template Definition tab opens by default.

 Note

If you upload a Microsoft Word template, you can generate a DOC, DOCX, or PDF document. However,
if you upload a Microsoft Excel file (either an XLSX or XLS file) in the new document generation engine,
you can only generate an XLSX file.

Template Definition [page 181]


This page displays the template name, the name of the users who created and modified the template
and the respective dates.

Sections [page 183]


This tab is enabled only when administering multisection templates.

Visibility Permission [page 184]


The Visibility Permissions tab lets you define who can see the template.

SAP CPQ Setup and Administration Guide


180 PUBLIC Quotes Administration
Format Permissions [page 184]
In this tab, you select the permission groups that can select the output format of the generated
template.

Related Fields [page 185]


The Related Fields tab specifies the quote custom fields that are related to the entire template or to the
section, in case of a section template.

Additional Content [page 187]

Additional Documents [page 188]


In this tab, you can define and select mandatory additional files that are enclosed in the same email as
the generated document.

Delegation of Authority for Document Templates [page 189]


Users in the permission groups that you select in this tab are able to manage templates on the user
side of SAP CPQ.

5.1.2.1 Template Definition


This page displays the template name, the name of the users who created and modified the template and the
respective dates.

The Template Creation Tool [page 193] button gives you access to a tool that creates a document template so
you don’t have to manually add tags.

Depending on the template type that you’re creating, one of the following types is selected by default:

• Output template - templates offered to the user on the user side.


• Simple template (no sections) - simple documents without any sections. Selecting this option disables
the Sections and Format Permissions tabs.
• Multisections template - complex documents with multiple sections. Selecting this option disables the
Template Creation Tool [page 193], the file revisions table and the Additional Files tab.
• Section template - a section to be included in a multisection document. Selecting this option disables the
Sections and Format Permissions tabs.

 Note

If you add sections to a template and then make it a Simple Template, the sections become unavailable.
However, they aren’t deleted (even if you click Save) - you can make them available again by choosing Multi-
sections template in Template Definition. Similarly, the file revisions table is disabled when Multi-sections
template is selected, but file revisions aren’t deleted when you click Save.

In Override Document Processing Engine [page 189] for this template, select one of these options:

• Use Global setting from application parameters page - default value, follows the selection on the Application
Parameter page.
• Use Old Engine - overrides the global setting to the old engine.
• Use New Engine- overrides the global setting to the new engine.

After you’ve defined the general template details for a simple or a section template, you need to select the
DOCX template based on which the document will be generated. Click Add New Document and browse for the
document.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 181
 Note

Uploading documents for multisection templates isn’t available in the Template Definition tab. Instead, you
need to separately upload a document for each pertaining section that is listed in the Sections [page 183]
tab of that multisection template.

When simple or section templates are selected, files and file revisions are listed in the table below. The
template name and the revision number are displayed in a row. Furthermore, clicking the icons in the table lets
you preview, download, and delete the document.

 Note

When in the preview mode, enter the quote composite number to preview the generated document for the
selected quote.

Although a template can have multiple revisions, only one revision can be active at a time. When multiple
documents are uploaded, click [activate] next to the document you wish to activate. If there’s only one
document, that file is active by default.

Styling Microsoft Word Templates

Before you add tags to a Microsoft Word template, first adjust the header and footer in Microsoft Word.

If you wish the table header to be displayed on each page where the table is spanning across the pages, in
Microsoft Word, you need to check Repeat as header row at the top of each page for the row which should be
displayed in the header, and to turn off the option Allow row to break across pages for the rows that shouldn't be
displayed in the header.

If there are tables inside a C-loop in the header, footer or main part of the template and you want them to
merge into one table when processing the template, they must share the same format and style. Column
number, width, and style must be matching.

All the styling of the template should be done in Microsoft Word so you can later only add tags without
any styles. The styles that are applied to the tags in the template are also applied to the retrieved values in
the generated document (for example, if you make a tag bold, the value that it retrieves is also bold in the
generated document). This is applicable for all standard Microsoft Word formatting (bold, italic, underline, font
sizes, text effects, text color, text background, text highlighting, text alignment, paragraph settings with spacing
before and after, table formatting with all previous mentioned variations in cells, and so on). Text effects aren’t
applied correctly to the tag output if the document is generated in the DOC file format.

 Note

Texts effects are available only for the DOCX file format, which is available in Microsoft Word 2007 and later
versions.

Avoid copying and pasting tags and the text in templates in order to achieve the best performance of the
Document Generation tool. Otherwise, if you must copy something in your template, make sure to first remove
all styling and formatting. Visit the Document Generation Tips and Tricks [page 198] page to read about the
most frequent styling issues and possible workarounds.

SAP CPQ Setup and Administration Guide


182 PUBLIC Quotes Administration
5.1.2.2 Sections

This tab is enabled only when administering multisection templates.

Here you can select the section templates that are included in the document. Other than selecting section
templates, on this tab you can set up the following settings:

• User can sort sections - enables users to sort sections before generating the document. Once users sort
the sections, the order remains unchanged the next time users generate documents from the same quote,
regardless of the default order of sections set up in the Setup.
• User can upload their own sections - lets users upload their own DOCX section templates when
customizing the template on user side. When the checkbox is selected, a formula box appears. The formula
entered here is used to narrow down the conditions under which Add Section appears during the document
generation process. The default value of the field is 1, meaning that all users can upload sections manually.
Consider this example: for enterprise-grade deals, users shouldn't be able to manually add sections. Deal
type is defined in a custom field. By entering the condition [NEQ](<* QuoteProperty(Deal Type)
*>, Enterprise), users are only allowed to add sections if the deal type isn’t enterprise.
• Sections will inherit formatting (header,footer etc.) from first section in the template - enables format
inheritance from the first (master) section to all subsequent sections. If the checkbox isn’t selected, each
section maintains its own formatting. This checkbox is selected by default for new documents.

 Note

If Sections will inherit formatting (header,footer etc.) from first section in the template is selected, the
standard Page Break will be used by default. If it's not selected, Section break new page page break type
will be used. You can also specify the page break type you wish to use in templates via the Type of break
used in generated documents application parameter [page 190].

 Note

If the application parameter Heading style used in generated documents is set to Keep source formatting
and the checkbox Sections will inherit formatting (header,footer etc.) from first section in the template is
selected, the sections of the output document inherit the header and footer from the first section of the
template, but the heading style is kept for each individual section.

Adding a Section in a Multisection Template

Prerequisites:

• Create the section template


• Add the corresponding DOCX document to that section template
• Define the permissions

1. In Sections, click Add Section.


A pop-up with a list of existing section templates displays.
2. Select the template you wish to add and click Add.
The Add Section window pops up.
3. (Optional) Rename the template.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 183
4. (Optional) In Template File, click Change File.
You’re redirected to the settings page of the section template where you can change the DOCX source
template.
5. Select these checkboxes, as needed:
• Required in document - users can’t exclude required sections from the document when customizing
the document.
• User can download it - users can download the section while customizing the document.
• User can replace it - users can replace the section with another section while customizing the
document.
• Selected by default - the section is selected by default when users customize the document.
6. The same checkboxes are available in the list of section templates in Sections.
7. Click Save.
The section is added to the list of included sections.

The list displays the name of the section template and the name of the respective DOCX file. To delete and edit

the template, click and , respectively.

The Sort column shows the order of section templates as they’ll be generated in a document. The order
defined here is default and users can override it if the User can sort sections checkbox is selected. To change
the order of sections, enter the numbers in the Sort column in ascending order, starting from the section that
should be generated first, and click Re-Sort.

5.1.2.3 Visibility Permission


The Visibility Permissions tab lets you define who can see the template.

You can allow users to access specific templates when quotes are in a certain status. When setting the visibility
of a section template, you allow/disallow access to that section only, not to the entire multisection template
in which the section is included. Visibility is controlled via permission groups. To limit the visibility, unselect
the Visible to all permission groups checkbox that is selected by default, and move the permission groups that
should have access to the template to the Selected Permission Groups column. The logic between multiple

permission groups is OR. In Step 2, click , and create a condition under which the template is visible to
the selected permission groups. By default, 1 displays in the condition box, meaning that the template is visible
under all conditions.

5.1.2.4 Format Permissions


In this tab, you select the permission groups that can select the output format of the generated template.

By default, all permission groups are able to generate templates only in the format selected in Default Output
Format in the Document Generation Templates page. Users that belong to the permission groups selected
in Format Permissions also have other template formats available for selection. The logic between multiple

permission groups is OR. In Step 2, click , and create a condition under which format selection is available

SAP CPQ Setup and Administration Guide


184 PUBLIC Quotes Administration
to the selected permission groups. By default, 1 displays in the condition box, meaning that format selection is
available under all conditions.

5.1.2.5 Related Fields

The Related Fields tab specifies the quote custom fields that are related to the entire template or to the section,
in case of a section template.

Users are prompted to fill out related fields when customizing a document that is being generated. Depending
on the template type you’re editing, the fields are related to a section (in case of a section template) or to the
entire output document (in which case, they’re displayed in the Template Details panel in the Customize tab on
the user side). In the screenshot below, you can see an example of each case: Quote Expiration Date and Terms
are related to the Introduction section and Additional Comments and Customer Comments are related to the
document in general.

 Note

In Quote 2.0, custom fields should be populated in the quote and not in the Customize tab because this
is currently not supported. Although users can successfully populate the custom fields during document
customization in Quote 2.0, the values will not be displayed in the document, neither when it's previewed
nor generated.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 185
A list of available custom quote fields opens upon clicking Add New Quote Field. Select a field and click Add.
The selected fields are listed in the Related Fields tab and you can rearrange and delete them by clicking the
respective icons.

SAP CPQ Setup and Administration Guide


186 PUBLIC Quotes Administration
If Required is selected next to a field, users first need to populate the field before they can proceed with
generating the document. Otherwise, if the checkbox isn’t selected, the fields are under the Customize tab for
users to populate.

5.1.2.6 Additional Content

This tab is for selecting the files that are attached to the generated document (for example, descriptions of
quote items, data sheets, terms and conditions, and so on). Before you can add files to the template, you need
to upload them in the Manage Content Documents [page 192] section.

 Note

The additional content is included in the generated document only if the following tags are in the template:

<<INCLUDE_DOCUMENTS>>

<<INCLUDE_DOCUMENTS_END>>
The tags must be used in separate lines.

Files are included in the same order in which they’re displayed to the user. If the checkbox Don’t include
same file more than once is selected on the user side, SAP CPQ doesn’t include duplicate files. Otherwise,
duplicate files are included if found.

To add files to the template, specify the following settings:

• Image settings - specify which settings are applied to PDF files that are inserted as images into generated
documents. You can choose between Default settings (format: PNG, resolution: 300, quality: 100) and
Custom settings. Selecting Custom settings allows you to choose between two formats:
• • PNG (choosing PNG allows you to further specify Image resolution)
• JPG (choosing JPG allows you to further specify Image resolution and Image quality)
Configuring image settings allows you to control the size of the output additional content. Namely,
PNG is a high-quality image format and choosing it results in large output additional content. On the
other hand, choosing JPG results in additional content of a smaller size and lower quality.
• Also Include Quote Items in Formula Evaluation - select the checkbox to attach files to each quote item in
the generated document, not to the quote globally.
• File Name - add the name of the file that you wish to attach to the generated document. File names must
contain the file extension (for example, ABCCaseStudy.docx). The system supports DOC, DOCX, PDF, PNG

and JPG files. Alternatively, click to create a formula that dynamically retrieves file names from a
custom table.
• File Description - enter a description of the file manually, or define a formula that retrieves the description
dynamically.
• Add More Files - click it to add another File Name and File Description fields so that you can add more than
one file to the template.
• File Selection - select Check Boxes to let users select multiple files to attach to the generated document.
Alternatively, select Radio Buttons and users are allowed to select only one file.
• Separate files with page break - select this checkbox for the system to separate additional files with a page
break.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 187
 Note

Files found for the first quote item are displayed first (in the same order as defined in Setup), followed by
the files found for the second item, and so on.

5.1.2.7 Additional Documents

In this tab, you can define and select mandatory additional files that are enclosed in the same email as the
generated document.

This feature is available only for the new document generation engine. Similar to Additional Content, before you
can add files to the template, you need to upload them in the Manage Content Documents [page 192] section.

The differences between additional documents and additional content are the following:

• Additional documents are mandatory additions to the generated document, while additional content files
are optional.
• If PDF files are included as additional content in multi-section documents, they are converted into images
and added into Microsoft Word documents in the output. However, if they are added in the Additional
Documents tab, they remain in the PDF format as separate files.

You can specify the following settings for additional documents:

• Convert Microsoft Word Files into PDF – additional documents in DOC or DOCX format are converted into
PDF files in the output.
• Also Include Quote Items in Formula Evaluation – expand the context of formula evaluation so that files can
be included for each quote item, and not just the quote globally. If the checkbox is not selected, the defined
formula is evaluated only once.
• File Name - add the name of the file that you wish to include in the same mail as the generated document.
File names must contain the file extension (for example, ABCCaseStudy.docx). The system supports DOC,

DOCX, PDF, PNG and JPG files. Alternatively, click to create a formula that dynamically retrieves file
names from a custom table.
• Add More Files - add another File Name field so that you can add more than one file to the template.

The resulting email created at the end of the document generation process contains the generated document
and any additional documents included via Additional Documents. On the user side, users can see the
additional documents in the Documents tab of the quote. There, they can also download previously generated
documents together with any additional documents as a ZIP file.

SAP CPQ Setup and Administration Guide


188 PUBLIC Quotes Administration
5.1.2.8 Delegation of Authority for Document Templates
Users in the permission groups that you select in this tab are able to manage templates on the user side of SAP
CPQ.

For example, if a regional SAP CPQ administrator responsible for several markets wishes to authorize certain
users in a specific market to create document templates, this feature can make that possible. Alternatively, if
you select Visible to all permission groups, all users can manage the template locally.

In Step 2, click , and create a condition under which the template is available locally to the selected
permission groups. By default, 1 displays in the condition box, meaning that the template is available locally to
the selected permission groups under all conditions.

When users are given the authority for managing a document generation template, the template becomes
available in the Manage Global Document Templates section of the User Menu. Just like the administrators,
users can select the language in which the template names and descriptions are displayed. The selection
of languages on the administrator and user side is codependent (the language selected in one page is
automatically selected in the other).

Templates which users can manage are organized into Output Templates and Section Templates sections. When
users open a simple template, they can manage the details in Template Definition, Related Fields, and Additional
Files tabs.

5.1.3 Document Generation Engines


SAP CPQ has two engines for generating documents: the old and the new document generation engine.

By default, Quote 1.0 uses the new document generation engine. However, you can alter the engine selection
within the application using the parameter Use new engine for Document Templates Processing in General
Application Parameters Shopping Cart and Quotes .

Additionally, if needed, you can override the engine selection for a specific template (for example, if you wish to
use the new engine in general, but you have a single template whose format isn’t supported in the new engine)
by following these steps:

1. Access Quotes Document Generation Templates

2. Click next to a template.


The Template Definition tab opens.
3. In the Override Document Processing Engine for this template, select one of the following values:
• Use Global setting from application parameters page - default value. If selected, the system uses the
engine that is set by the application parameter.
• Use Old Engine - the system uses the old generation engine for the template, regardless of the value of
the parameter.
• Use New Engine - the system uses the new generation engine for the template, regardless of the value
of the parameter.
4. Click Save.
The system generates the template via the selected engine.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 189
Old vs. New: Quote Engines and Document Generation Engines

A distinction should be made between the following engines:

• Quote 1.0 vs. Quote 2.0


• the old document generation engine vs. the new document generation engine

The Quote 1.0 engine uses both the old and new document generation engines. On the other hand, Quote 2.0
only uses the new document generation engine.

The old document generation engine generates PDF, DOC, DOCX, XLS, and XLSX files. On the other hand,
the new engine generates PDF, DOCX, and XLSX files (in both Quote 1.0 and Quote 2.0). Furthermore, when
uploading Microsoft Excel templates to the new engine, you can import both XLS and XLSX templates, and the
new engine generates them as XLSX files.

 Note

If a Microsoft Word template is used, the output format can be a Microsoft Word document, PDF file, or
both. On the other hand, the output of a Microsoft Excel template is always a Microsoft Excel document.

While the new document generation engine is faster than the old engine, it may not support all the templates.
Therefore, when switching from the old to the new engine, it’s advisable to test the templates in a sandbox
environment to verify that there are no issues. Otherwise, it may be necessary to fix the layouts or to reupload
the templates.

 Note

Unless specified otherwise, the procedures explained in the related topics describe the new document
generation engine and Quote 1.0.

5.1.4 Setup Administration

This page covers the workflow adjustments that need to be made to enable document generation and the
parameters that need to be set.

Workflow Adjustments

To enable your users to generate documents in SAP CPQ, on top of creating a template with the appropriate
tags, you need to make the following workflow adjustments:

• make sure that the Generate Documents action does not have any conditions [page 421] that prevent it
from displaying to users.
• add the Generate Documents action in the workflow matrix [page 416].

SAP CPQ Setup and Administration Guide


190 PUBLIC Quotes Administration
Application Parameters

Listed below are all the application parameters that influence how documents are generated in SAP CPQ.

Application Parameters > General Parameters

• Display generated documents in Recent Items - if TRUE is selected, the generated documents are displayed
in the Recently Viewed list.

Application Parameters > Shopping Cart & Quotes

• Define prefix for generated document name - the name of generated documents starts with this prefix.
• Define suffix for generated document name - the name of generated documents ends with this suffix.
• Share document customizations - allows you to share all customizations during document generation
among all users for each quote. If FALSE is selected, all customizations are stored only for the user
making the customizations. If multiple users work on one quote, customizations are saved only for each
individual user. Users working on one quote can’t view each other’s customizations. If TRUE is selected,
customizations are shared between users.
• Reconfigure products during document generation - if TRUE is selected, the system retrieves the latest
changes made on products from the Setup before generating a document.
• Users can see previously generated documents - if set to TRUE, the View Previously Generated Documents
button displays in the Download Document and Send Email tab on the user side allowing users to access
documents that were previously generated on that quote.
• Allow users to download documents that have been generated for templates that have been deleted - if
set to TRUE, users can download documents generated using templates that administrators have deleted.
Users can download documents only if they have access to previously generated documents (if Users can
see previously generated documents is set to TRUE).
• Allow users to download documents that have been generated prior to CPQ 2012 January release - if TRUE is
selected, users can download documents generated before January 2012, regardless of whether they have
permission to view the template.
• Hide Items With No Files on document generation - if Also Include Quote Items in Formula Evaluation is
enabled on the Additional Content tab, the system won’t display in the generated document any items that
don’t have an additional file due to a condition.
• Use new engine for Document Templates Processing - if set to TRUE, the system uses the new document
generation engine.
• Heading style used in generated documents- allows administrators to control the heading styles used in
the document. Selecting Use destination styles applies the heading style of the first section to all sections.
Selecting Keep source formatting allows each section to maintain its individual heading style.
If Sections will inherit formatting (header,footer etc.) from first section in the template is active in
Setup Document Generation Templates Edit (a multi-section template) Sections , and Keep
source formatting is the selected value for this parameter, sections of the document inherit header and
footer formatting from the first section of the template, but keep their own individual heading styles. This
parameter is available only for the new document generation engine.
• Type of break used in generated documents - allows administrators to override the default breaks between
the sections of the document and to apply the selected type of break instead. Administrators can choose
between the following breaks: Paragraph break, Page break, Column break, Section break continuous,
Section break new column, Section break new page, Section break even page, Section break odd page, Line
break. This parameter is available only for the new document generation engine.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 191
• Disable deletion of generated documents on quote – if TRUE is selected, the Delete action isn’t available in
the Documents tab and users aren’t able to delete generated documents.

Workflow/Approval > Actions


• When quote needs approval, users can only preview documents - if selected, users can only preview
Microsoft Word or PDF documents, not generate them. Preview can’t be enabled for Microsoft Excel
documents.

Delegation of Authority > Ability to Manage Documents


• Users from selected permission groups will be able to upload content files used in templates uploaded by
application administrator - enable users from the permission groups selected in this section to upload
content files that are used in templates uploaded by application administrators.

5.1.5 Manage Content Documents

Documents that you wish to attach as additional content or additional documents to a generated document
must first be uploaded in the Manage Content Documents section in Setup Quotes .

The list of uploaded documents displays the file name, format, and destination directory. Also, you can see
in the list who created the file, who last modified it and when it was last modified. The Permissions column
displays the companies to whose local administrators the file is visible.

In the list, you can click , and to delete, edit, and preview the file, respectively. After clicking
the edit icon, a pop-up displays where you can select and unselect the companies that will see the file. After
clicking the preview icon, enter the number of the quote that the system will use as a source of data and click

. The preview of the document is available for downloading and printing.

 Note

This feature doesn’t support nested folders.

Adding a Content Document

1. Click Add New.


The Adding New Documents pop-up displays.
2. Click Choose Files and select the document to upload.
You can upload multiple documents at once.
3. Click Upload and Save All.
A message displays informing you of the success of the upload.
Alternatively, click Cancel Upload if you don’t want to proceed with the upload.
4. Exit the window.
The document displays in the list.

SAP CPQ Setup and Administration Guide


192 PUBLIC Quotes Administration
 Note

When a ZIP file is uploaded as a content document, an email notification is sent, stating whether the upload
is finished, the names of the compressed files unpacked during the upload, and whether the upload is
successful or not. Moreover, the email also informs the administrator if the upload is unsuccessful because
of an incorrect extension or folder name.

Content Document Bulk Deletion

In this section, you can delete multiple documents from the section with a single action.

• Delete documents listed above - selecting this option before clicking Delete deletes all the documents
currently visible on the page.
• Delete all documents that match entered criteria - selecting this option before clicking Delete deletes all the
documents that are filtered after you enter a search term in the search boxes above.
• Delete all documents - selecting this option before clicking Delete deletes all content documents.

5.1.6 Template Creation Tool

The Template Creation Tool lets you create templates with basic document tags so you don’t need to add them
manually.

Prerequisites

To have a simple or a section template created.

Context

The tool is convenient for administrators who need simple templates and who don’t have experience working
with document generation tags. The Template Creation Tool isn’t available for multisection templates.

Procedure

1. Go to Setup Document Generation Templates.


2. Edit or create a simple or section template.
3. Click Template Creation Tool.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 193
A pop-up displays with two sections: Sample Templates and Template Tag Builder. In Sample Template, you
can download and preview systematic templates. If needed, these templates can additionally be formatted,
you can add and remove tags.

4. Click in the Template Tag Builder section.

The Document Template Builder window pops up.


5. In Step 1, select what data you want to display in the document.
a. Expand the Select Data to be included in the document template section.

You can select the following quote header data:


• Quote Number
• Date Modified
• Date Create
• Tax
• Subtotal
• Total
• Bill To data (Contact Name, Address, Phone, Fax, Company)
• Ship To data (Contact Name, Address, Phone, Fax, Company)
• End User data (Contact Name, Address, Phone, Fax, Company)
If you select Address for Bill to, Ship to and End users, the system includes in the template tags for
address 1, address 2, city, state, zip code, and country/region.
• Custom Fields
• Product Type
b. Expand the Select Additional Content Documents you wish to insert into your template section.

A table displays all documents uploaded in Manage Content Documents that you can include in the
generated document.
c. Select a file.
d. Expand the Create Tags for Conditional Data/File inclusion/insertion section.

Here, you can optionally create conditions under what the data you selected in the first section is
displayed in the generated document.

SAP CPQ Setup and Administration Guide


194 PUBLIC Quotes Administration
1. Select a tag in Left Value.
Only tags related to the selected data are displayed in the drop-down list.
2. Select an operator.
The conditions can only check if the data is equal (=) or not equal (not =).
3. In Right Value(s), enter the value that the system needs to check.
4. Click Add Condition.
The condition displays in the Conditions column.
5. (Optional) Repeat the previous steps to add multiple conditions.

You can remove a condition by clicking .


e. Expand the Select Product Data for quoted items you wish to insert into your template section.
f. Click Add Product Data Section.

The New Product Data Section window pops up.

The tags selected here display in a C2 tag that loops through all items in the quote.
1. Select Show data as a table
These fields display:

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 195
• Number of columns - select in how many columns the data is displayed.
• Header - displays for each column. Enter the name of the column.
• Product data tags - click Select Product Data. Select the product-related tags and attributes
(to select multiple attributes, hold the Ctrl key on your keyboard while selecting.). Containers
can’t be displayed in the tabular view.
• Footer - click Add Row and enter the text that displays in the footer.
2. Select Don’t show data as a table.
Only the Product data tags field is available in the nontabular view. Click Select Product Data.
Select the product-related tags and attributes (to select multiple attributes, hold the Ctrl key on
your keyboard while selecting.). You can also select containers (select a container and then select
pertaining columns).
3. Select the additional data:
• Show only items of product type - select product types that you want to be displayed. By
default, all product types are displayed.
• Only show items not marked as optional - only item types other than optional are displayed
(base, alternative, and variant).
• Only show items marked as optional - only optional items are displayed.
4. Click Add Section.
g. Repeat the previous step to add multiple sections in the template.

To remove sections, click .


6. In Step 2, click Generate Tags Document.
7. Click Download Tags Document.

A document with all the tags you selected in the previous steps is downloaded.

You can now either delete the descriptions in the generated template and proceed with the upload [page
179], or copy and paste only the tags into another document.

Check the Document Generation Tips and Tricks [page 198] page to avoid any possible issue with
generating your document.

5.1.7 Document Generation User Journey

The purpose of this feature is to visually guide new, less experienced or less frequent users through the process
of selecting products, creating a shopping cart, generating a quote document.

Leading Actions

• Enabling arrows to show required action


Depending on application parameter Show lead/prompting arrows in catalog (catalog, configurator,
shopping cart, document generation), SAP CPQ displays arrows that make it easier to understand that
users need to select a category or the Customize product button.

SAP CPQ Setup and Administration Guide


196 PUBLIC Quotes Administration
• For categories, the arrow is added to the end of category name.
• For product Customize button, the arrow is added in it.
• For the configurator, the same arrow is added to the Add to quote/Prepare proposal button.
• The approvals action will also have an arrow in order to prompt uses to click it (when it shows up)
if approvals are needed. This is because the Generate Quote action won’t be there any longer and
approvals are the next step.
Note that the application parameter Show lead/prompting arrows (catalog, configurator, shopping cart,
document generation) is added to first tab of application parameters. Default value is FALSE.
• Adding products to a quote
To view the option Add to Quote for a product, users need to select at least one product first.

Document Translation

When users start the document generation process, they can translate the quote or template, for example into
the customer's language, by choosing a dictionary for the document language.

Sending Documents as Email Attachments from SAP CPQ

• After users select a template for generating a document and customize it, they can download the
document and send it as email attachments from the application.
• The recipients’ details and the email subject and body are predefined, but users can change the details and
select who receives the email.
• The email body contains a predefined text that neither users nor administrators can change (for this,
please contact the SAP CPQ Support team).

 Note

On Quote 2.0 tenants, where Involved Parties are used instead of Customers, in the email form in the end
of the document generation process, you can select one or multiple partner functions as recipients of the
generated document. Only the partner functions with a defined email address are offered for selection.

The generated document is sent as an email attachment if Email Attachment is selected. Selecting Include
Proposal Link includes a link in the email.

 Note

If the option Send Mail using your default mail client… is selected, it’s necessary to manually attach the
generated document (the generated document won't be automatically attached to your email). Also, the
Plain text body type must be selected.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 197
5.1.8 Document Generation Tips and Tricks

This page lists the workarounds and methods of avoiding issues with document generation in SAP CPQ.

• Don’t change the color of the tags to white to make a document cleaner. The system pulls values of tags
and it doesn’t display the tags in the generated document, so you shouldn’t change the color of tags to
white to hide them in the template.
• Don’t switch fonts in one tag.
• Always use the same font for tags within one document.

• Make sure to show paragraph marks and other hidden symbols in Microsoft Word by clicking in
the toolbar. This shows all characters that may have been entered accidentally or while copying content
and that will potentially cause errors in generating documents in SAP CPQ. Make sure to delete such
characters.
• Everything inside a C loop must be in the same font.
• If all sections after the second section in a multisection template inherit the formatting from the second
section, and the Sections will inherit formatting (header,footer etc.) from the first section in the template
option is off, select the Different Odd and Even checkbox in the word-processing program.
• Make sure to add a new line after each C2 tag (press ENTER on your keyboard).
• If there are tables inside a C loop in the header, footer and the main part of the document, they all must
have the same format (for example, they must have the same columns).
• Use template versions when adding new tags in an existing template. When you create a template and
properly generate a document, the next time you want to add new tags, create a new version of the
document and make it active. This way, you make sure to always have a template version with tags
that properly retrieve data. Also, if something isn’t properly retrieved in the new document, you limit the
debugging only to the recently added tags.
• Don’t add table tags in conditions.
• Don’t add conditions into conditions.
• Protected DOC and DOCX files can’t be uploaded into SAP CPQ.
• If your template isn’t being properly generated, try adding an enter or a space character at the end of the
section.
• If Q_QP_FILE tag is found inside the text (paragraph), the file is embedded above that paragraph, not inside
the paragraph where the tag was placed. This is applicable for all tags that insert additional files in the
document (docs, images, and so on).
• The following tag returns numbers in the user’s selected number format:
<*CTX( Number(<*EVAL(15000)*>).ToFormat(<*CTX( Number(1234.56).Format )*>) )*>
• The application of conditional logic depends on the type of tags used for document generation: C2 or
QUOTE_ITEMS. If the C2 approach is used, the system will first parse content and later, based on the
parsed conditional logic, display, and parse the document content. On the other hand, QUOTE_ITEMS
parses the condition and process only the content data that satisfies the condition. Row spacing should be
reduced to minimum to ensure correct tag parsing. Below are the syntax examples for both approaches,
which enable the user to print the content of the main and line items under specific conditions.
• Tags for including additional content in documents must be placed in separate lines.
• If your Word document generation template contains an excessive number of C2 tags, you won’t be able to
upload it. Instead, make sure you convert it to a multi-section document before you upload it.
• Using document generation tags in Excel charts is not supported.

SAP CPQ Setup and Administration Guide


198 PUBLIC Quotes Administration
C2 Example

<<C2>>
<<HEADER>>
This is a header.
<<HEADER_END>>
<<MAIN>>
Repeat once for each main item.
<<C_STOP>>
<<MAIN_END>>
<<LI>>
[CONDITION,<<C_TAG(CTX,EQ,IN,GT,LT... TAGS GO HERE)>>=1]
*CONTENT GOES HERE*
[CONDITION_END]
<<LI_END>>
<<FOOTER>>
This is a footer.
<<FOOTER_END>>
<<C_END>>

QUOTE_ITEMS Example

<<QUOTE_ITEMS>>
<<HEADER>>
<<HEADER_END>>
<<MAIN: CONDITION(CTX,EQ,IN,GT,LT... TAGS GO HERE)>>
<<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>>

5.2 Quote 2.0

Quote 2.0 is the improved quote engine available since June 2018. The new quote engine was developed as a
part of the initiative to make SAP CPQ the state-of-the-art software that allows users to create large quotes
more quickly than in Quote 1.0.

Most SAP CPQ features that are available for Quote 1.0 are available for Quote 2.0 as well. These features are
described throughout the Setup and Administration Guide [page 10]. The differences between the two engines

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 199
are described in Quote 1.0 vs Quote 2.0 - Feature Differences [page 204] and the following sections describe in
details these differences as well as features that are specific for Quote 2.0.

Quote 2.0 Migration Guide [page 200]

Fields, Calculations, Layout [page 281]


In Fields, Calculations, Layout you can define options for basic quote elements in the Quote 2.0, such as
quote fields, calculations, their layout and so on.

Quote 2.0 Calculations [page 283]


To manage calculations for Quote 2.0, access the Fields and Calculations tab in Setup Quotes
Fields, Calculations, Layout . The page shows in Setup only when Quote 2.0 is on. Otherwise, if using
Quote 1.0, calculations should be administered under Pricing/Calculations > Cart Fields Administration.

Solution Design [page 314]


The Solution Design feature enables users to organize items into sections and subsections in a
separate tab on quotes.

Quote Teams [page 326]


Grouping users into teams enables parallel work on one quote and allows quote owners to assign quote
sections to different teams.

Filtering Items in Quote 2.0 [page 328]


Quote Filtering allows users to filter out quote items by specific values in quote item custom fields and
in some standard SAP CPQ fields (Part Number, Product Type and Product Name). Filtering is available
only in Quote 2.0.

Scripting for Quote 2.0 [page 329]


The Quote 2.0 scripting is event-based which adds to the performance of the system when working
with complex scripts.

Business Partners [page 332]


Business partners of an organization are all the entities that have business relations with that
organization.

5.2.1 Quote 2.0 Migration Guide

This guide is intended primarily for Quote 1.0 administrators and clients who are considering migrating their
models to the Quote 2.0 engine and to those who have decided to migrate and need guidance on the required
steps.

This guide will help you understand the following:

• the benefits of using Quote 2.0 [page 201]


• how to initiate the migration and what is the migration procedure [page 202]
• what is the migration effort estimate [page 202]

Additionally, in this document, you can find a comparative overview of the features available in Quote 1.0 and
in Quote 2.0 [page 204], as well as the specifics relevant for the migration of each administrative section [page
233].

 Note

Before diving into the migration, take a look at the list of the most frequently asked questions [page 279].

SAP CPQ Setup and Administration Guide


200 PUBLIC Quotes Administration
Related Information

How to Migrate from Quote 1.0 to Quote 2.0 [page 202]


Quote 1.0 vs Quote 2.0 - Feature Differences [page 204]
Quote 1.0 to Quote 2.0 Migration FAQ [page 279]

5.2.1.1 About Quote 2.0 - Benefits and Compatibility

Quote 2.0 is the improved quote engine available since June 2018.

The new quote engine was developed as a part of the initiative to make SAP CPQ the state-of-the-art software
that allows users to create large quotes more quickly than in Quote 1.0. After the responsive design was made
public in 2015 and the new Document Generation engine made available in 2017, clients needed a new Quote
engine that would additionally boost their performance.

 Note

Benefits of Quote 2.0:

• Performance - Quote 2.0 is faster than Quote 1.0.


• Scalability - improved support for large quotes (from 4 thousand to 100 thousand lines).
• Clean system with relevant features only - obsoleted features are removed from the system and
the features that are most frequently in use are redesigned or replaced with powerful alternatives.
Additionally, events and pipelines are cleaned up which adds to the improved system performance.
• Streamlined Implementation - because of all these benefits, Quote 2.0 is easier to implement than
Quote 1.0.
• Easier reporting - the Quote 2.0 database is simplified and more intuitive, which enables easier
reporting.
• Solid foundation for future quote improvements.

Quote 1.0 is still the default quote engine in SAP CPQ. New clients may use Quote 2.0 from the beginning (this
requires initial setup before the modeling starts) and existing clients need to migrate from Quote 1.0 to Quote
2.0.

Compatibility

Before initiating the migration from Quote 1.0 to Quote 2.0, check the following list to understand the
compatibility of the new quote engine with the rest of the system:

• Quote 1.0 and Quote 2.0 can’t be used in parallel on the same tenant.
• Only responsive design is supported in Quote 2.0.
• The user interface is the same, although some tweaks have been made (for example, Load Existing Project/
Quotation is redesigned).
• Only the new Document Generation [page 189] engine is supported in Quote 2.0.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 201
• Quote 2.0 needs to be enabled on new tenants (Quote 1.0 is still the default engine).
• Quote 2.0 shouldn’t be enabled on existing tenants if the system hasn’t been previously adjusted to Quote
2.0. This requires a migration project [page 202].
• Some features aren’t available in Quote 2.0. They’re either obsoleted or they’re replaced with an improved
alternative. This is described in Quote 1.0 vs Quote 2.0 - Feature Comparative Overview [page 204].
• Old quotes are not visible after the Quote 2.0 engine is turned on. There is no feature to migrate old quotes.
• We do not offer an out-of-the box migration solution, nor a migration tool. Moving from Quote 1.0 to Quote
2.0 should be handled in a project [page 202].

Related Information

How to Migrate from Quote 1.0 to Quote 2.0 [page 202]


Quote 1.0 vs Quote 2.0 - Feature Differences [page 204]
Feature Specific Migration Instructions [page 233]
Quote 1.0 to Quote 2.0 Migration FAQ [page 279]

5.2.1.2 How to Migrate from Quote 1.0 to Quote 2.0

Clients who are using Quote 1.0 can decide to migrate their tenants to Quote 2.0. In such case, clients should
first contact the Professional Services team and ask for their assistance. Migration will be handled as a
separate project under the terms agreed with Professional Services. Depending on the number of items and
the complexity of client models, the migration is different for each client.

 Note

We do not offer an out-of-the box migration solution, nor a migration tool. Migration should be handled as a
separate project under the terms agreed with Professional Services.

SAP CPQ doesn’t switch automatically to Quote 2.0, nor should administrators initiate the transition on their
own. Quote 2.0 isn’t backward compatible with old quotes and there are functionalities in Quote 1.0 that are yet
to be developed for the new engine.

 Note

Old quotes are not visible after the Quote 2.0 engine is turned on. There is no feature to migrate old quotes.

New SAP CPQ tenants are automatically set to Quote 1.0. To move to Quote 2.0 before you begin modeling,
contact the SAP CPQ Support team.

Quote 2.0 Migration Checklist

If you are thinking about migrating from Quote 1.0 to Quote 2.0 and you are wondering about the effort it will
require, you can download the Quote 2.0 Migration Checklist that will help you with the analysis. The checklist

SAP CPQ Setup and Administration Guide


202 PUBLIC Quotes Administration
containsall administrator sections that require effort on your side during the migration [page 233], along with
the T-shirt sizing effort for each activity. You can filter the list to show only the sections that are relevant for
your model, you can add notes and comments that will help you do the analysis.

 Note

Download the ZIP file and unpack it to get the Quote 2.0 Migration Checklist.

Migration Procedure

Make sure you have read the Quote 1.0 vs Quote 2.0 - Feature Differences [page 204] and Feature Specific
Migration Instructions [page 233]. At this point, you should be familiar with the differences between the two
engines and you understand how that may reflect on your model in SAP CPQ.

If you are ready to migrate your Quote 1.0 tenant to Quote 2.0, follow these steps

1. Contact your SAP Account Executive to check out the options for getting you a temporary tenant to
prepare the migration.
The temporary tenant should be a copy of your production tenant that you’ll use only to adjust the model
in Quote 2.0. After you've adjusted your model on the Quote 2.0 temporary tenant, you’ll move everything
from the temporary tenant back to the production tenant.
SAP CPQ does not provide a free of charge tenant for this purpose. You need to follow the standard
procedure for getting a tenant that is subject to licensing, as agreed with the SAP Account Executive.
2. Ask the Support team to turn on Quote 2.0 in the temporary tenant.
3. Contact the SAP CPQ Professional Services to discuss the modeling in Quote 2.0.
The team analyzes your request and suggests the best approach. Have in mind that old quotes aren’t
visible in the tenant after the Quote 2.0 engine is turned on. There is no feature to migrate old quotes.
The team considers your model in SAP CPQ and then propose a solution.
4. Model the new tenant according to what you agreed with the Professional Services.
Make sure to keep a detailed record of the changes you made in the temporary tenant so you can replicate
them later in the original (production) tenant.

 Note

Here is a list of documents with all the relevant information that you need to set up your tenant:
• Quote 1.0 vs Quote 2.0 Feature Differences [page 204] lists the differences between the two quote
engines and provides a workaround for each feature that exists in Quote 1.0, but is incompatible
with Quote 2.0. This document also contains the features that aren’t available in Quote 2.0.
• Administrator guide describes SAP CPQ standard features and those features that are available
only in Quote 2.0 [page 199].
• Scripting Help list methods and variables for Quote 2.0.

If administrators can’t handle the setup on their own, they should contact the SAP CPQ Professional
Services team.
5. Test if everything is working as expected in the temporary tenant before performing the production
upgrade.
6. Contact the SAP CPQ Support team to turn on the Quote 2.0 in the original (production) tenant.
7. Replicate all the adjustments that you have made in the temporary tenant in the production tenant.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 203
Use the record of the changes you made in the temporary tenant.
The production environment is offline while the migration is in progress so make sure to plan the time for
these steps accordingly (preferably during the weekend).

Related Information

Quote 1.0 vs Quote 2.0 - Feature Differences [page 204]


Quote 1.0 to Quote 2.0 Migration FAQ [page 279]
Quote 2.0 [page 199]

5.2.1.3 Quote 1.0 vs Quote 2.0 - Feature Differences

This page contains a comparative overview of Quote 1.0 vs Quote 2.0 features. For more details on the
differences and the migration instructions, check Feature Specific Migration Instructions [page 233].

All the features listed here are supported in Quote 1.0 unless stated otherwise with the status Only in Quote
2.0.

Features that are limited to Quote 2.0 engine and the features that are available in both quote engines, but their
usage is different for each engine are listed here, as well as the features that are obsoleted from Quote 2.0.

 Note

If a feature is not listed in this page, then it is the same as in Quote 1.0.

Integrations

Integration Name Status

SAP S/4HANA Cloud Only in Quote 2.0

External Configurator Integration Only in Quote 2.0

SAP Subscription Billing Only in Quote 2.0

Variant Configuration Supported

SAP Commerce Cloud Supported

SAP Cloud for Customer Supported

SAP ERP Central Component (ECC) Project-based implementation, not available out of the box.

SAP S/4HANA (Sales Order) Supported

SAP Billing Revenue and Innovation Management (Solu­ Only in Quote 2.0
tion Quote in SAP S/4HANA) (subscription and service
contract products)

SAP CPQ Setup and Administration Guide


204 PUBLIC Quotes Administration
Integration Name Status

SAP Master Data Service for Business Partners Only in Quote 2.0

Salesforce Supported

Microsoft Dynamics Toolset for Developing Custom CRM Integrations

CLM To do

The CLM solution used for Quote 1.0 will be replaced by a


partner solution in Quote 2.0.

CX AI Supported

DocuSign Supported

AdobeSign To do

Enablement Obsoleted

NetSuite Obsoleted

Quote

Feature Name Status Description and Workaround

Bulk Quote Deletion Redesigned Bulk Deletion [page 379] works the
same as in Qupte 1.0, except that you
can only delete quotes in bulk (not
users or customers). In Quote 2.0, you
select quotes for deletion, whereas in
Quote 1.0, you select users and delete
their quotes.

Load Existing Project/Quotation Redesigned The list of quotes in Quote 2.0 is rede­
signed for a better user experience.

Item Filtering Redesigned Quote filtering [page 328] is improved


in Quote 2.0 and it provides more op­
tions for filtering.

Customers Obsoleted Customers are replaced by Involved


Parties [page 332] in Quote 2.0

Involved Parties (business partners Only in Quote 2.0 /


and partner functions)

Quote Teams Only in Quote 2.0 Allows quote owners to create adminis­
trator and solution teams [page 326].
Administrators and quote owners can
manage sections and assign them to
solution teams. Each solution team has
access only to the sections assigned to
them.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 205
Feature Name Status Description and Workaround

Solution Design Only in Quote 2.0 Allows users to create sections in the
Solution Design [page 314] tab and add
items to them.

Section Distribution Only in Quote 2.0 The value of sections with the Sum ag­
gregate type can be distributed to other
sections [page 322] as indicated in the
distribution calculation.

Bulk Update of Quote Item Custom Only in Quote 2.0 This feature facilitates the process of
Fields in Sections mass updating the section fields with
one value.

Quote Visibility Only in Quote 2.0 Quote visibility [page 367] can be set
in the same way in both Quote 2.0 and
Quote 1.0. However, the dynamic set­
tings should be done only in Sql Where
and Sql Join because conditions are not
available for Quote 2.0.

Search Quotes per Multiple Statuses To do /

Renewal Management Obsoleted The Renewals feature tradiotionally


available in Quote 1.0 is obsoleted for
Quote 2.0. However, in Quote 2.0, users
can perform product/contract renew­
als but only as part of the integration
with SAP Billing Revenue and Innova­
tion Management (Solution Quote in
SAP S/4HANA).

Fields, Calculations, Layout Only in Quote 2.0 Available only in Quote 2.0. This section
groups the features for managing quote
layout, fields and calculations and dis­
tribution calculations.

Margin Health Redesigned Margin health in Quote 2.0 works in the


same way as in Quote 1.0, except that
the action Margin Health has been re­
moved and instead calculations need to
be set up.

Compare Revisions Obsoleted Different revisions of a quote can be


compared using the Compare action
only in Quote 1.0.

Quote Layout

Feature Name Status Description and Workaround

Layout Redesigned In Quote 2.0, quote layout is defined in Quotes Fields, Calculations,
Layout Layout .

SAP CPQ Setup and Administration Guide


206 PUBLIC Quotes Administration
Feature Name Status Description and Workaround

Layout Permissions Redesigned In Quote 2.0, quote layout permissions are defined in Quotes Fields,
Calculations, Layout Layout Permissions .

Quote Layout Col­ Redesigned These columns are not available in Quote 2.0:
umns

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 207
Feature Name Status Description and Workaround

Quote Item Columns: Product Type Col­ Quote Totals Columns:


umns:
• ChannelMargin­ • ChannelMargin­
Percent • ChannelMargin­ Percent
• ChannelMarkup­ Percent • ChannelMarkupA­
Percent • ChannelMarkupA­ mount
• ChannelMarkupA­ mount • ChannelMarkup­
mount • ChannelMarkup­ Percent
• CustomColumn1 Percent • CustomColumn1
• CustomColumn2 • CustomColumn1 • CustomColumn2
• CustomColumn3 • CustomColumn2 • CustomColumn3
• CustomColumn4 • CustomColumn3 • CustomColumn4
• CustomColumn5 • CustomColumn4 • CustomColumn5
• CustomColumn6 • CustomColumn5 • CustomColumn6
• EndUserExtende­ • CustomColumn6 • EndUserExtende­
dAmount • EndUserExtende­ dAmount
• EndUserNet dAmount • MarginHealth
• ExternalId • MarginHealth • Multiplier
• FamilyCode • Multiplier • MultiplierAmount
• Inventory • MultiplierAmount • ProductModel­
• ItemDeliveryMe­ • ProductModel­ Price
thod Price • PromoDiscountA­
• ItemDeliverySta­ • PromoDiscountA­ mount
tus mount • PromoDiscount­
• ItemShippingCost • PromoDiscount­ Percent

• LeadTime Percent • OverallDiscountA­

• MonthlyFeeA­ mount

mount • OverallDiscount­

• MPN Percent

• Multiplier • SubTotalAmount

• MultiplierAmount • TotalChannel­
GrossMarginPer­
• PROD­
cent
UCT_WEIGHT
• ProductModel­
• TotalChannelMar­
kupAmount
Price
• ProductVersion
• TotalChannelMar­
kupPercent
• PromoDiscountA­
mount
• TotalMonthly­
FeeAmount
• PromoDiscount­
Percent
• TotalShippingCost

• RolledUpCartItem
• TotalUpfrontA­
mount
• TotalWeight

SAP CPQ Setup and Administration Guide


208 PUBLIC Quotes Administration
Feature Name Status Description and Workaround

• RolledUpEndCus­
tomerExtended­
Price
• RolledUpEndCus­
tomerUnitPrice
• UnitDiscountA­
mount
• UnitMultiplierA­
mount
• UPC
• UpfrontAmount
• UpfrontPercent
• Weight

Quote Item Custom Fields

Feature Name Status Description and Workaround

Quote Item Custom Fields Redesigned In Quote 2.0, quote item custom fields
should be created and managed in
Fields and Calculations [page 284].
To delete a quote item custom field,
go to Setup Quotes Quote Item
Custom Fields .

Support for formulas on quote item Obsoleted Use quote calculations or scripts on
custom fields Item added and Item updated events.

Design

Feature Name Status Description and Workaround

Classic Design Obsoleted Quote 2.0 supports only the responsive


design.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 209
Calculations

Feature Name Status Description and Workaround

Cart Fields Administration Redesigned In Quote 2.0, calculations should be


managed in Fields, Calculations,
Layout Fields and Calculations sec­
tion. The logic for managing calcula­
tions has been completely changed as
described in Quote 2.0 Calculations
[page 283].

Rounding Setup Redesigned In Quote 2.0 it is possible to set round­


ing rules for each currency as described
in Rounding Setup [page 535].

Application Parameter (Calculate Dis­ Only in Quote 2.0 This parameter is available on the
counts only for Changed Items) Discounts page in Setup and it checks
the discount rules only for the changed
items

Quote Multipliers Obsoleted Discounts should be used instead of the


multipliers functionality. Alternatively,
quote item custom fields can also be
used.

Promotions Obsoleted /

Enable Formula Reevaluation Condition Only in Quote 2.0 Administrators of Quote 2.0 engines
and Formula Reevaluation Condition in have the possibility to decide whether
the Discounts section. the discounting rules [page 521] are
reevaluated every time their users open
a quote and every time reconfigure
and recalculate actions are triggered in
quotes.

SAP CPQ Setup and Administration Guide


210 PUBLIC Quotes Administration
Quote Custom Fields

Feature Name Status Description and Workaround

Calculation Types (Once, when quote Redesigned In Quote 2.0, you can choose between
is created, Every time quote is modi­ creating scripts, or using the low-code
fied and Always) approach by creating formulas directly
in custom field definition. In custom
field definition, you can select an event
that specifies the moment when the
dedicated calculation formula is trig­
gered, and create the relevant formula
for that event. This way, it is possible
to create certain scripts directly on
the custom field, instead of always us­
ing global scripts. You can select the
events Once, when quote is created,
On Involved Parties Changed, and After
changing the value of custom fields.

Quote 2.0 does not recalculate a cus­


tom field always, even if no change was
made on the quote (in Quote 1.0 this
was possible if Always calculation type
was selected).

Global Information (GI) Variables Obsoleted CTX tags should be used instead.

Cart Level Aggregates Obsoleted Scripting offers similar possibilities.


This feature will be redesigned and re­
implemented in the future.

Transfer to items Obsoleted Administrators can create product rules


based on quote custom fields. Users
will then have to click the Reconfigure
action on quote.

Quote Actions

Standard Action Description

Add Comment from CLM To Do

Attach Document To SAP Opportunity Obsoleted

Attach Document To SAP Opportunity And Sales Quote Obsoleted

Attach Document To SAP Sales Quote Obsoleted

Cancel Changes Obsoleted

Change E-Sign Status To Do

Change Status From CLM To Do

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 211
Standard Action Description

Change Status In CLM To Do

Conditional Reconfigure Obsoleted

Create Assets Obsoleted

E-Sign Accepted To Do

E-Sign Declined To Do

Generate Document For E-Sign To Do

Margin Health Obsoleted

Place order to ERP Obsoleted

Preview To Do

ReApply Taxes Obsoleted

Replace Items To Do

Send Email Obsoleted

Send Quote To CLM To Do

Send Quote XML Obsoleted

Update Opportunity and Create Update SAP Sales Quote Obsoleted

Update Quote in CLM To Do

Update Sales Quote Obsoleted

Update SAP Opportunity Obsoleted

Void Document To Do

Document Generation

Feature Name Status Description and Workaround

Old Document Generation Engine Obsoleted Only the new document generation en­
gine [page 189] is supported in Quote
2.0.

Emails are sent by CPQ Mailer To Do In Quote 2.0 only User's Mail Client
can be selected in the Emails are sent
by field in Email Customers / Quote
Acceptance Settings.

Users can choose customer’s lan­ To Do


guage when creating documents

SAP CPQ Setup and Administration Guide


212 PUBLIC Quotes Administration
Quote Tags

Feature Name Status Description and Workaround

<*SHIPPINGMETHOD*> Obsoleted /

<*FREIGHTAMOUNT*> Obsoleted /

<*IAAVAILABLE(Copy)*> Obsoleted /

<*END_USER_INFO (FirstName)*> Obsoleted <*CTX( Quote.InvolvedParti


es.PartnerFunctionKey(BP).
FirstName )*>
<*CTX( Quote.InvolvedParti
es.CurrentInvolvedParty.Fi
rstName )*> - should be used in
document generation templates only.

<*CARTAMOUNT*> Obsoleted <* CTX(Quote.Total.Amount)


*>
<*TAXEXEMPT*> Obsoleted /

<*TOTALLISTPRICE*> Obsoleted <*


CTX(Quote.Total.ListPrice)
*>
<*TOTALNETPRICE*> Obsoleted <*
CTX(Quote.Total.NetPrice)
*>
<*AVERAGEDISCOUNTPERCENT*> Obsoleted <*
CTX(Quote.Total.AveragePro
ductDiscountPercent) *>
<*TOTALDISCOUNTAMOUNT*> Obsoleted <*
CTX(Quote.Total.ProductDis
countAmount) *>
<*AVERAGEMULTIPLIER*> Obsoleted /

<*TOTALMULTIPLIERAMOUNT*> Obsoleted /

<*ADDITIONALMULTIPLIER*> Obsoleted /

<*ADDITIONALMULTIPLIERA­ Obsoleted /
MOUNT*>

<*SUBTOTALAMOUNT*> Obsoleted <*


CTX(Quote.Total.NetPrice)
*>
<*TOTALCHANNELMARKUPPER­ Obsoleted /
CENT*>

<*TOTALCHANNELMARKUPA­ Obsoleted /
MOUNT*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 213
Feature Name Status Description and Workaround

<*TOTALCOST*> Obsoleted <* CTX(Quote.Total.Cost)


*>
<*TOTALGROSSMARGINPERCENT*> Obsoleted /

<*TOTALGROSSMARGINAMOUNT*> Obsoleted /

<*TOTALCHANNELCOST*> Obsoleted /

<*TOTALCHANNELGROSSMARGIN­ Obsoleted /
PERCENT*>

<*TOTALCHANNELGROSSMARGINA­ Obsoleted /
MOUNT*>

<*TOTALCHANNELCOMMISIONPER­ Obsoleted /
CENT*>

<*TOTALCHANNELCOMMISIONA­ Obsoleted /
MOUNT*>

<*TOTALUSERCOMMISIONPER­ Obsoleted /
CENT*>

<*TOTALUSERCOMMISIONA­ Obsoleted /
MOUNT*>

<*VATPERCENT*> Obsoleted /

<*VATAMOUNT*> Obsoleted /

<*STATETAXPERCENT*> Obsoleted /

<*OVERALLDISCOUNTAMOUNT*> Obsoleted <*


CTX(Quote.Total.ProductDis
countAmount) *>
<*OVERALLDISCOUNTPERCENT*> Obsoleted <*
CTX(Quote.Total.AveragePro
ductDiscountPercent) *>

Products

Feature Name Status Description and Workaround

Product Display Types Redesigned Support for simple products, configu-


rable products and parent/child sys­
tem(list) of configurable products
[page 54]. The Collection of Configura-
ble Products and System(List) of Con­
figurable Products are currently not
supported. This will probably be imple­
mented in the future, in a slightly differ-
ent form.

SAP CPQ Setup and Administration Guide


214 PUBLIC Quotes Administration
Feature Name Status Description and Workaround

Alternative Item Type To Do /

Manage items (bulk items reorder, Obsoleted /


product replace, product delete and
item type change)

Order Item Type Only in Quote 2.0 The value in the Order Item Type field
determines the product model in SAP
CPQ (which fields are available for
product administration, what columns
are available on quote items and the
type of order that is created out of
quote items when SAP CPQ is inte­
grated with a backend system, such as
SAP S/4HANA). After migrating prod­
ucts from Quote 1.0 to Quote 2.0, the
default order item type is sales and ad­
ministrators do not need to make any
changes after the migration.

Standalone Subscription Products Only in Quote 2.0

Product Events

Feature Name Status Description and Workaround

When product is added to quote (On­ Obsoleted Other than an ability to attach a script
ProductAddedToQuote) to specific product, it is the same
as After adding products to quote
(AfterItemAdded/AfterItemUpdated).

Application Parameters

Consult the documentation on application parameters to find out if a parameter is available in Quote 2.0. [page
637]

Scripting

Feature Name Status Description and Workaround

Script Workbench To Do The Script Workbench [page 723] cur­


rently does not contain Quote 2.0 snip­
pets.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 215
Feature Name Status Description and Workaround

Quote Save (in scenarios when multiple Redesigned Quote is saved at the end, after the last
scripts are executed after an event is script is executed (the pipeline is done).
triggered)

Trigger events on adding items to Redesigned Events are triggered only once for all
quote items that are being added to quote.
This way, all items that are being added
to the quote are available in the script­
ing context.

GetItemByQuoteItem Obsoleted GetItemByItemNumber


GetItemByUniqueIdentifier Obsoleted /

ContainsAnyProductType Obsoleted
ContainsAny* can be replaced with
ContainsAnyProduct lambda expressions that allow more
flexibility, for example:
ContainsAnyProductByPartNumber
• Quote.GetAllItems().Con
tains(lambda x:
x.ProductName == "SQL"
• x.PartNumber.Contains("
PN-"))

CRM Integration Variables: Obsoleted The CRM context is currently not avail­
able in Quote 2.0 scripting so you can­
• MSCrmServiceContext not build custom CRM integrations in
• MSCrmService scripting.

• MSCRMOpportunityId
• MSCRMUserId
• SalesforceProxy
• SFEnvironment
• NsEnvironment

OpportunityId Redesigned OpportunityId returns the oppor­


tunity ID in both quote engines. In
Quote 1.0 this property can also set
the opportunity ID. However, in Quote
2.0, there is a dedicated method
AttachToQuote for setting the op­
portunity ID.

SAP CPQ Setup and Administration Guide


216 PUBLIC Quotes Administration
Feature Name Status Description and Workaround

Messages Redesigned This feature is inherited from Quote 1.0


and improved in the following way:

• Four types of messages are sup­


ported: Success, Error, Info
and Warning.
• Messages have a distinct look and
feel based on the message type.
• The isTemporary property de­
fines whether the message is
removed automatically from the
screen after the first request or if
the user is to remove it manually
(temporary vs persisted messages,
respectively).

ParentItemGuid Obsoleted /

MainItems Obsoleted Quote 2.0 uses IQuoteItem interface


to represent items. You can determi­
AsMainItem Obsoleted
nate whether an item is a line item us­
IsMainItem Obsoleted ing the IQuoteItem.IsLineItem
property.

Every time quote is changed (OnEver­ Obsoleted In Quote 1.0, runs every time a quote is
yTimeQuoteChanged) changed. Instead of attaching a script
to this event so it triggers every time a
quote is changed, think about attaching
it only to the events where the scripting
logic is actually needed.

When user is on quotation tab (OnU­ Obsoleted In Quote 1.0, runs every time quote is
serOnQuotationTab) saved while user is on the Quotation
tab. Instead of attaching a script to
this event so it triggers every time the
quote is saved while on the Quotation
tab, think about attaching it only to the
events where the scripting logic is ac­
tually needed.

OnCustomerMappings Event Obsoleted This event was rarely used in the old
quote engine, so it has been obsoleted
in Quote 2.0. You can uninterruptedly
map fields from CRM to SAP CPQ with­
out this event.

Related Information

API - Quote 1.0 vs Quote 2.0 [page 232]


CTX Tags - Quote 1.0 vs Quote 2.0 [page 218]
How to Migrate from Quote 1.0 to Quote 2.0 [page 202]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 217
Quote 1.0 to Quote 2.0 Migration FAQ [page 279]
Quote 2.0 [page 199]

5.2.1.3.1 CTX Tags - Quote 1.0 vs Quote 2.0

CTX tags are supported in both quote engines, but there are differences in the supported properties for the
Quote object.

The table below shows Quote CTX tags that are different in the two engines.

 Note

If a tag is not listed in this page, then it is the same as in Quote 1.0.

Legend

Tags available only in the Quote 1.0 engine are marked blue.

Tags available only in the Quote 2.0 engine are marked green.

Tags marked yellow exist in both quote engines but with a different syntax.

Miscellaneous CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.AdditionalDiscount() )*> /

<*CTX( Quote.CartCompositeNumber )*> <*CTX( Quote.QuoteNumber )*>

<*CTX( Quote.CartId )*> <*CTX( Quote.Id )*>

<*CTX( Quote.CountOfMainItems )*> /

<*CTX( Quote.CRMAccountRoleId )*> /

<*CTX( Quote.ForwardCurrencyRate )*> /

/ <*CTX( Quote.ExchangeRate )*>


/ <*CTX( Quote.ExternalQuoteId )*>
/ <*CTX( Quote.ExternalQuoteOrigin )*>
/ <*CTX( Quote.ExternalSystemId )*>

<*CTX( Quote.GlobalsCsv )*> /

/ <*CTX( Quote.Id )*>

<*CTX( Quote.InProject )*> /

<*CTX( Quote.IsQuoteDataValid )*> /

SAP CPQ Setup and Administration Guide


218 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

<*CTX( Quote.LastGeneratedDocument )*<>* /


CTX( Quote.Link.Crypted )*>

<<*CTX( Quote.MarketFactor.MarketDecimal <*CTX( Quote.MarketFactor.Value )*>


)*>

<*CTX( Quote.MarketFactor.MarketDisplay <*CTX( Quote.MarketFactor.Display )*>


)*>
/ <*CTX( Quote.MarketFactor.DefaultDecimal
)*>
/ <*CTX( Quote.MarketFactor.DefaultDisplay
)*>

<*CTX( Quote.OrderId )*> /

<*CTX( Quote.PaymentApproved )*> /

<*CTX( Quote.PaymentMethod )*> /

<*CTX( Quote.RevisionNumber )*> <*CTX( Quote.Revision.RevisionNumber )*>


/ <*CTX( Quote.Sections )*>
/ <*CTX( Quote.InvolvedParties )*>

<*CTX( Quote.SelectedShipping.Editable /
)*>

<*CTX( Quote.SelectedShipping.Selected /
)*>

<*CTX( Quote.ShipId )*> /

<*CTX( Quote.Status.Id )*> <*CTX( Quote.StatusId )*>

<*CTX( Quote.Status.Name )*> <*CTX( Quote.StatusName )*>

<*CTX( Quote.SubCartId )*> /

<*CTX( Quote.SubOwnerId )*> /

<*CTX( Quote.TaxExempt )*> /

<*CTX( Quote.TrackingKey )*> /

Current Item CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.AttributeByExte /
rnalId)*>

<*CTX( Quote.CurrentItem.AttributeRank /
)*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 219
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.AttributeSubRan /
k)*>

<*CTX( Quote.CurrentItem.BaseItem)*> /

<*CTX( Quote.CurrentItem.BaseItemGuid)*> <*CTX( Quote.CurrentItem.BaseItemNumber


)*>

<*CTX( Quote.CurrentItem.BaseMRCListPric /
e)*>

<*CTX( Quote.CurrentItem.BaseQuantity)*> /

<*CTX( Quote.CurrentItem.CanOverrideMinM /
axValues)*>

<*CTX( Quote.CurrentItem.CartItem)*> /

<*CTX( Quote.CurrentItem.CartItemGuid)*> /

<*CTX( Quote.CurrentItem.CategoryId)*> /

<*CTX( Quote.CurrentItem.ChannelCommisio /
nAmount)*>

<*CTX( Quote.CurrentItem.ChannelCommisio /
nPercent)*>

<*CTX( Quote.CurrentItem.ChannelMarginPe /
rcent)*>

<*CTX( Quote.CurrentItem.ChannelMarkupPe /
rcent)*>

<*CTX( Quote.CurrentItem.AttributeByExte /
rnalId(ff) )*>
/
<*CTX( Quote.CurrentItem.CustomColumn1)*
>

<*CTX( Quote.CurrentItem.CustomColumn2)*
>

<*CTX( Quote.CurrentItem.CustomColumn3)*
>

<*CTX( Quote.CurrentItem.CustomColumn4)*
>

<*CTX( Quote.CurrentItem.CustomColumn5)*
>

<*CTX( Quote.CurrentItem.CustomColumn6)*
>

SAP CPQ Setup and Administration Guide


220 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.CustomFieldComp /
utedValue)*>

<*CTX( Quote.CurrentItem.DefaultMRCDisco <*CTX( Quote.CurrentItem.DefaultMrcDisco


untPercent)*> untPercent )*>

<*CTX( Quote.CurrentItem.DefaultMRCMulti /
plier)*>

<*CTX( Quote.CurrentItem.DefaultMultipli /
er)*>

<*CTX( Quote.CurrentItem.EffDate)*> <*CTX( Quote.CurrentItem.EffectiveDate


)*>

<*CTX( Quote.CurrentItem.EndUserExtended /
Amount)*>

<*CTX( Quote.CurrentItem.EndUserNet)*> /

<*CTX( Quote.CurrentItem.ExternalCartIte /
m)*>

<*CTX( Quote.CurrentItem.ExternalId)*> /

<*CTX( Quote.CurrentItem.FamilyCode)*> /

<*CTX( Quote.CurrentItem.ForwardCurrency /
Rate)*>

<*CTX( Quote.CurrentItem.GroupId)*> /

<*CTX( Quote.CurrentItem.Inconsistent)*> /

<*CTX( Quote.CurrentItem.Inventory)*> /

<*CTX( Quote.CurrentItem.IsAlternative)* /
>

<*CTX( Quote.CurrentItem.IsChildItem)*> /

<*CTX( Quote.CurrentItem.IsMainItem)*> /

<*CTX( Quote.CurrentItem.IsOptional)*> /

<*CTX( Quote.CurrentItem.IsVariant)*> /

<*CTX( Quote.CurrentItem.ItemDeliveryMet /
hod)*>

<*CTX( Quote.CurrentItem.ItemDeliverySta /
tus)*>

<*CTX( Quote.CurrentItem.KeyAttribute)*> /

<*CTX( Quote.CurrentItem.LeadTime)*> /

<*CTX( Quote.CurrentItem.MainItem)*> /

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 221
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.ManufacturesGro /
ssMargin)*>

<*CTX( Quote.CurrentItem.MarginHealthCol /
or)*>

<*CTX( Quote.CurrentItem.MarginHealthIma /
ge)*>

<*CTX( Quote.CurrentItem.MasterParentIte /
m)*>

<*CTX( Quote.CurrentItem.MaxMRCDiscountP <*CTX( Quote.CurrentItem.MaxMrcDiscountP


ercent)*> ercent )*>

<*CTX( Quote.CurrentItem.MaxMRCMultiplie /
r)*>

<*CTX( Quote.CurrentItem.MaxMultiplier)* /
>

<*CTX( Quote.CurrentItem.MinMRCDiscountP <*CTX( Quote.CurrentItem.MinMrcDiscountP


ercent)*> ercent)*>

<*CTX( Quote.CurrentItem.MinMultiplier)* /
>

<*CTX( Quote.CurrentItem.MonthlyFeeAmoun /
t)*>

<*CTX( Quote.CurrentItem.MPN)*> /

/
<*CTX( Quote.CurrentItem.MRCChannelMargi
nAmount)*>

<*CTX( Quote.CurrentItem.MRCChannelMargi
nPercent)*>

<*CTX( Quote.CurrentItem.MRCChannelMarku
pAmount)*>

<*CTX( Quote.CurrentItem.MRCChannelMarku
pPercent)*>

<*CTX( Quote.CurrentItem.MRCCost)*> <*CTX( Quote.CurrentItem.MrcCost)*>

<*CTX( Quote.CurrentItem.MRCDiscountAmou <*CTX( Quote.CurrentItem.MrcDiscountAmou


nt)*> nt)*>

<*CTX( Quote.CurrentItem.MRCDiscountPerc <*CTX( Quote.CurrentItem.MrcDiscountPerc


ent)*> ent)*>

<*CTX( Quote.CurrentItem.MRCEndUserExten /
dedAmount)*>

SAP CPQ Setup and Administration Guide


222 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.MRCEndUserNet)* /
>

<*CTX( Quote.CurrentItem.MRCExtendedAmou <*CTX( Quote.CurrentItem.MrcExtendedAmou


nt)*> nt)*>

<*CTX( Quote.CurrentItem.MRCExtendedCost <*CTX( Quote.CurrentItem.MrcExtendedCost


)*> )*>

<*CTX( Quote.CurrentItem.MRCExtendedList <*CTX( Quote.CurrentItem.MrcExtendedList


Price)*> Price)*>

<*CTX( Quote.CurrentItem.MRCGrossMarginP /
ercent)*>

<*CTX( Quote.CurrentItem.MRCListPrice)*> <*CTX( Quote.CurrentItem.MrcListPrice)*>

<*CTX( Quote.CurrentItem.MRCMarginHealth /
Color)*>

<*CTX( Quote.CurrentItem.MRCMarginHealth /
Image)*>

<*CTX( Quote.CurrentItem.MRCMultiplier)* /
>

<*CTX( Quote.CurrentItem.MRCMultiplierAm /
ount)*>

<*CTX( Quote.CurrentItem.MRCNetPrice)*> <*CTX( Quote.CurrentItem.MrcNetPrice)*>

<*CTX( Quote.CurrentItem.MRCRolledUpCost <*CTX( Quote.CurrentItem.RolledUpMrcCost


)*> )*>

<*CTX( Quote.CurrentItem.MRCRolledUpDisc <*CTX( Quote.CurrentItem.RolledUpMrcDisc


ountAmount)*> ountAmount)*>

<*CTX( Quote.CurrentItem.MRCRolledUpDisc <*CTX( Quote.CurrentItem.RolledUpMrcDisc


ountPercent)*> ountPercent)*>

<*CTX( Quote.CurrentItem.MRCRolledUpEndC /
ustomerExtendedPrice)*>

<*CTX( Quote.CurrentItem.MRCRolledUpEndC /
ustomerUnitPrice)*>

<*CTX( Quote.CurrentItem.MRCRolledUpExte <*CTX( Quote.CurrentItem.RolledUpMrcExte


ndedAmount)*> ndedAmount)*>

<*CTX( Quote.CurrentItem.MRCRolledUpExte <*CTX( Quote.CurrentItem.RolledUpMrcExte


ndedCost)*> ndedCost)*>

<*CTX( Quote.CurrentItem.MRCRolledUpExte <*CTX( Quote.CurrentItem.RolledUpMrcExte


ndedListPrice)*> ndedListPrice)*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 223
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.MRCRolledUpGros /
sMargin)*>

<*CTX( Quote.CurrentItem.MRCRolledUpList <*CTX( Quote.CurrentItem.RolledUpMrcList


Price)*> Price)*>

<*CTX( Quote.CurrentItem.MRCRolledUpNetD /
ifferenceFromBaseItem)*>

<*CTX( Quote.CurrentItem.MRCRolledUpNetP <*CTX( Quote.CurrentItem.RolledUpMrcNetP


rice)*> rice)*>

<*CTX( Quote.CurrentItem.MRCUnitDiscount <*CTX( Quote.CurrentItem.MrcUnitDiscount


Amount)*> Amount)*>

<*CTX( Quote.CurrentItem.MRCUnitMultipli /
erAmount)*>

<*CTX( Quote.CurrentItem.Multiplier)*> /

<*CTX( Quote.CurrentItem.MultiplierAmoun /
t)*>

<*CTX( Quote.CurrentItem.NetAmountDiffer /
enceFromBaseItem)*>

<*CTX( Quote.CurrentItem.ParentItem)*> /

<*CTX( Quote.CurrentItem.ParentItemGuid /
)*>

<*CTX( Quote.CurrentItem.ParentRolledUpC /
artItem)*>

<*CTX( Quote.CurrentItem.PRODUCT_WEIGHT /
)*>

<*CTX( Quote.CurrentItem.ProductCost)*> /

<*CTX( Quote.CurrentItem.ProductDisplayI /
nfo)*>

<*CTX( Quote.CurrentItem.ProductModelPri /
ce)*>

<*CTX( Quote.CurrentItem.ProductName)*> /

<*CTX( Quote.CurrentItem.ProductNameInDe /
faultLanguage)*>

<*CTX( Quote.CurrentItem.ProductSystemId /
)*>

SAP CPQ Setup and Administration Guide


224 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

/
<*CTX( Quote.CurrentItem.ProductTypeAddT
oCRM)*>

<*CTX( Quote.CurrentItem.ProductTypeId)*
>

<*CTX( Quote.CurrentItem.ProductTypeName
)*>
<*CTX( Quote.CurrentItem.ProductTypeName
)*>

<*CTX( Quote.CurrentItem.ProductTypeName
InDefaultLanguage)*>

<*CTX( Quote.CurrentItem.ProductTypeRank
)*>

<*CTX( Quote.CurrentItem.ProductTypeSyst
emId)*>

<*CTX( Quote.CurrentItem.ProductVersion /
)*>

<*CTX( Quote.CurrentItem.PromoDiscountAm /
ount)*>

<*CTX( Quote.CurrentItem.PromoDiscountPe /
rcent)*>

<*CTX( Quote.CurrentItem.Rank)*> /

/
<*CTX( Quote.CurrentItem.RolledUpCartIte
m)*>

<*CTX( Quote.CurrentItem.RolledUpEndCust
omerExtendedPrice)*>

<*CTX( Quote.CurrentItem.RolledUpEndCust
omerUnitPrice)*>

<*CTX( Quote.CurrentItem.RolledUpGrossMa
rgin)*>

<*CTX( Quote.CurrentItem.RolledUpItemCus
tomField)*>

<*CTX( Quote.CurrentItem.RolledUpItemCus
tomFieldComputed)*>

<*CTX( Quote.CurrentItem.RolledUpNetDiff
erenceFromBaseItem)*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 225
Quote 1.0 Quote 2.0

<*CTX( Quote.CurrentItem.StdSelection)*> /

<*CTX( Quote.CurrentItem.SystemID)*> /

<*CTX( Quote.CurrentItem.TotalPriceWithL /
ineItems)*>
<*CTX( Quote.CurrentItem.TotalPriceWithL
ineItems)*>

<*CTX( Quote.CurrentItem.UnitMultiplierA /
mount)*>

<*CTX( Quote.CurrentItem.UPC)*> /

<*CTX( Quote.CurrentItem.UpfrontAmount)* /
>

<*CTX( Quote.CurrentItem.UpfrontPercent /
)*>

<*CTX( Quote.CurrentItem.UserCommisionAm /
ount)*>

<*CTX( Quote.CurrentItem.UserCommisionPe /
rcent)*>

<*CTX( Quote.CurrentItem.Weight)*> /

/ <*CTX( Quote.CurrentItem.ContractEndDate
)*>
/ <*CTX( Quote.CurrentItem.ContractLength
)*>
/ <*CTX( Quote.CurrentItem.ContractStartDa
te)*>
/ <*CTX( Quote.CurrentItem.ExternalItemId
)*>
/ <*CTX( Quote.CurrentItem.HasCompleteConf
iguration)*>
/ <*CTX( Quote.CurrentItem.HasIncompleteCh
ildren)*>
/ <*CTX( Quote.CurrentItem.IsCreatedFromPr
oduct)*>
/ <*CTX( Quote.CurrentItem.IsLineItem)*>
/ <*CTX( Quote.CurrentItem.ItemNumber)*>
/ <*CTX( Quote.CurrentItem.MinimumTerm)*>
/ <*CTX( Quote.CurrentItem.MinimumTermEndD
ate)*>

SAP CPQ Setup and Administration Guide


226 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

/ <*CTX( Quote.CurrentItem.ProductInfo)*>
/ <*CTX( Quote.CurrentItem.RolledUpItemNum
ber)*>
/ <*CTX( Quote.CurrentItem.RootItemId)*>

Customer CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.Customer(Unknown).BlockedFr Not available in Quote 2.0 since the Customer feature has
omDeletion )*> been replaced with Involved Parties.

<*CTX( Quote.Customer(x).CRMAccountId )*
>

<*CTX( Quote.Customer(BillTo).CRMContact
Id )*>

<*CTX( Quote.Customer(BillTo).CustomerPa
ssword )*>

<*CTX( Quote.Customer(BillTo).DirtyFlag
)*>

<*CTX( Quote.Customer(x).ShopCartId )*>

Custom Field CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.CustomField(x).AttrValue )* <*CTX( Quote.CustomField(x).AttributeVal


> ue )*>

<*CTX( Quote.CustomField(x).AttrValueCod <*CTX( Quote.CustomField(x).AttributeVal


e )*> ueCode )*>
/ <*CTX( Quote.CustomField(Adresa).Attribu
teValueML )*>

Market CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.SelectedMarket.CurrencyCode <*CTX( Market.CurrencyCode )*>


)*>

<*CTX( Quote.SelectedMarket.CurrencyDefa /
ult )*>

<*CTX( Quote.SelectedMarket.CurrencyQuot /
e )*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 227
Quote 1.0 Quote 2.0

/ <*CTX( Quote.SelectedMarket.ExchangeRate
)*>

<*CTX( Quote.SelectedMarket.MarketFactor /
.DefaultDecimal )*>

<*CTX( Quote.SelectedMarket.MarketFactor /
.DefaultDisplay )*>

<*CTX( Quote.SelectedMarket.MarketFactor <*CTX( Quote.SelectedMarket.MarketFactor


.MarketDecimal )*> .Value )*>

<*CTX( Quote.SelectedMarket.MarketFactor /
.Value )*>

<*CTX( Quote.SelectedMarket.Selected )*> /

Total CTX Tags

Quote 1.0 Quote 2.0

<*CTX( Quote.Total.AdditionalMultiplier /
)*>

<*CTX( Quote.Total.AdditionalMultiplierA /
mount )*>

<*CTX( Quote.Total.AverageMRCProductDisc <*CTX( Quote.Total.AverageMrcProductDisc


ountPercent )*> ountPercent )*>

<*CTX( Quote.Total.AverageMRCProductMult /
iplier )*>

<*CTX( Quote.Total.AverageProductMultipl /
ier )*>

<*CTX( Quote.Total.AveragePromoDiscountP /
ercent )*>

<*CTX( Quote.Total.CartComment )*> /

<*CTX( Quote.Total.ChannelCommisionAmoun /
t )*>

<*CTX( Quote.Total.ChannelCommisionPerce /
nt )*>

<*CTX( Quote.Total.ChannelCost )*> /

<*CTX( Quote.Total.ChannelGrossMarginAmo /
unt )*>

<*CTX( Quote.Total.ChannelGrossMarginPer /
cent )*>

SAP CPQ Setup and Administration Guide


228 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

<*CTX( Quote.Total.ChannelMarkupAmount /
)*>

<*CTX( Quote.Total.ChannelMarkupPercent /
)*>

<*CTX( Quote.Total.Cost.DefaultDecimal /
)*>

<*CTX( Quote.Total.Cost.DefaultDisplay /
)*>

<*CTX( Quote.Total.Cost.MarketDecimal )* <*CTX( Quote.Total.Cost.Value )*>


>

<*CTX( Quote.Total.Cost.MarketDisplay )* <*CTX( Quote.Total.Cost.Display )*>


>

<*CTX( Quote.Total.CustomField(x) )*>

<*CTX( Quote.Total.EndUserSubTotalAmount /
)*>

<*CTX( Quote.Total.EndUserSubTotalAmount /
)*>

<*CTX( Quote.Total.GrossMarginAmount )*> /

<*CTX( Quote.Total.GrossMarginPercent )* /
>

<*CTX( Quote.Total.ItemCustomField(x) )* /
>

<*CTX( Quote.Total.ItemCustomFieldComput /
ed(x) )*>

<*CTX( Quote.Total.MarginHealthColor )*> /

<*CTX( Quote.Total.MarginHealthImage )*> /

<*CTX( Quote.Total.MonthlyFee )*> /

<*CTX( Quote.Total.MRCEndUserSubTotalAmo /
unt )*>

<*CTX( Quote.Total.MRCMarginHealthColor /
)*>

<*CTX( Quote.Total.MRCMarginHealthImage /
)*>

<*CTX( Quote.Total.MRCSubTotalAmount )*> /

<*CTX( Quote.Total.MRCTaxAmount )*> /

<*CTX( Quote.Total.MRCTotalAmount )*> <*CTX( Quote.Total.MrcAmount )*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 229
Quote 1.0 Quote 2.0

<*CTX( Quote.Total.MRCVatAmount )*> /

<*CTX( Quote.Total.NumberOfPayments )*> /

<*CTX( Quote.Total.OverallDiscountAmount /
)*>

<*CTX( Quote.Total.OverallDiscountPercen /
t )*>

<*CTX( Quote.Total.OverallMRCDiscountAmo /
unt )*>

<*CTX( Quote.Total.OverallMRCDiscountPer /
cent )*>

<*CTX( Quote.Total.ShippingCost )*> /

<*CTX( Quote.Total.ShippingStaticPrice /
)*>

<*CTX( Quote.Total.SubTotalAmount )*> /

<*CTX( Quote.Total.TaxAmount )*> /

<*CTX( Quote.Total.TaxPercent )*> /

<*CTX( Quote.Total.TotalAmount )*> <*CTX( Quote.Total.Amount )*>


/
<*CTX( Quote.Total.TotalCustomColumn1 )*
>

<*CTX( Quote.Total.TotalCustomColumn2 )*
>

<*CTX( Quote.Total.TotalCustomColumn3 )*
>

<*CTX( Quote.Total.TotalCustomColumn4 )*
>

<*CTX( Quote.Total.TotalCustomColumn5 )*
>

<*CTX( Quote.Total.TotalCustomColumn6 )*
>

<*CTX( Quote.Total.TotalListPrice )*> <*CTX( Quote.Total.ListPrice )*>

<*CTX( Quote.Total.TotalMonthlyFeeAmount /
)*>

<*CTX( Quote.Total.TotalMRCChannelCost /
)*>

SAP CPQ Setup and Administration Guide


230 PUBLIC Quotes Administration
Quote 1.0 Quote 2.0

<*CTX( Quote.Total.TotalMRCChannelGrossM /
arginAmount )*>

<*CTX( Quote.Total.TotalMRCChannelGrossM /
arginPercent )*>

<*CTX( Quote.Total.TotalMRCChannelMarkup /
Amount )*>

<*CTX( Quote.Total.TotalMRCChannelMarkup /
Percent )*>

<*CTX( Quote.Total.TotalMRCCost )*> <*CTX( Quote.Total.MrcCost )*>

<*CTX( Quote.Total.TotalMRCGrossMarginAm /
ount )*>

<*CTX( Quote.Total.TotalMRCGrossMarginPe /
rcent )*>

<*CTX( Quote.Total.TotalMRCListPrice )*> <*CTX( Quote.Total.MrcListPrice )*>

<*CTX( Quote.Total.TotalMRCNetPrice )*> <*CTX( Quote.Total.MrcNetPrice )*>

<*CTX( Quote.Total.TotalMRCProductDiscou <*CTX( Quote.Total.MrcProductDiscountAmo


ntAmount )*> unt )*>

<*CTX( Quote.Total.TotalMRCProductMultip /
lierAmount )*>

<*CTX( Quote.Total.TotalNetPrice )*> <*CTX( Quote.Total.NetPrice )*>

<*CTX( Quote.Total.TotalOptionalItems )* /
>

<*CTX( Quote.Total.TotalProductDiscountA <*CTX( Quote.Total.ProductDiscountAmount


mount )*> )*>

<*CTX( Quote.Total.TotalProductModelPric /
e )*>

<*CTX( Quote.Total.TotalProductMultiplie /
rAmount )*>

<*CTX( Quote.Total.TotalPromoDiscountAmo /
unt )*>

<*CTX( Quote.Total.TotalUpfrontAmount )* /
>

<*CTX( Quote.Total.TotalVariantItems )*> /

<*CTX( Quote.Total.TotalWeight )*> /

<*CTX( Quote.Total.UserCommisionAmount /
)*>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 231
Quote 1.0 Quote 2.0

<*CTX( Quote.Total.UserCommisionPercent /
)*>

<*CTX( Quote.Total.VatAmount )*> /

<*CTX( Quote.Total.VatPercent )*> /

Related Information

API - Quote 1.0 vs Quote 2.0 [page 232]


How to Migrate from Quote 1.0 to Quote 2.0 [page 202]
Feature Specific Migration Instructions [page 233]
Quote 2.0 [page 199]

5.2.1.3.2 API - Quote 1.0 vs Quote 2.0

For Quote 2.0, you should primarily use the REST APIs that are developed specifically for this quote engine and
that are not supported by the old quote engine.

 Note

We encourage you to use the REST APIs specific to Quote 2.0 whenever possible and avoid using the SOAP
and REST APIs that were developed for the old quote engine. Although most of the old APIs can work with
the new quote engine, there might be issues since those APIs were not developed primarily for Quote 2.0.

Since Quote 2.0 is still under development, not all new APIs are currently available. They are, however,
being developed in each release to support the improved functionalities of the new quote engine.

REST API
All REST APIs that are available for Quote 1.0 are available for Quote 2.0 as well. However, since they were
developed primarily for the old quote engine, their usage with Quote 2.0 is not recommended. Instead, you
should use the APIs developed specifically for the new quote engine.

REST APIs developed for the new quote engine (/api/v1/quotes) are listed and documented in the REST
APIs documentation page . The /api/v1/quotes APIs are not supported in the old quote engine.

SOAP API
The following SOAP APIs are not supported in Quote 2.0:

• NewQuote
• SearchQuotes
• CreateNewQuoteAndGetQuoteData
• NewQuotefromSF

SAP CPQ Setup and Administration Guide


232 PUBLIC Quotes Administration
• SearchQuotesFromSF
• NewQuoteForFederationRouting
• NewQuoteForFederation
• SetCartProperties
• GetCartProperties
• SetCartItemProperties
• AddItemsData
• GetQuoteField
• GetQuoteData
• GetQuoteItemsAttributes
• GetRevisionsData
• GetItemAttributes

Other SOAP APIs can be used in the Quote 2.0 engine, although this is not recommended. They can be found in
the SAP CPQ API Documentation guide.

Related Information

Quote 1.0 vs Quote 2.0 - Feature Differences [page 204]


CTX Tags - Quote 1.0 vs Quote 2.0 [page 218]
Feature Specific Migration Instructions [page 233]

5.2.1.4 Feature Specific Migration Instructions

Each following page is dedicate to a Setup section in SAP CPQ. Each page contains a diagrma with a visual
overview of features in Quote 1.0 and an indicator of whther the feature exists or not in Quote 2.0. After that, a
table shows the effort it takes to migrate features to Quote 2.0 and a link to respective migration isntructions.
Eventually, for each feature, we have provided migration instructions.

Pricing/Calculations [page 234]

Products [page 242]

Quotes [page 248]

Customers/Customer Roles [page 254]

Users [page 255]

CRM Integration [page 256]

Providers [page 258]

UI Design [page 262]

Workflow/Approval [page 264]

Develop [page 266]

General [page 273]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 233
Import/Export [page 274]

Delegation of Authority [page 275]

Security [page 276]

Developer Tools [page 277]

Audit Trail [page 278]

5.2.1.4.1 Pricing/Calculations

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


234 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Market Visibility Available Improved Some of the re­ S Migration Instruc­


lated CTX tags tions [page 236]
have changed.

Discounts/ Discounts are Redesigned New option in M Migration Instruc­


Multipliers available and Mul­ tions [page 236]
Quote 2.0 for dis­
tipliers are obso­
counts - Calculate
lete
discounts only for
changed items.
Multipliers are ob­
solete in Quote
2.0.

Cart Fields Available Redesigned Quote calculations L Migration Instruc­


Administration tions [page 236]
are now config-
ured in Fields,
Calculations,
Layout in the
Quotes section.

Rounding Setup Available Redesigned Some options S Migration Instruc­


have been depre­ tions [page 236]
cated.

Shipping Not Available Obsolete

State Sales Tax Not Available Obsolete

Total Amount Limit Not Available Obsolete

Promotions/ Not Available Obsolete


Special Pricing

Pricing Procedures Available Quote 2.0 Exclu­ Quote 2.0 offers S Migration Instruc­
sively an out-of-the-box tions [page 236]
solution for pricing
that in Quote 1.0
you need to set up
manually. Pricing
procedures are rel­
evant only for the
integrations with
SAP S/4HANA
Sales Order and
Solution Quote.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 235
Migration Instructions

Market Visibility

Step 3 of the Market Visibility page allows the use of CTX tags. Some CTX tags have changed in Quote 2.0. For
example, the CTX tags for customers have been deprecated and new tags for involved parties are added.

To check if you need to make any changes, go to Setup Pricing/Calculations Market Visibility . Scroll
down to Step 3 (in your 1.0 environment). If the Visibility condition has a 1 (Always) or 0 (Never), no changes
are required.

If there is a formula/tag, check to see if the tag is available in Quote 2.0 by browsing through tags in this
list [page 204]. If a tag in use is not available in Quote 2.0, the formula/tag will need to be rewritten with a
supported tag. For example, if you were using the End User to drive what Markets were visible, you can rewrite
with the following:

Deprecated Tag:

<*END_USER_INFO (FirstName)*>

Updated Tag:

<*CTX( Quote.InvolvedParties.PartnerFunctionKey(BP).FirstName )*>

Discounts/Multipliers

Multipliers have been deprecated in Quote 2.0.

To check if you need to make any changes, edit every entry in Setup Pricing/Calculations Discount/
Multipliers in your Quote 1.0 environment. Note every entry where the minimal value, default value, or
maximum value are anything other than 1 for the Multiplier and Recurring Price Multiplier rows. If the value is 1
(100% of the price), no changes are required.

If there are any formulas, or tags, or a number other than 1, this suggests that multipliers may be in use. One
way to confirm this is by checking Setup UI Design Quote Layout and Setup Quote Layout and Setup
Quotes Quote Layout Permissions to see if multiplier fields are visible to any user group.

If you are using multipliers in Quote 1.0, you would need to reimplement your multipliers as either discounts or
custom calculations in Quote 2.0.

Cart Fields Administration

The Cart Fields Administration section has been redesigned in Quote 2.0. All quote field custom calculations
and editability settings in Cart Fields Administration in the Quote 1.0 environment need to be reimplemented
in Setup Quotes Fields, Calculations, Layout in the Quote 2.0 environment. The Fields, Calculations,
Layout section in the new engine comprises three sections from the old engine: Cart Fields Administration,
Quote Layout, and Quote Layout Permissions.

In Quote 1.0, calculations are based on editable field groups - you add fields to an editable group and then
you choose the calculations that will trigger when the value in those fields is changed. You do this for unique
combinations of quote statuses and user types. This concept is obsoleted in Quote 2.0. In the new engine, you
choose for each field the calculations that will trigger when the field's value is changed. It is no longer possible
to group fields and assign them the same calculations. In Quote 2.0 you would need to choose the calculations

SAP CPQ Setup and Administration Guide


236 PUBLIC Quotes Administration
for each field separately. Additionally, in Quote 2.0, the field editability and calculations are administered
separately. In Quote 2.0, you choose the fields that are editable for each permission group in each quote status.

All new tenants, both Quote 1.0 and Quote 2.0, have system calculations set up by default. If you haven't
changed anything in the default calculations in Quote 1.0, you won't need to change anything in Quote 2.0 after
the migration because the same calculations are set up by default in the new engine as well. There are three
system calculations in Quote 1.0 (All Item Fields - Direct ver. 1, Product Type All Fields - Direct, and Total All).
In Quote 2.0, they are broken down into separate calculations so instead of three, by default there are multiple
system calculations in Quote 2.0 [page 293].

All calculations other than these system calculations in Quote 1.0 are custom quote calculations that you
need to recreate in Quote 2.0. For each quote status/user type in Quote 1.0, check the list of calculations
in Calculations on Add/Copy/Delete Item to see which are custom (custom are all those other then the
three system calculations). Go to Develop Custom Quote Calculations , find the custom calculation
and recreate each one in Quote 2.0 ( Quotes Fields, Calculations, Layout Fields and Calculations
Calculations on Add/Copy/Delete Item Add calculation ). After that, in Quote 2.0, add the calculation to
the list of calculations that trigger on item add/copy/delete.

Additionally, check the editable groups and which calculations they trigger. In quote 2.0, for each field in the
editable group set up which calculations need to be triggered and in which order.

After setting up the calculations, you need to define the editability settings. In Quote 1.0, open each quote
status/user type, and find the Editable Field Groups and Related Calculations. Go to Quote 2.0, Quotes
Fields, Calculations, Layout Field Editability , find the same user type, then the quote status, and then select
which fields are editable.

The following images show the mentioned interfaces in both engines:

Quote 1.0

Quote 2.0

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 237
SAP CPQ Setup and Administration Guide
238 PUBLIC Quotes Administration
SAP CPQ Setup and Administration Guide
Quotes Administration PUBLIC 239
Rounding Setup
The option to always round up (for example, 91.2 to 92) has been deprecated in Quote 2.0.

Also, the option Fix Quote Amount After Currency Conversion to stick fractional differences after quote
conversion to the items or totals has been deprecated in Quote 2.0. For example, if after currency conversion,
the item price for 3 items is 33.33 and the total price is 100, in Quote 1.0 there was an option to add 0.01 to one
of the items.

In Quote 2.0, an improvement is made in regards to how rounding works. In Quote 2.0, it is possible to include
and exclude certain rounding rules for each currency. For example, a rounding rule can be added to specifically
round the net prices to four decimal places for the Japanese Yen.

Shipping
No change in functionality, please review manually to ensure that all your Shipping rules migrated over after the
initial copy. Please additionally double check if you are using any deprecated CPQ tags.

Total Amount Limit


No change in functionality, please review manually to ensure that all your Total Amount Limit rules migrated
over after the initial copy. Please additional double check if you are using any deprecated CPQ tags.

SAP CPQ Setup and Administration Guide


240 PUBLIC Quotes Administration
State Sales Tax
No change in functionality, please review manually to ensure that all your State Sales Tax rules migrated over
after the initial copy. Please additional double check if you are using any deprecated CPQ tags.

Promotions/Special Pricing
The Promotions/Special Pricing feature in Quote 1.0 has been deprecated in Quote 2.0. If you are using
promotions in Quote 1.0, you would need to reimplement your promotions and special pricing with scripting
and quote custom calculations in Quote 2.0. More information around scripting is available in the Develop
section [page 266].

Pricing Procedures
In Quote 1.0, you were able to map pricing conditions from back-end pricing procedures to SAP CPQ quote
fields using scripting to a limited degree. In Quote 2.0, pricing condition mapping can be done in an improved
way on the user interface using the dedicated Pricing Procedures feature. You will need to define pricing
condition mappings again in your Quote 2.0 environment. More information is available in Pricing Procedure
Mapping.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 241
5.2.1.4.2 Products

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


242 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Products Available Redesigned Scripts have new L Migration Instruc­


context and need tions [page 243]
to be refactored
for Quote 2.0.

Migration Instructions

Products

The Collection of Configurable Products and System(List) of Configurable Products product types are not
supported in Quote 2.0. Products of this type are visible in the list of products after the migration but they can't
be added to the quote. You should revise products of this type and recreate them using a supported product
display type.

After the migration, check the existing rules in the Rules and Messages tab and see if there are any obsoleted
CTX tags that need to be replaced with a Quote 2.0 alternative [page 218]. Additionally, you should review all
other ocurrencies of CTX tags in the product administration.

The primary changes and updates in the Products are visible in rules and messages, local scripts, and triggers.
In Quote 1.0 you can use quote CTX tags in the Configurator, because the quote object is available in memory.
However, Quote 2.0 is stateless and doesn’t support objects in memory, so accessing quote data directly is not
supported.

TagParser has been deprecated in Quote2.0 so leveraging CTX tags within scripts is not possible. Any formula
using CTX Quote tags for calculations in the Catalog and the Configurator needs to be refactored. Below are
two typical use cases when CTX Quote tags are used in Quote 1.0 with an alternative for Quote 2.0:

• market-based pricing referencing the selected market on the quote (for example,
CTX.Quote.SelectedMarket). The selected market can be accessed directly from the Catalog
and the Configurator. Instead of using <* CTX( Quote.SelectedMarket.MarketCode ) *>, use
<*CTX( Market.CurrencyCode )*> in Quote 2.0.
• customer-specific pricing referencing one of the customer roles in the quote (for example,
CTX.Quote.Customer(BillTo) ). Instead of using CTX.Quote.Customer(BillTo).Field, use
<*CTX( Quote.InvolvedParties.PartnerFunctionKey(PY).Field )*> in Quote 2.0.

TagParser has been removed to improve the performance of the system as the system will not have to load
every data source and will be purely event based. In every instance of TagParser used in your system, please
replace it with the correct IronPython method or property that will populate the data you need.

TagParser Workarounds

TagParser in Quote 1.0 Alternative Script in Quote 2.0

<* Cart_ID *> context.Quote.Id

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 243
TagParser in Quote 1.0 Alternative Script in Quote 2.0

<* Table( ) *> SqlHelper.GetFirst( )

<* GetFirstFromQuoteTable( ) *> SqlHelper.GetFirst( ) or


context.Quote.QuoteTables[ ]

<* QuoteProperty( ) *> context.Quote.GetCustomField( )

Additional examples of replacing TagParser code are detailed below:

Quote Table TagParser

Quote 1.0:

TagParserQuote.ParseString('<* GetFirstFromQuoteTable( quoteTableName,


returnColumn, whereFilter={} ) *>'.format(item["Package_Number"].Value))

Quote 2.0:

quote_id = context.Quote.Id
user_id = context.Quote.OwnerId
sql_str = “SELECT returncolumn FROM qt__quotetablename
WHERE wherefilter = {wf} AND
id = {u} AND
quoteid = q}”.format(wf=item[“Package_Number”].Value,q=quote_id,u=user_id)
res = SqlHelper.GetFirst(sql_str).returncolumn

Custom Field TagParser

Quote 1.0:

TagParserQuote.ParseString("<*CTX( Quote.CustomField(Subgeomarket) )*>")

Quote 2.0:

context.Quote.GetCustomField(‘Subgeomarket’).Value

Market TagParser

Quote 1.0:

TagParserQuote.ParseString("<*CTX( Market.CurrencyCode )*>")

Quote 2.0:

market = context.Quote.SelectedMarket
currency_code = market.CurrencyCode

The product event When product is added to quote (OnProductAddedToQuote) is not supported in Quote 2.0.
You need to select a supported event in Quote 2.0 and, if needed, rewrite the script accordingly. Alternatively,
you can either create a quote calculation or a global script.

SAP CPQ Setup and Administration Guide


244 PUBLIC Quotes Administration
Review each product script in Quote 2.0 after the migration and check whether it should be rewritten according
to the Quote 2.0 scripting logic. Use the related documentation for reference. The same product methods
and properties that are supported in Quote 1.0 are supported in Quote 2.0, except those related to obsoleted
feature, for example GetGlobal [page 204] .

In Quote 1.0 scripts, you can read and write the configuration and the quote at any time. In Quote 2.0, after
triggering an action, the system triggers an event that retrieves only the context of avilable objects that are
relevant for that specific action. Every event has the quote object in context (context.Quote). Other available
objects depend on the event that was raised. Consequently, you can handle only the part of the quote that is
available in the context of that event.

For configurable products, once the Configure event is triggered from the Catalog, SAP CPQ opens the
underlying product as a product configuration object. The product configuration object has access to all the
product fields, attributes, layout, rules, and all other properties added to product by administrator in SAP CPQ
Setup. In addition to the product configuration object, Quote 1.0 also has access to the Cart (in memory). In
Quote 2.0, the configuration and the cart are segmented, so the Cart only loads after the Add to Quote event is
triggered.

This means that in Quote 1.0 scripts can read and update quote data from the configuration at any point.

Example: Company Orange Computers wants to keep track of every computer that is quoted with its new
ARM processor. In Quote 1.0, Orange SAP CPQ administrator, Greg, writes a script that when Processor
Type = ARM, quote item custom field “Contains ARM” should be set to Yes. The script in Quote 1.0
might look like this:

attrValue = Product.Attr(“Processor Type”).GetValue()


if attrValue == ‘ARM’:
item = sender
item["Contains ARM"].Value = ‘Yes’

With the script attached to either Before Add to quote and When product is added to quote.

In Quote 2.0, a quote calculation can be added in Fields, Calculations, Layout to Calculations on Add/Copy/
Delete Item with script:

for item in context.AffectedItems:


attrValue = context.Product.Attr("Processor Type").GetValue()
if attrValue == ‘ARM’:
item.Item["Contains ARM "] = ‘Yes’

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 245
Alternatively, a global script can be added with event After adding products to quote with script:

for item in context.Items:


attrValue = context.Product.Attr("Processor Type").GetValue()
if attrValue == ‘ARM’:
item.Item["Contains ARM "] = ‘Yes’

Check the Develop [page 266] section for more information. Also, more examples are described in the same
section [page 266].

Writing to Configurator from Quote

To write to product level fields, you need to loop through context.Quote.GetAllItems() and for each item
for which you want to update attributes from the quote level, you need to call AsMainItem.Edit().

For example, the user selects the monitor size, and this change is reflected in the configurator (the attribute
(line item) changes accordingly). Configurator is edited inline via the python script.

Quote = context.Quote
for item in Quote.GetAllItems():
if item.PartNumber == "KY6440":
# cast or return as mainItem
MainItem = item.AsMainItem
# edit the product inline
Product = MainItem.Edit()
# assign based on the custom field value
valueToSelect = Quote.GetCustomField("Monitor").Value
Product.Attributes.GetByName("Monitor").SelectValue(valueToSelect)
# update
Product.UpdateQuote()
# intention break
break

The code is added as global script with event type on custom field change.

Example: Company Orange Computers wants to allow a certain partner to order printers directly from an
online portal so they create a custom API to accept those orders. The Printer product in SAP CPQ accepts a
free text entry for the location of the printer, the brand, model and the color of the printer. In Quote 1.0, Orange
Computers SAP CPQ administrator, Greg, writes a custom API script that saves the parameters from the API
call, creates a new quote, configures the Printer product and adds it to the quote.

#store parameters entered in API call


sysId = Param.ProductSystemId
desc = Param.CustomDescription
brand = Param.PrinterBrand
model = Param.PrinterModel

SAP CPQ Setup and Administration Guide


246 PUBLIC Quotes Administration
color = Param.Color
#create a new quote
QuoteHelper.CreateNewQuote()
#create a new product
apiProduct = ProductHelper.CreateProduct(sysId)
#enter/select attributes
apiProduct.Attributes.GetByName('Custom Description').AssignValue(desc)
apiProduct.Attributes.GetByName('Brand').SelectValue(brand)
apiProduct.Attributes.GetByName('Model').SelectValue(model)
apiProduct.Attributes.GetByName('Color').SelectValue(color)
#add the product to the cart
apiProduct.AddToQuote()

In Quote 2.0, the script would look the same:

#store parameters entered in API call


sysId = Param.ProductSystemId
desc = Param.CustomDescription
brand = Param.PrinterBrand
model = Param.PrinterModel
color = Param.Color
#create a new quote
quote = QuoteHelper.CreateNewQuote()
#create a new product
apiProduct = ProductHelper.CreateProduct(sysId)
#enter/select attributes
apiProduct.Attributes.GetByName('Custom Description').AssignValue(desc)
apiProduct.Attributes.GetByName('Brand').SelectValue(brand)
apiProduct.Attributes.GetByName('Model').SelectValue(model)
apiProduct.Attributes.GetByName('Color').SelectValue(color)
#add the product to the cart
quote.AddItem(apiProduct, 1)

To make an update to the product via API, in Quote 1.0 the script would look like this:

#store parameters entered in API call


quoteNumber = Param.CompositeQuoteNumber
sysId = Param.ProductSystemId
updatedDescription = Param.CustomDescription
#edit the quote
quote = QuoteHelper.Edit(quoteNumber)
#edit the product and assign the updated description
for mainItem in quote.MainItems:
if item.ProductSystemId == sysId:
# edit the product
MainItem.Edit()
# assign based on the custom field value
Product.Attributes.GetByName('Custom
Description').AssignValue(updatedDescription)
# apply configuration rules
Product.ApplyRules()
# update the configuration
Product.UpdateQuote()
# intentionally exit the main items loop
break
# save the quote
quote.Save()

The same script to update the product in Quote 2.0 would look like this:

#store parameters entered in API call


quoteNumber = Param.CompositeQuoteNumber
sysId = Param.ProductSystemId
updatedDescription = Param.CustomDescription
#edit the quote

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 247
quote = QuoteHelper.Get(quoteNumber)
#edit the product and assign the updated description
for item in quote.GetAllItems():
if item.ProductSystemId == sysId:
# cast or return as mainItem
MainItem = item.AsMainItem
# edit the product inline
Product = MainItem.Edit()
# assign based on the custom field value
Product.Attributes.GetByName('Custom
Description').AssignValue(updatedDescription)
# apply configuration rules
Product.ApplyRules()
# update the configuration
Product.UpdateQuote()
# intentionally exit the main items loop
break

5.2.1.4.3 Quotes

SAP CPQ Setup and Administration Guide


248 PUBLIC Quotes Administration
*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 249
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Fields, Available Improved This new ad­ L Migration Instruc­


Calculations, ministrative sec­ tions [page 252]
Layout tion consolidates
Cart Fields
Administration,
Quote Item
Custom Fields,
Quote Layout
and Quote Layout
Permissions from
Quote 1.0 into one
page.

Document Available Improved Tags referencing L Migration Instruc­


Generation tions [page 252]
customer roles Bill
Templates
To, Ship To, or
End Customers will
need to be up­
dated.

Also, any tags


that have been
deprecated or up­
dated in Quote
2.0 will need to
be changed ac­
cordingly.

Quote Tables Available Improved The feature works S Migration Instruc­


in the same way tions [page 252]
in both engines.
However, there is
one minor change
made to the way
quote tables are
managed in the
database.

SAP CPQ Setup and Administration Guide


250 PUBLIC Quotes Administration
Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Custom Fields Available Redesigned Formulas are not L Migration Instruc­


supported. The tions [page 252]
features allowing
the quote to be
saved every time
a custom field
is changed, and
allowing the cus­
tom field to be
saved Always and
Every time quote
has been modified
have been depre­
cated.

Quote Item Available Improved Quote item M Migration Instruc­


Custom Fields custom fields tions [page 252]
are now config-
ured in Fields,
Calculations,
Layout in the
Quotes section.

Key Attributes Not Available Obsolete This can be re­ M Migration Instruc­
implemented us­ tions [page 252]
ing item custom
fields in Quotes
Fields,
Calculations,
Layout.

Search Fields Improved Improved Some fields like S Migration Instruc­


Customer_ID and tions [page 252]
Customer Name
have been re­
moved, but other
custom fields are
available.

Bulk Deletion Not Available To Do This feature is cur­


rently not available
in Quote 2.0.

Quote Visibility Available Redesigned Setting visibility M Migration Instruc­


tions [page 252]
conditions using
SAP CPQ tags has
been deprecated.

Reports Not Available Obsolete This feature is ob­


solete in Quote
2.0.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 251
Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Cart Level Not Available Obsolete Cart level aggre­ L Migration Instruc­
Aggregates gates can be im­ tions [page 252]
plemented using
quote item custom
fields and script­
ing.

Email Customers / Available Improved In Quote 2.0, a new S Migration Instruc­


Quote Acceptance tions [page 252]
tag has been intro­
Settings
duced that allows
administrators to
put the link any­
where in the email.

Quote Layout Available Improved Quote Layout M Migration Instruc­


Permissions tions
Permissions are
now configured in
the Quotes sec­
tion in Fields,
Calculations,
Layout.

Partner Functions Available Quote 2.0 exclu­ This new Setup


sively section allows ad­
ministrators to de­
fine partner func­
tions like Bill To,
Ship To, Sold To
and as many oth­
ers as needed.

Migration Instructions

Fields, Calculations, Layout


This new subsection in Quote 2.0 combines multiple other administrative subsections from Quote 1.0. In this
new page, you will be able to control your cart field administration, quote item custom fields, quote layout, and
quote layout permissions. Detailed descriptions and how-to procedures are available in Quote 2.0 Calculations
[page 283].

Document Generation Templates


There is no change in the logic behind the feature [page 152], it works the same in both quote engines.

 Note

You may be using deprecated SAP CPQ tags and we highly recommend you review the list in CTX Tags -
Quote 1.0 vs Quote 2.0 [page 218].

SAP CPQ Setup and Administration Guide


252 PUBLIC Quotes Administration
Quote Tables
There is no change in the logic behind the feature [page 347], it works the same in both quote engines.

 Note

While the functionality has not changed, there is one minor change to the way quote tables are managed in
the database and this results in the fact that you no longer need to use QuoteTable.Save(). In Quote 2.0,
quote tables are automatically saved in scripts. Please remove QuoteTable.Save() from any scripts that
interact with quote tables.

Custom Fields
In Quote 2.0, instead of formulas, you need to use scripts. In Quote 2.0, two calculation types are available:
None and Once, when quote is created. To rewrite your formulas to scripts, consult the Develop [page 266]
section. Have in mind that modifying custom fields via scripts or APIs no longer triggers any attached global
scripts On the Custom Field Changed event.

Quote Item Custom Fields


In Quote 2.0, it's not possible to define formulas on quote item custom fields like in Quote 1.0. Instead,
in Quote 2.0 you need to write scripts instead of formulas and attach it to an event, usually the
AfterProductAddedToQuote event. More information about scripting can be found in the Develop [page
266] section. Alternatively, you should write a calculation in Fields, Calculations, Layout and attach it to a field
so that the calculation triggers when the field's value changes..

Key Attributes
This feature has been deprecated in Quote 2.0 and will need to be reimplemented using the Fields,
Calculations, Layout administrative subsection. In Quote 2.0, you need to create an item custom field and
add a script to it that will summarize the amount of all the fields.. More information about scripting can be
found in the Develop [page 266] section. Also, here you can find examples of how to assign values to item
custom fields.

Search Fields
The list of available standard fields has changed in Quote 1.0. Compare the lists in the two engines and make
the necessary updates.

Quote Visibility
Quote Visibility [page 367] no longer accepts SAP CPQ tags, instead the controls are handled by SQL. If you’ve
used tags for quote visibility, you need to update the logic using SQL.

Cart Level Aggregates


Cart Level Aggregates have been deprecated in Quote 2.0.

To replicate the Cart Level Aggregates functionality in Quote 2.0, create a new quote item custom field in
Setup Quotes Fields, Calculations, Layout and create a global script that loops through all the items in
the quote to set the item custom field to 1 or 0 (for example, item.Item["aggregate"] = 1 (based on the
aggregate condition), keep a running total in the loop and assign the total to the Total of the item custom field,
for example, context.Quote.Totals.Item["aggregate"] = total).

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 253
Example

count = 0
for item in context.AffectedItems:
attribute = [attr for attr in item.SelectedAttributes if attr.Name ==
'YesOrNo']
Log.Write('From Add/Update/Delete Event')
isYes = 0
if attribute:
if attribute[0].Values[0].ValueCode == 'Yes':
isYes = 1
count = count + 1
item.Item["aggregate"] = isYes
context.Quote.Totals.Item["aggregate"] = count

Email Customers / Quote Acceptance Settings

The quote acceptance link is automatically inserted at the end of the email in Quote 1.0. In Quote
2.0, a new tag has been introduced that allows admins to put the link anywhere in the email
(<*CTX( Quote.Link.CustomerAcceptance )*>). Also, you can only use User's Mail Client in Emails are
Sent by option. Please see this page for more details: Email Customers / Quote Acceptance Settings [page
381].

Quote Layout Permissions

This feature has been moved into Fields, Calculations, and Layout. More information can be found in Fields and
Calculations [page 284].

5.2.1.4.4 Customers/Customer Roles

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


254 PUBLIC Quotes Administration
The Customers concept from Quote 1.0 has been obsolete in Quote 2.0 and the same results can be achieved
using Business Partners. Since Customers and Business Partners are conceptually different, migration of any
kind is not possible. Instead, you need to implement Business Partners from scratch in Quote 2.0 [page 332].

5.2.1.4.5 Users

*Migration Effort Estimate Legend [page 278]

Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

User Types Available Improved The feature works S Migration Instruc­


in the same way tions [page 256]
in both engines,
only one option
has changed.

Permission Groups Available Improved The feature works M Migration Instruc­


in the same way tions [page 256]
in both engines,
only some of the
related CTX tags
have changed. You
need to update
the changed CTX
tags after the mi­
gration.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 255
Migration Instructions

User Types
The option When creating a new quote, require customer to be selected first [page 148] (available in user page
administration in Quote 1.0) has been deprecated in Quote 2.0. In Quote 1.0, after creating a quote, the user is
redirected to the Customer page. To achieve the same in Quote 2.0, you need to edit the respective user type
and in Start Page select New Quote and a new quote will be created when the user logs in.

Permission Groups
The Advanced Mode of permission groups settings [page 138] allows the use of CTX tags in both quote engines.
However, some CTX tags have changed in Quote 2.0 [page 218]. For example, the CTX tags for customers
have been deprecated and new tags for involved parties are added. To check if you need to make any changes,
edit a permission group in Setup Users Permission Groups . Scroll down to the Advanced mode. If the
Advanced Mode toggle is disabled, no changes are required. If Advanced Mode is enabled, check to see if the
tag is available in Quote 2.0 by browsing through tags in this list [page 218].

5.2.1.4.6 CRM Integration

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


256 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Custom Fields Available Improved This feature works S Migration Instruc­


Mappings unchanged in tions [page 257]
Quote 2.0. You
need to review
formulas in case
you've used tags
that are not sup­
ported in Quote
2.0.

Customer Roles Not Available Obsolete The Customers M Migration Instruc­


Mapping concept has been tions [page 257]
obsoleted in Quote
2.0 and replaced
with the Business
Partners feature.

Migration Instructions

Custom Fields Mappings


Check the availability of CTX tags [page 218]in Quote 2.0 and update your formulas accordingly.

Partner Functions Mapping


Create partner functions mappings as explained in the documentation.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 257
5.2.1.4.7 Providers

SAP CPQ Setup and Administration Guide


258 PUBLIC Quotes Administration
*Migration Effort Estimate Legend [page 278]

Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Providers Available Improved Integrations sup­ XL Migration Instruc­


port is not the tions [page 261]
same in the two
engines.

DocuSign Not Available out To Do Currently, you can XL


of the box set up a custom
integration using
APIs and scripting.
The plan is to cre­
ate a framework
for project-based
implementations.

AdobeSign Not Available out To Do Currently, you can XL


of the box set up a custom
integration using
APIs and scripting.
The plan is to cre­
ate a framework
for project-based
implementations.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 259
Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Microsoft Dynam­ Not Available out To Do Currently, you can XL


ics of the box set up a custom
integration using
APIs and scripting.
The plan is to cre­
ate a framework
for project-based
implementations.

Enablement Not Available Obsolete

CLM Not Available out To Do The CLM solution XL


of the box used for Quote 1.0
will be replaced by
a partner solution
in Quote 2.0. Cur­
rently, you can set
up a custom inte­
gration using APIs
and scripting.

CX AI Available No Change

External Configu- Available Quote 2.0 Exclu­


rator sively

SAP S/4HANA Available Improved The common L Migration Instruc­


(Sales Order) settings stayed tions [page 261]
unchanged, but
some things that
you've manually
adjusted in the
iflow, you now
need to readjust
because Quote 2.0
has an out of the
box solution for
that.

SAP ERP Central Not Available Obsolete Project-based im­ XL


Component (ECC) plementation, not
available out of the
box.

General Attribute Available Improved Some CTX tags S Migration Instruc­


Mapping have changed in tions [page 261]
Quote 2.0 and you
need to update the
mappings accord­
ingly.

Integration Suite Available Improved Quote 1.0 and L Migration Instruc­


Quote 2.0 use dif­ tions [page 261]
ferent iflows.

SAP CPQ Setup and Administration Guide


260 PUBLIC Quotes Administration
Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Variant Configura- Available No Change


tion

Subscription Bill­ Available Quote 2.0 Exclu­


ing sively

SAP Billing Reve­ Available Quote 2.0 Exclu­


nue and Innova­ sively
tion Management
(Solution Quote
in SAP S/4HANA)
(subscription and
service contract
products)

SAP S/4HANA Available Quote 2.0 Exclu­


Cloud sively

SAP Commerce Available Improved Quote 1.0 and


Quote 2.0 use dif­
ferent iflows.

SAP Cloud for Available Improved Quote 1.0 and L Migration Instruc­
Customer Quote 2.0 use dif­ tions [page 261]
ferent iflows.

SAP Master Data Available Quote 2.0 Exclu­


Service for Busi­ sively
ness Partners

Salesforce Available No Change

Subscription to Available Improved There is no func­ S Migration Instruc­


Events tions [page 261]
tional change be­
tween Quote 1.0
and Quote 2.0, but
in Quote 2.0 there
are more quote
level events than in
Quote 1.0.

Migration Instructions

Subscription to Events

In both Quote 1.0 and Quote 2.0, there are product and attribute-related events: ProductCreated,
ProductUpdated, ProductDeleted, AttributeCreated, AttributeUpdated, and AttributeDeleted. In Quote 1.0
for quote-related events, there is only OnQuoteDelete, and in Quote 2.0 there are these events as well:
OnPlaceOrder, QuoteStatusChanged, OnQuoteSaved, OnItemAdded, OnItemRemoved, and onQuoteCreated.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 261
SAP S/4HANA (Sales Order)

Quote 2.0 is event-based so you need to set the order place event with the URL of the new iflow. If you
have customized your iflow in Quote 1.0, you now need to go into SAP Cloud Integration and make the same
adjustments in the Quote 2.0 iflow. Additionally, if you've manually mapped your quote and quote item custom
fields in the iflow, you now need to map them again in Quote 2.0. The new engines offer an automatized way for
condition mappings.

General Attribute Mapping

Check which CTX tags have changed in Quote 2.0 [page 218] and update your mappings based on that.
Have in mind that Quote 2.0 supports Business Partners (and not Customers) so you will need to update
customer-related CTX tags.

Integration Suite

Go to Common Settings and update the iflow URL in the REST API base URL address field. Additionally, change
the username and password.

SAP Cloud for Customer

Since Quote 1.0 and Quote 2.0 use different iflows, after the migration, you need to update the iflow URLs.

SAP Commerce

Quote 2.0 is event based so you need to set the order place event with the URL of the new iflow.

5.2.1.4.8 UI Design

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


262 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Custom Category Not Available Obsolete Quote 2.0 only


UI runs on Respon­
sive Design and
Classic XSLT isn't
supported.

Product Not Available Obsolete Quote 2.0 only


Configuration runs on Respon­
Templates sive Design and
Classic XSLT isn't
supported.

Product Details Not Available Obsolete Quote 2.0 only


Template runs on Respon­
sive Design and
Classic XSLT isn't
supported.

Responsive Available Redesigned The Responsive S Migration Instruc­


Templates Templates feature tions [page 263]
has remained the
same, the only
difference being
that CartList page
is replaced with
QuoteList in Quote
2.0.

Migrating

Responsive Templates
In Quote 2.0, the system uses the QuoteList page instead of the CartList page. Any customizations made to
CartList in Quote 1.0 need to be reimplemented in QuoteList in Quote2.0.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 263
5.2.1.4.9 Workflow/Approval

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


264 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Actions Available Improved A number of work­ S Migration Instruc­


flow actions are tions [page 265]
yet to be added
to Quote 2.0 and
some have been
deprecated.

Workflow Available Improved The functionality S Migration Instruc­


has stayed un­ tions [page 265]
changed in Quote
2.0. However, if
you are using dep­
recated CTX tags
in conditions, you'll
need to update
them.

Notifications Available Improved The functionality S Migration Instruc­


has stayed un­ tions [page 265]
changed in Quote
2.0. However, if
you are using dep­
recated CTX tags
in the message
body, you'll need
to update them.

Approval Rules Available No Change The functionality S Migration Instruc­


has stayed un­ tions [page 265]
changed in Quote
2.0. However, if
you are using dep­
recated CTX tags
in the approval
rules, you'll need
to update them.

Migration Instructions

Actions
Check which actions are obsolete and which are still not implemented in Quote 2.0 [page 204] to see if there
is anything that you need to change in your implementation. The most common actions like Add Item and
Generate Document have been implemented. The workaround for any missing system actions is to create
custom actions instead.

Workflow
Check which CTX tags have been deprecated and updated [page 218] and update your conditions.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 265
Notifications
Check which CTX tags have been deprecated and updated [page 218] and update your notifications.

Approval Rules
Check which CTX tags have been deprecated and updated [page 218] and update your approval rule conditions
and dynamic approvers.

5.2.1.4.10 Develop

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


266 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Global Scripts Available Redesigned The context XL Migration Instruc­


and tags have tions [page 267]
changed. Check
the documenta­
tion [page 218] to
confirm you are
not using any dep­
recated tags in the
scripts.

Custom Actions Available Redesigned The context M Migration Instruc­


and tags have tions [page 267]
changed. Check
the documenta­
tion [page 218] to
confirm you are
not using any dep­
recated tags in the
scripts.

Custom Quote Available Moved Combined with XL Migration Instruc­


Calculations Cart Field tions [page 234]
Administration and
Quote Layout into
the new Quote
2.0 feature Fields,
Calculations,
Layout.

Migrating

Your product scripts, global scripts, custom action scripts, and custom quote calculation scripts used in Quote
1.0 need to be reviewed and rewritten in the Quote 2.0 syntax. Scripting namespace with properties and
methods are explained in the scripting documentation [page 329]. Migration of custom quote calculations is
described in Pricing/Calculations [page 234].

Global Scripts

Migration of product scripts is described in Products [page 242].

Functionally, creating and maintaining scripts in Quote 2.0 has not been changed, but the logic behind scripting
has been changed. After you migrate to Quote 2.0, you need to do the following:

• check for obsolete events. For reference, see the list of events that are triggered and executed in SAP CPQ
Quote 1.0 in some typical scenario. For comparison, check the event pipeline for Quote 2.0.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 267
• revise the scripts and rewrite them, if needed, according to the Quote 2.0 scripting logic. To know whether
a script should be changed after the migration, you should first understand how scripting in Quote 2.0
works [page 329].
Quote.Save() has been deprecated in Quote 2.0 with the change of Quote 2.0 events and how they
write in the database. Additionally, Quote.RefreshActions() has also been deprecated. Consequently,
you need to review your code migrated from Quote 1.0 to remove all instances ofQuote.Save() and
Quote.RefreshActions().
Along with the changes to how Quote 2.0 writes to the database, SAP CPQ has
reworked how the calculations run and Quote.Calculate() now functions very differently.
In Quote 1.0, Quote.Calculate() runs the pricing scripts for every field. In Quote
2.0,context.Quote.Calculate() fires for a single field. You should not need to be running
Quote.Calculate() anymore as the engine immediately writes values to the database and it is very
likely that you can remove all instances of Quote.Calculate().
Quote.ExecuteAction(action) has also been deprecated in Quote 2.0 and it requires
reimplementation of any script leveraging this by creating a module to generically handle all action calls.
For example:
Quote 1.0

for action in Quote.Actions:


if action.Name == "Request Approval":
Quote.ExecuteAction(action.Id)

Quote 2.0

headers = buildApiHeaders()
url = ("https://{}".format(RequestContext.Url.Host)
+ "/api/v1/quotes/{}".format(quoteId)
+ "/actions/{}/invoke".format(actionId)
)
postResponse = RestClient.Post(url, body, headers)

Additionally, not all actions are supported, including reconfigure, save, reprice, and so on. Instead
of the Change Status action, you can use Quote.ChangeStatus() instead in Quote 2.0 to
change the quote status. To execute other actions, use the REST API (make a POST call
to this endpoint: https://cpqbaseurl/api/v1/quotes/{quoteId}/quoteTables/{tableName}/
actions/{actionId}/invoke). This will trigger all related pre and post actions. For more information,
check the online REST API Swagger documentation .
IsMain line item property is not available in Quote 2.0 scripting. All scripts leveraging IsMainItem as a
conditional need to be reworked to operate on the desired item. For example:
Quote 1.0

for item in Quote.Items:


if item.IsMainItem:
Trace.Write(“Do your work here.”)

Quote 2.0

for item in context.Quote.AffectedItems:


if not item.IsLineItem:
Trace.Write(“Do you work here.”)

SAP CPQ Setup and Administration Guide


268 PUBLIC Quotes Administration
New unique identifier for cart items was introduced which deprecated QuoteItemGuid. This change not
only needed to be reflected in downstream systems, but also required code changes to leverage new
unique Item.Id.
Quote 1.0

for item in Quote.Items:


itemGuid = item.QuoteItemGuid

Quote 2.0

for item in context.Quote.GetAllItems():


itemId = item.Id

Product.UpdateQuote() from Quote 1.0 was replaced with Quote.AddItem() in Quote 2.0:
Quote 1.0

prod = QuoteHelper.Get(167).GetItemByItemNumber(1).AsMainItem.Edit()
prod.UpdateQuote()

Quote 2.0

quote = QuoteHelper.Get(167)
prod = quote.GetItemByItemNumber(1).AsMainItem.Edit()
qty = quote.GetItemByItemNumber(1).Quantity
quote.AddItem(prod, qty)

Blocking products from being added to the quote doesn’t work via Product.ok now. In Quote 2.0, the
product must be blocked before it's added to quote.
Quote 1.0

Product.ok = False

Quote 2.0
To prevent a product from being added to the quote, make the product incomplete using rules, messages,
and so on.
The following table shows some methods that have been obsoleted in Quote 2.0 and alternative solutions
for Quote 2.0:

Quote 1.0 Refer­ Alternative Quote 2.0 Refer­


Scripting Object Method in Quote ence Documen­ scripting object Method in Quote ence Documen­
in Quote 1.0 1.0 tation in Quote 2.0 2.0 tation

Quote Quote Scripting docu­ IQuote context.Qu Scripting docu­


mentation ote mentation

Market Quote.Sele Scripting docu­ IMarketBase context.Qu Scripting docu­


ctedMarket mentation ote.Select mentation
edMarket

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 269
Quote 1.0 Refer­ Alternative Quote 2.0 Refer­
Scripting Object Method in Quote ence Documen­ scripting object Method in Quote ence Documen­
in Quote 1.0 1.0 tation in Quote 2.0 2.0 tation

Customer Quote.Bill Scripting docu­ IQuoteInvolved­ involvedPa Scripting docu­


ToCustomer mentation Party rties = mentation
Quote.EndU context.Qu
serCustome ote.GetInv
r olvedParti
Quote.Ship es().ToLis
ToCustomer t()
for party
in
involvedPa
rties:
if
party.Part
nerFunctio
nKey ==
"SoldTo":

Quote Item for Scripting docu­ IQuoteItem for item Scripting docu­
mainItem mentation in mentation
in context.Qu
Quote.Main ote.GetAll
Items: Items():
for item for item
in in
Quote.GetI context.Qu
temsByProd ote.
uctTypeSys GetItemsBy
temId(): ProductTyp
for eId():
mainItem for item
in in
Quote.Main context.Qu
Items: ote.
for GetItemAnd
lineItem HisAncesto
in rs():
mainItem.L context.Qu
ineItems: ote.
Quote.GetI GetItemByI
temByQuote temId(Int3
Item(Int32 2)
) context.Qu
Quote. ote.
GetItemByQ GetItemByI
uoteItem(S temNumber(
tring) Int32)
Quote. for item
GetItemByU in
niqueIdent context.Af
ifier(Stri fectedItem
ng) s:
for item
in
context.It
ems:

SAP CPQ Setup and Administration Guide


270 PUBLIC Quotes Administration
Quote 1.0 Refer­ Alternative Quote 2.0 Refer­
Scripting Object Method in Quote ence Documen­ scripting object Method in Quote ence Documen­
in Quote 1.0 1.0 tation in Quote 2.0 2.0 tation

Quote Custom Quote.GetC Scripting docu­ IQuoteCustom­ context.Qu Scripting docu­


Field ustomFiel mentation Field ote.GetCus mentation
d(“Field tomField(“
Name”) Field
Name”)

QuoteHelper QuoteHelpe Scripting docu­ IQuoteHelper QuoteHelpe Scripting docu­


r mentation r mentation

Attached Docu­ Quote.GetA Scripting docu­ IQuoteAttached­ Context.Qu Scripting docu­


ment ttachedDoc mentation Document ote.GetAtt mentation
ument(Int3 achedDocum
2) ent(Int32)

Quote Item Cus­ for item Scripting docu­ IQuoteItemCus­ for item Scripting docu­
tom Field in mentation tomField in mentation
Quote.Item context.Qu
s: ote.GetAll
Items():
item["Fiel
d item.Item[
Name"].Val "Field
ue = Name"] =
"value" "value"

Script Update Examples

Action Quote 2.0 Example

Get Quote Status Name


context.Quote.StatusName

Update Quote Status


context.Quote.ChangeStatus("Sample
Status")

Add Ship To Partner Function as an Involved Party on the


current_quote = context.Quote
quote involved_parties =
current_quote.GetInvolvedParties()
current_quote.AddInvolvedParty("SHT",
3)

Set the Address1 field of the first Involved Party on the quote
import clr
clr.AddReference("System.Core")
import System
clr.ImportExtensions(System.Linq)
quote = context.Quote
ips =
quote.GetInvolvedParties().ToList()
ip = ips[0]
ip.Address1 = 'test333'

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 271
Action Quote 2.0 Example

Add a product to the quote from a quote script or custom


inlineProduct =
API ProductHelper.CreateProduct(“Configura
ble_Tablet_for_CPQ_cpq')
inlineProduct.Attributes.GetByName('Ta
blet Screen Size').SelectValue('12')
inlineProduct.Attributes.GetByName('Nu
mber of CPU Cores').SelectValue('8')
inlineProduct.Attributes.GetByName('Op
eration System').SelectValue('iOS')
#inlineProduct.Attributes.GetByName('C
ontract Type').AssignValue('New
contract signed')
inlineProduct.AddToQuote()

Custom Actions
Each occurrence of the Quote object in the scripts needs to be modified to context.Quote. Any use of
GetCustomField().Content needs to be updated to .Value instead. Check the following examples:

Quote 1.0:

Quote.GetCustomField(“Sample CF”).Content = “New string”

Quote2.0:

context.Quote.GetCustomField(“Sample CF”).Value = “New String”

WorkflowContext properties still exist in Quote 2.0 as in Quote1.0. However, they need to be updated so that
they leverage the new context. Add context. in front of any line with WorkflowContext. This example uses
Quote 2.0 syntax:

context.WorkflowContext.Message = "Checking if WorkflowContext functions the


same"
context.WorkflowContext.BreakWorkflowExecution = True

The quote level messages functionality has been inherited from Quote 1.0 and additionally improved in the
following ways in Quote 2.0:

• Four types of messages are supported: Success, Error, Info and Warning.
• Messages have a distinct look and feel based on the message type.
• The isTemporary property defines whether the message is removed automatically from the screen after
the first request or if the user is to remove it manually (temporary vs persisted messages, respectively).

The following is the interface for adding and deleting scripting messages:

• AddMessage(string content, MessageType messageType, bool isTemporary)


• DeleteMessage(int messageId)

Example

from Scripting.Quote import MessageType


context.Quote.AddMessage("Success", MessageType.Success, False)
context.Quote.AddMessage("Error", MessageType.Error, False)
context.Quote.AddMessage("Info", MessageType.Info, False)
context.Quote.AddMessage("Warning", MessageType.Warning, False)
context.Quote.AddMessage("Success", MessageType.Success, True)

SAP CPQ Setup and Administration Guide


272 PUBLIC Quotes Administration
context.Quote.AddMessage("Error", MessageType.Error, True)
context.Quote.AddMessage("Info", MessageType.Info, True)
context.Quote.AddMessage("Warning", MessageType.Warning, True)
#for msg in context.Quote.Messages:
# context.Quote.DeleteMessage(msg.Id)

5.2.1.4.11 General

*Migration Effort Estimate Legend [page 278]

Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Application Available Improved There are some S Migration Instruc­


Parameters application param­ tions [page 274]
eters that are no
longer available in
Quote 2.0 or that
are exclusive for
Quote 2.0.

Deploy/Send Available No Change Deployment pack­ S Migration Instruc­


Changes ages created in tions [page 274]
Quote 1.0 won't
work in Quote 2.0
so you need to re­
create them

Report Module Not Available Obsolete

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 273
Migration Instructions

Application Parameters
List Price is not editable in Quote 2.0, you can't add it to the Fields, Calculations, Layout section and there
aren't any application parameters that interact with this field. If you are using these application parameters
(for example, Allow Edit List Price on the Cart), you need to consider refactoring how and why these are in
use. Additionally, the application parameters allowing users to select responsive design have been obsolete
because responsive design is mandatory for Quote 2.0.

Review the list of application parameters and check their availability in Quote engines [page 637].

Deploy/Send Changes
Deployment packages created in Quote 1.0 will not work in Quote 2.0 because you can only send/deploy
packages within the same quote engine. Recreate the packages from Quote 1.0 in Quote 2.0.

5.2.1.4.12 Import/Export

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


274 PUBLIC Quotes Administration
Migration Overview

Migration Effort
Setup Section Availability in Status in Quote Estimate [page Migration Instruc­
Name Quote 2.0 2.0 Description 278] tions

Bulk Product Available No Change This feature works


Import/Export unchanged in
Quote 2.0. The
only difference is
that in Quote
2.0 products have
the order item
type [page 204]
defined.

Customers Not Available Obsolete The Customers


Import/Export concept has been
obsoleted in Quote
2.0 and replaced
with the Business
Partners feature.

5.2.1.4.13 Delegation of Authority

*Migration Effort Estimate Legend [page 278]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 275
All sections related to the delegation of authority will be migrated from Quote 1.0 to Quote 2.0 without the
administrator having to take any actions.

5.2.1.4.14 Security

*Migration Effort Estimate Legend [page 278]

All security-related sections will be migrated from Quote 1.0 to Quote 2.0 without the administrator needing to
take any actions.

SAP CPQ Setup and Administration Guide


276 PUBLIC Quotes Administration
5.2.1.4.15 Developer Tools

*Migration Effort Estimate Legend [page 278]

All sections related to developer tools will be migrated from Quote 1.0 to Quote 2.0 without the administrator
needing to take any actions.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 277
5.2.1.4.16 Audit Trail

*Migration Effort Estimate Legend [page 278]

All sections related to the audit trail will be migrated from Quote 1.0 to Quote 2.0 without the administrator
having to take any actions.

5.2.1.5 Migration Effort Estimate Legend

Migration Effort Estimate gives a T-shirt estimate of the effort it takes to migrate a feature from Quote 1.0 to
Quote 2.0.

The estimates are not based on any real numbers (they don’t represent a number of days or hours). This type
of sizing should help you get a general understanding of the effort and make it easier to decide whether to
migrate or not.

• S - the feature has been slightly altered and you only need to make a few specific changes. You should see
most of the data unchanged in Quote 2.0.
• M - the feature works in the same way, but the user interface has been altered, some fields were removed
or added, or tags need to be updated. Migration doesn’t require a new strategy, like the L effort features,
but it requires more action by the administrator than S effort features.

SAP CPQ Setup and Administration Guide


278 PUBLIC Quotes Administration
• L - the feature in Quote 2.0 has a different logic than the feature in Quote 1.0 and therefore you need to plan
the best strategy for the migration. For example, in Quote 2.0 you will be able to use the product scripts
migrated from Quote 1.0, but you will need to adjust the parts where the script communicates with the
quote according to the Quote 2.0 logic.
• XL - the feature has been completely changed and it must be reimplemented in Quote 2.0.

Related Information

Feature Specific Migration Instructions [page 233]

5.2.1.6 Quote 1.0 to Quote 2.0 Migration FAQ

This page contains a list of common questions related to Quote 2.0 and the migration from Quote 1.0 to Quote
2.0.

• Why did you build Quote 2.0?


Enhanced performance and scalability were the main reasons for rebuilding the Quote 1.0 engine. Also, we
needed a new foundation to make sure our software can support all the features that will be added in the
future.
• Is Quote 2.0 compatible with the classic design?
No. We had to break the compatibility with the classic design in order to build a more efficient and faster
engine.
• Can I use both Quote 2.0 and Quote 1.0 engines simultaneously?
No. You need to choose one engine.
• How do I start using Quote 2.0?
The SAP CPQ Support team can activate it at your request. After that, there will be a number of steps to
adjust your system to use it in production again. This is described in How to Migrate from Quote 1.0 to
Quote 2.0 [page 202].
• I no longer see any quotes in the system once Quote 2.0 is turned on. Where are they?
Existing quotes are safe in your SAP CPQ tenant. By default, the Load Existing Project/Quotation page only
displays quotes created in the Quote 2.0 engine.
• What are the activities I need to undertake in order to migrate from Quote 1.0 to Quote 2.0?
The migration procedure is described in How to Migrate from Quote 1.0 to Quote 2.0 [page 202].
• Do we need to start from scratch and set up SAP CPQ again to start using Quote 2.0?
No. Although some features may require a significant overhaul, some of them require little to no revision at
all.
• Why don't I see products of the display type System(List) of Configurable Products and Collection of
Configurable Products in the list of supported product display types?
These two display types of products are currently not supported. They’ll be revised and we’ll deliver a new
feature that will replace these two product types in a more efficient way.
• Will the integrations still work after I migrate to Quote 2.0?
If you’re integrating with SAP CPQ using its existing SOAP APIs, you’ll need to revise this.
• Can I test Quote 2.0?

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 279
Quote 2.0 can be turned on in your Sandbox environment. This is the first step towards using it in
production. We suggest that you turn on Quote 2.0 in Sandbox, review it, and then start preparing a list of
activities to migrate to production.
• Will my existing document generation templates still work after the migration?
We don't expect any changes to happen to your document generation templates, unless they contain tags
that are obsoleted in Quote 2.0 (for example, <*TOTALAMOUNT*>).
• Where can I find a comparative overview of features in Quote 1.0 and Quote 2.0?
This list is available in Quote 1.0 vs Quote 2.0 - Feature Comparative Overview [page 204].
• Do you plan to develop the functionalities that are currently not supported in the new engine?
We plan to actively develop more features for Quote 2.0. Some of currently unsupported features will be
added in subsequent releases. We’ll also review deprecated functionalities and we may be providing similar
features with enhanced usability and performance in subsequent SAP CPQ releases.
• Do you plan to keep enhancing Quote 1.0?
Yes. Quote 1.0 won't be deprecated any time soon. We keep adding functionalities to both quote engines,
where possible, depending on the infrastructure and the capabilities of Quote 1.0.
• When do you plan to deprecate Quote 1.0?
Quote 1.0 is still powerful and flexible. It will be deprecated in the future, but no date is set at this moment.
• Is the user interface different in Quote 2.0?
The user interface remains the same as in Quote 1.0. There are plans for user interface enhancements in
the future.
• Are markets and currencies supported in Quote 2.0?
Yes.
• How does Quote 2.0 store money amounts in the DB?
Quote 2.0 stores the amounts in the selected quote currency and doesn’t perform any currency conversion
the next time you want to load the existing quote. If you’re building reports, you are able to take the value
from the database. However, if you’re building reports for quotes in different currencies, you will need to
adjust them in the report code.
• How does Quote 2.0 save the changes I make?
The quote is saved after each action you execute on quote item custom fields. However, you need to press
Enter on your keyboard or click on a different field. In case you've changed the value of a quote item
custom field without pressing Enter or changing the focus of the field, you can click the Save Quote action.
• Quote 2.0 will support thousands of lines. Should we use the for-each loop to iterate through items?
No. You should be cautious with using for-each loops with thousands of lines, because performing any
operation on thousands of lines can add up to seconds that users need to wait for something to complete.
• How does SAP CPQ calculate totals in Quote 2.0?
SAP CPQ tracks the changes you make as you modify the quote, calculates delta values and adds them to
totals.
• Am I able to enter a value as a quote total and have it propagate as discount into lines?
Yes, Quote 2.0 supports reverse calculations.
• Can I write Report Module queries for Quote 2.0?
No. The Report Module has been obsolete in Quote 2.0.

Related Information

About Quote 2.0 - Benefits and Compatibility [page 201]

SAP CPQ Setup and Administration Guide


280 PUBLIC Quotes Administration
Quote 1.0 vs Quote 2.0 - Feature Differences [page 204]
How to Migrate from Quote 1.0 to Quote 2.0 [page 202]
Quote 2.0 [page 199]

5.2.2 Fields, Calculations, Layout

In Fields, Calculations, Layout you can define options for basic quote elements in the Quote 2.0, such as quote
fields, calculations, their layout and so on.

 Note

If using Quote 1.0, calculations should be administered under Pricing/Calculations > Cart Field
Administration UI Design Quote Layout and Quote Quote Visibility Permissions respectively.

Fields, Calculations, Layout consists of the following tabs:

• Fields and Calculations [page 284]


• Quote Field Editability [page 291]
• Quote Layout [page 281]
• Quote Layout Permissions [page 282]
• Distribution Calculations [page 322]

5.2.2.1 Quote Layout (Quote 2.0)

In the Layout section you can change the look and feel of quotes in the environment, by reordering their current
columns and sections or adding new ones. This functionality is available in Responsive Design only, and in
Quote 1.0 engine, it can be found in UI Design Quote Layout .

Once you navigate to this tab ( Setup Quote Fields, Calculations, Layout Layout ), you will see all
sections and columns which are in the current quote layout (some of them are hidden from the user side via
permissions). All available columns are displayed in the ProductTypes and Items sections. They are reordered
globally, which means that when you move them to another spot, they are simultaneously reordered in all
sections in which they are displayed. Sections can also be reordered via drag-and-drop.

 Note

Visibility permissions aren’t assigned in this tab. Go to the Layout Permissions tab if you wish to restrict or
give access for certain columns/sections in an established quote layout to specific user types.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 281
Related Information

Quote Layout [page 394]

5.2.2.2 Quote Layout Permissions (Quote 2.0)

In this tab, you can set up which permission groups will be able to access the selected parts of the quote layout.

This tab is accessed via Setup Quote Fields Calculations, Layout Layout Permissions in Quote 2.0
and via Setup Quotes Quote Layout Permissions in Quote 1.0. To assign permissions, you need to
select a permission group, and then the layout items you wish to give the permission group’s members full
access to.

SAP CPQ Setup and Administration Guide


282 PUBLIC Quotes Administration
You can also click Apply layout item selections from and select the permission group from which you wish to
copy the assigned permissions.

Related Information

Quote Layout [page 394]


Quote Visibility [page 367]
Quote Tab Permissions [page 359]

5.2.3 Quote 2.0 Calculations

To manage calculations for Quote 2.0, access the Fields and Calculations tab in Setup Quotes Fields,
Calculations, Layout . The page shows in Setup only when Quote 2.0 is on. Otherwise, if using Quote 1.0,
calculations should be administered under Pricing/Calculations > Cart Fields Administration.

 Note

Note that in the context of calculations, terms quote fields and columns may be used interchangeably when
referring to fields on quotes that are calculated via formulas (for example, One-Time List Price, Extended
Cost, One-Time Cost, etc.). Additionally, terms formula and calculations may be used interchangeably as
well.

Fields and Calculations [page 284]


The Fields and Calculations tab allows you to manage existing quote default and custom fields in the
system and to add new fields.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 283
Quote Field Calculations [page 286]
Most quote fields are calculated via one predefined formula. However, the value of some of them is
calculated via multiple formulas.

Quote Field Editability [page 291]


In the Field Editability tab, you can select the quote fields that are editable, the permission groups that
are able to edit them and the status of the quotes in which the fields are editable. Unlike in the old
quote engine, in Quote 2.0, the editability is set per column. This means that if a column is editable, all
fields in that column, for all items, are editable. By default, all fields on quotes are read-only until their
editability is defined.

Order of Calculations When Adding/Updating Fields [page 293]

Order of Calculations when Changing Quote Field Values [page 296]


Click on a field to see the default order of calculations that trigger once the value of the respective
field is changed. For each field, you will see the name of the calculation as defined in Quote Fields and
Calculations, the description of the calculation and the mathematical formula used for calculating the
value.

Rolled up and Reverse Calculations [page 309]


When handling calculations in Quote 2.0, users can use standard, rolled up and reverse calculations.
Unlike Quote 1.0, Quote 2.0 allows you to handle reverse rolled up calculations.

Calculations for SAP Subscription Billing Integration [page 311]

5.2.3.1 Fields and Calculations

The Fields and Calculations tab allows you to manage existing quote default and custom fields in the system
and to add new fields.

SAP CPQ Setup and Administration Guide


284 PUBLIC Quotes Administration
After clicking Add New Field, a window pops up for defining basic settings (field name, label, type (Number,
Date, Currency, and Text) and dependency from the knockout context). The field displays automatically in the
list of fields and you can additionally manage it on the Quote Item Custom Fields page. To handle the field's
activity, use the Active toggle.

After you select a field from the list, a list of calculations attached to it will display on the right. Calculations

execute from top to bottom. To change the order or calculations, click on next to a calculation and move it up
or down. To remove a calculation, click .

 Note

Due to dependency between certain default calculations, the system must execute them in a specific order
described in Item Update Calculations Order [page 293]. Ordering calculations differently may cause an
error.

To attach another calculation, click Add calculation below the list of existing calculations. A pop-up shows all
the remaining calculations that can be attached to a field by clicking . Additionally, the system lets you define
calculations that are triggered when a new item is added. The list of calculations shows on the right if you click
Calculation on Add/Copy/Delete Item. These calculations should also be organized in a predefined order as
shown in Item Add Calculations Order.

 Note

When Quote 2.0 engine is enabled, a parameter Calculate discounts only for changed items is visible on the
Discounts page. Selecting the parameter optimizes calculations by checking discount rules only on affected
(changed) items.

In Quote 2.0, every calculation represents only one calculation that is executing in the system. Administrators
have a full control over the order of calculations and they can easily insert a custom calculation between
standard calculations. For example, they can insert an item custom field between two standard fields and insert
a calculation so that the custom field affects the standard fields, without having to completely rewrite the
entire quote calculation for quote lines. Those calculations have items that are affected by the calculation in the
context (context.AffectedItems). This applies also to sections and product types.

ICustomMathScriptArgs - Represents Custom math event argument

The concept of editable groups is removed from the system with Quote 2.0. In the new engine, calculations are
managed on field level for all users on the tenant. Calculations are to be set up for each field separately, one
field at a time. The system allows you to make all quote fields editable (main items, line items, product types,
and totals).

 Note

When on a quote, users just need to double-click the underlined amount in a column and all amounts in
the column become editable. After changing a value, users can trigger the calculations by clicking Reprice,
clicking anywhere outside the active field or by pressing Enter.

On the Quote Fields and Calculations page, the list on the left shows all fields calculated via formulas that
display on quotes. Once you click a field, the list on the right will display all calculations that are triggered in the
system after the value in the field has changed. Changing a value causes a chain reaction in which calculations
are performed one after another. When changing the default order of calculations, make sure to organize them
so that the system has the value of all constituent elements before triggering the calculation.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 285
 Tip

To organize calculations properly, administrators should understand which values does a calculation use
and according to their specific customization, organize calculations in a logical manner.

Additionally, you can create custom calculations via scripting. To access the window for creating scripts, click
Add calculation Add New Calculation . In the pop-up, define the following:

• Name - script name.


• Row Type - quote level on which the calculation is executed.
• Description - detailed explanation of the script.
• Force Proxy Generation - if enabled, the system loads and refreshes the WSDL web service.

For additional help with creating scripts, access:

• Check Syntax - checks if the script is written properly.


• Workbench - enables developing and debugging scripts.
• Scripting Methods List - list of relevant methods.

More details on scripting are available in Scripting for Quote 2.0 [page 329].

To see the editing rights for a field, click Show editing permissions for this field. The pop-up displays the
permission groups that have the rights to edit the field and quote statuses in which editing is enabled.

5.2.3.2 Quote Field Calculations

Most quote fields are calculated via one predefined formula. However, the value of some of them is calculated
via multiple formulas.

Example

Three formulas are available for calculating Item.DiscountPercent:

• Item.DiscountPercent = 100 * Item.DiscountAmount / Item.ListPrice


• Item.DiscountPercent = 100 - 100 * Item.NetPrice / Item.ListPrice
• Item.DiscountPercent = 100 - 100 * Item.ExtendedAmount / Item.ListPrice * Item.Quantity

The first calculation is attached to the One-Time Discount Amount and it's triggered once users change the
value in this field. The second calculation will be triggered after One-Time Net Price is changed and the third
after One-Time Extended Amount is changed.

You can find below formulas that are used for calculating all quote fields (main items, line items, product
type, and total items). The first column contains the name of the field as it is displayed on quotes. Calculation
contains calculation names as defined in the Quote Fields and Calculations section. In addition, a description of
each field is provided as well as the formula for calculating the field.

SAP CPQ Setup and Administration Guide


286 PUBLIC Quotes Administration
Main Item and Line Item Fields
Quote Field Calculation Description Formula

One-Time List Price Item One-Time List Price Calculates item One-Time list Item.ListPrice = Item.Exten­
price from item One-Time ex­ dedListPrice / Item.Quantity
tended list price.

Recurring List Price Item Recurring List Price Calculates Recurring List Item.MrcListPrice =
Price from Recurring Ex­ Item.MrcExtendedListPrice /
tended List Price. Item.Quantity

One-Time Discount Percent Item One-Time Discount Per­ Calculates item One-Time Item.DiscountPercent = 100
cent (from Discount Amount) discount percent from item * Item.DiscountAmount /
discount amount. Item.ListPrice

One-Time Discount Percent Item One-Time Discount Per­ Calculates item One-Time Item.DiscountPercent = 100
cent (from item net price) discount percent from net - 100 * Item.NetPrice /
price. Item.ListPrice

One-Time Discount Percent Item One-Time Discount Calculates item One-Time Item.DiscountPercent = 100
Percent (from Extended discount percent from item - 100 * Item.ExtendedA­
Amount) extended amount. mount / Item.ListPrice *
Item.Quantity

Recurring Discount Percent Item Recurring Discount Per­ Calculates item Recurring Item.MrcDiscountPercent =
cent (from Recurring Dis­ discount percent from item 100 * Item.MrcDiscountA­
count Amount) Recurring discount amount. mount / Item.MrcListPrice

Recurring Discount Percent Item Recurring Discount Per­ Calculates item Recurring Item.MrcDiscountPercent =
cent (from Recurring Net discount percent from item 100 - 100 * Item.MrcNet­
Price) Recurring net price. Price / Item.MrcListPrice

Recurring Discount Percent Item Recurring Discount Per­ Calculates item Recurring Item.MrcDiscountPercent =
cent (from Recurring Ex­ discount percent from item 100 - 100 * Item.MrcExten­
tended Amount) Recurring extended amount. dedAmount / Item.MrcList­
Price * Item.Quantity

One-Time Extended Amount Item One-Time Extended Calculates item One-Time Item.ExtendedAmount =
Amount extended amount from item Item.NetPrice * Item.Quan­
net price and quantity. tity

Recurring Extended Amount Item Recurring Extended Calculates item Recurring ex­ Item.MrcExtendedAmount
Amount tended amount from item = Item.MrcNetPrice *
Recurring net price and Item.Quantity
quantity.

One-Time Cost Item Cost Calculates item One-Time Item.Cost = Item.Extended­


cost from item extended cost Cost / Item.Quantity
and quantity.

Recurring Cost Item Recurring Cost Calculates item Recurring Item.MrcCost = Item.MrcEx­
cost from item Recurring ex­ tendedCost / Item.Quantity
tended cost and quantity.

One-Time Extended Cost Item One-Time Extended Calculates item One-Time item.ExtendedCost =
Cost extended cost from item item.Cost * item.Quantity
One-Time cost and quantity.

Recurring Extended Cost Item Recurring Extended Calculates item Recurring ex­ Item.MrcExtendedCost =
Cost tended cost from item Recur­ Item.MrcCost * Item.Quan­
ring cost and quantity. tity

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 287
Quote Field Calculation Description Formula

One-Time Extended List Price Item One-Time Extended List Calculates item One-Time Item.ExtendedListPrice =
Price extended list price from Item.ListPrice * Item.Quan­
item One-Time list price and tity
quantity.

Recurring Extended List Price Item Recurring Extended List Calculates item Recurring ex­ Item.MrcExtendedListPrice
Price tended list price from item = Item.MrcListPrice *
Recurring list price and quan­ Item.Quantity
tity.

One-Time Discount Amount Item One-Time Discount Calculates item One-Time Item.DiscountAmount =
Amount (from One-Time dis­ discount amount from One- Item.ListPrice * Item.Quan­
count percent) Time discount percent. One- tity * Item.DiscountPercent /
Time discount amount also 100
includes item quantity.

One-Time Discount Amount Item One-Time Discount Calculates item One-Time Item.DiscountAmount =
Amount (from One-Time net discount amount from item Item.ListPrice - Item.Net­
price) net price. Price

One-Time Discount Amount Item One-Time Discount Calculates item One-Time Item.DiscountAmount =
Amount (from One-Time ex­ discount amount from One- (Item.ListPrice - Item.Exten­
tended amount) Time extended amount and dedAmount / Item.Quantity)
quantity. * Item.Quantity

Recurring Discount Amount Item Recurring Discount Calculates item Recurring Item.MrcDiscountAmount
Amount (from Recurring dis­ discount amount from item = Item.MrcListPrice *
count percent) Recurring discount percent. Item.MrcDiscountPercent /
100

Recurring Discount Amount Item Recurring Discount Calculates item Recurring Item.MrcDiscountAmount
Amount (from Recurring net discount percent from item = Item.MrcListPrice -
price) Recurring net price. Item.MrcNetPrice

Recurring Discount Amount Item Recurring Discount Calculates item Recurring Item.MrcDiscountAmount
Amount (from Recurring ex­ discount amount from Re­ = Item.MrcListPrice -
tended amount) curring extended amount. Item.MrcExtendedAmount /
Item.Quantity

One-Time Net Price Item One-Time Net Price Calculates item One-Time item.NetPrice = item.List­
net price from item discount Price * (1 - item.DiscountPer­
percent. cent / 100)

Recurring Net Price Item Recurring Net Price Calculates item Recurring Item.MrcNetPrice =
net price from Recurring dis­ Item.MrcListPrice -
count amount. Item.MrcDiscountAmount

One-Time Manufactures Item One-Time Gross Margin Calculates item One-Time Item.GrossMarginPercent
Gross Margin Percent gross margin percent from = 100 * (Item.Exten­
item One-Time extended dedAmount - Item.Exten­
amount and item One-Time dedCost) / Item.ExtendedA­
extended cost. mount

Recurring Manufactures Total Recurring Gross Margin Calculates total Recurring Totals.MrcGrossMarginPer­
Gross Margin Percent gross margin percent from cent = 100 * (Totals.MrcNet­
totals Recurring net price Price - Totals.MrcCost) / To­
and totals Recurring cost. tals.MrcNetPrice

SAP CPQ Setup and Administration Guide


288 PUBLIC Quotes Administration
Product Type Fields
Quote Fields Calculation Description Formula

Product Type One-Time Product Type One-Time Dis­ Calculates product type One- ProductType.DiscountPer­
Discount Percent count Percent Time discount percent from cent = 100 * Product­
product type One-Time dis­ Type.DiscountAmount / Pro­
count amount. ductType.ListPrice

Product Type Recurring Product Type Recurring Dis­ Calculates product type Re­ ProductType.MrcDiscount­
Discount Percent count Percent curring discount percent Percent = Product­
from product type Recurring Type.MrcDiscountAmount /
discount amount. ProductType.MrcListPrice

One-Time Extended Amount Product Type One-Time Net Calculates One-Time net NetPrice = Sum(Item.Exten­
Price price as a sum of all item ex­ dedAmount)
tended amounts.

Recurring Extended Amount Product Type Recurring Net Calculates Recurring ex­ ProductType.MrcNetPrice
Price tended amount as a sum of = Sum(Item.RecurringExten­
all item Recurring extended dedAmount)
amounts.

One-Time Extended Cost Product Type One-Time Cost Calculates One-Time ex­ Cost = Sum(Item.Extended­
tended cost as a sum of Cost)
all item One-Time extended
costs.

Recurring Extended Cost Product Type Recurring Cost Calculates Recurring ex­ ProductType.MrcCost
tended cost as a sum of = Sum(Item.RecurringExten­
all item Recurring extended dedCost)
costs.

One-Time Extended List Price Product Type List Price Calculates NRX extended list ListPrice = Sum(Item.Exten­
price as a sum of all item ex­ dedListPrice)
tended list prices.

Recurring Extended List Price Product Type Recurring List Calculates product type Re­ ProductType.MrcListPrice
Price curring list price as a sum of = Sum(Item.RecurringExten­
all item Recurring extended dedListPrice)
list prices.

One-Time Discount Amount Product Type Discount Calculates One-Time dis­ ProductType.DiscountA­
Amount count amount from product mount = ProductType.List­
type One-Time net price. Price - ProductType.NetPrice

Recurring Discount Amount Product Type Recurring Dis­ Calculates Recurring dis­ ProductType.MrcDiscountA­
count Amount count amount from Recur­ mount = Product­
ring net price. Type.MrcListPrice - Product­
Type.MrcNetPrice

One-Time Manufactures Product Type Gross Margin Calculates One-Time manu­ ProductType.GrossMargin­
Gross Margin Percent factures gross margin from Percent = 100 * (Pro­
product type net price. ductType.NetPrice - Pro­
ductType.Cost) / Product­
Type.NetPrice

Recurring Manufactures Product Type Recurring Calculates Recurring manu­ ProductType.MrcGrossMar­


Gross Margin Gross Margin Percent factures gross margin from ginPercent = 100 *
product Recurring net price. (ProductType.MrcNetPrice -
ProductType.MrcCost) / Pro­
ductType.MrcNetPrice

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 289
Total Fields
Quote Field Calculation Description Formula

Item Total One-Time Total One-Time List Price Calculates total One-Time Totals.ListPrice
Extended List Price extended list price as a sum = Sum(Item.ExtendedList­
of all item extended list pri­ Price)
ces.

Item Total One-Time Total One-Time Net Price Calculates total One-Time Totals.NetPrice =
Extended Amount extended amount as a Sum(Item.ExtendedAmount)
sum of all item extended
amounts. This is the total
amount of all items without
any added expenses or ap­
plied discounts.

Total Total Amount Calculates total amount as a Totals.Amount = Totals.Net­


sum of all item Recurring ex­ Price
tended amounts. Currently,
the Total and Item Total One-
Time Extended Amount have
the same amounts because
additional discounts, subto­
tals, and so on, are still not
implemented for Quote 2.0.
Once these are implemented,
they’ll be considered when
calculating the total amount.

Item Total Recurring Total Recurring List Price Calculates item total Recur­ Totals.MrcListPrice
Extended List Price ring extended list price as a = Sum(Item.RecurringExten­
sum of all item Recurring ex­ dedListPrice)
tended list prices.

Item Total Recurring Total Recurring Net Price Calculates item total Recur­ Totals.MrcNetPrice
Extended Amount ring extended amount as a = Sum(Item.RecurringExten­
sum of all item Recurring ex­ dedAmount)
tended amounts.

Item Total Recurring Amount Total Recurring Amount Calculates total Recurring Totals.MrcAmount = To­
amount as a sum of all tals.MrcNetPrice
item Recurring extended
amounts.

Item Total One-Time Total Cost Calculates item total One- Totals.Cost = Sum(Item.Ex­
Extended Cost Time extended cost as a sum tendedCost)
of all item extended costs.

Item Total One-Time Total Product Discount Calculates item total One- Totals.ProductDiscountA­
Extended Amount Amount Time extended amount from mount = Totals.ListPrice -
total net price. Totals.NetPrice

Item Total One-Time Discount Total Average Product Dis­ Calculates item total One- Totals.AverageProductDis­
Percent count Percent Time discount percent countPercent = 100
from total product discount * Totals.ProductDiscountA­
amount. mount / Totals.ListPrice

SAP CPQ Setup and Administration Guide


290 PUBLIC Quotes Administration
Quote Field Calculation Description Formula

Item Total Recurring Total Recurring Cost Calculates total Recurring ex­ Totals.MrcCost
Extended Cost tended cost as a sum of = Sum(Item.RecurringExten­
all item Recurring extended dedCost)
costs.

Item Total Recurring Total Recurring Product Dis­ Calculates item total Recur­ Totals.MrcProductDiscoun­
Extended Amount count Amount ring extended amount from tAmount = Totals.MrcList­
total Recurring net price. Price - Totals.MrcNetPrice

Item Total Recurring Discount Total Average Recurring Calculates item total Recur­ Totals.AverageMrcProduct­
Percent Product Discount Percent ring discount percent from DiscountPercent = 100
Recurring product discount * Totals.MrcProductDiscoun­
amount. tAmount / Totals.MrcList­
Price

Recurring Manufactures Total Recurring Gross Margin Calculates total Recurring Totals.MrcGrossMarginPer­
Gross Margin Percent manufactures gross margin cent = 100 * (Totals.MrcNet­
from Recurring net price. Price - Totals.MrcCost) / To­
tals.MrcNetPrice

5.2.3.3 Quote Field Editability

In the Field Editability tab, you can select the quote fields that are editable, the permission groups that are able
to edit them and the status of the quotes in which the fields are editable. Unlike in the old quote engine, in
Quote 2.0, the editability is set per column. This means that if a column is editable, all fields in that column, for
all items, are editable. By default, all fields on quotes are read-only until their editability is defined.

When you access the Field Editability tab, only permission groups are displayed in the Select Permission
Group column. After selecting a permission group, quote statuses display in the Select Quote Status column.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 291
Similarly, once a status is selected, fields show up in the Select Fields column. The selected fields are
automatically moved to the Selected Items section. To deselect an item, either click on it or click in the
column title.

Multiple selection of permission groups and quote statuses isn’t enabled so you have to define field editability
for each permission group/status separately. Clicking Default Settings in a respective column applies the
selection to all permission groups or statuses.

If you want the same fields that are editable for a permission group/quote status pair to be editable for another
permission group/status pair, click Apply field selections from. A pop-up displays enabling you to search the
permission group and the quote status.

 Note

The logic between multiple permission groups is OR (if a user belongs to multiple permission groups, and if
editing a field is enabled for only one of the groups, the user has the right to edit that field).

Default Settings

Default editing settings allow administrators to select fields that are editable for all permission group/status
pairs by default until administrators select other fields. The purpose of the default settings is to cover the
scenarios in which the administrator hasn’t defined what fields are editable for a permission group or a status,
or both.

Define Default Settings


The procedure provides step-by-step instructions on how to define default settings for all permission groups
and all quote statuses.

1. Access the Field Editability tab.


2. In the Select Permission Group column, click Default Settings.
New is added to the column title.
3. In the Select Quote Status column, select Default Settings.
New is added to the column title.
4. Select the fields that are editable.
The fields are automatically moved to the Selected Items section.
5. Click Save.
The selected fields are now editable to all users for all quotes.

After defining default settings that all permission group/status pairs inherit, selecting a pair and clicking Save
breaks the link between the default settings and the respective pair. All future changes made to the default
settings won’t apply to the respective pair.

 Tip

Default settings apply to permission group/status pairs only before any other change is made. For example,
if default fields are selected for a pair and you deselect one of the fields and select two others fields, you
can’t apply the default settings again. You can only select fields manually.

To decide what quote fields are editable for a user, the system first looks for the fields that are selected in
Fields, Calculations, Layout > Field Editability for that permission group and the status of the current quote.

SAP CPQ Setup and Administration Guide


292 PUBLIC Quotes Administration
If no fields are selected, the system looks for fields that are selected for that permission group and all quote
statuses. Similarly, if no fields are selected for the permission group, the system looks which fields are selected
for that quote status. Consequently, if no fields are selected neither for the permission group nor the status,
the default fields are editable to the user.

The system follows this workflow after default settings have been applied and before any other change on the
selected fields has been made for a permission group/status.

5.2.3.4 Order of Calculations When Adding/Updating


Fields

When a new item is added to a quote or an existing item is updated with new configuration, these calculations
are triggered in the following order:

Calculation Description Formula

Item One-Time Extended List Price Calculates item One-Time extended list Item.ExtendedListPrice = Item.ListPrice
price from item One-Time list price and * Item.Quantity
quantity.

Item One-Time Discount Amount (from Calculates item One-Time discount Item.DiscountAmount = Item.ListPrice
One-Time discount percent) amount from One-Time discount per­ * Item.Quantity * Item.DiscountPer­
cent. One-Time discount amount also cent / 100
includes item quantity.

Item One-Time Net Price Calculates item One-Time net price item.NetPrice = item.ListPrice * (1 -
from item discount percent. item.DiscountPercent / 100)

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Item One-Time Extended Cost Calculates item One-Time extended item.ExtendedCost = item.Cost *
cost from item One-Time cost and item.Quantity
quantity.

Item One-Time Gross Margin Percent Calculates item One-Time gross margin Item.GrossMarginPercent = 100 *
percent from item One-Time extended (Item.ExtendedAmount - Item.Exten­
amount and item One-Time extended dedCost) / Item.ExtendedAmount
cost.

Product Type List Price Calculates NRX extended list price as a ListPrice = Sum(Item.ExtendedList­
sum of all item extended list prices. Price)

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 293
Calculation Description Formula

Product Type One-Time Cost Calculates One-Time extended cost as Cost = Sum(Item.ExtendedCost)
a sum of all item One-Time extended
costs.

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total One-Time List Price Calculates total One-Time extended list Totals.ListPrice = Sum(Item.Extended­
price as a sum of all item extended list ListPrice)
prices.

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Total Cost Calculates item total One-Time ex­ Totals.Cost = Sum(Item.ExtendedCost)


tended cost as a sum of all item ex­
tended costs.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

Item Recurring Extended List Price Calculates item Recurring extended list Item.MrcExtendedListPrice =
price from item Recurring list price and Item.MrcListPrice * Item.Quantity
quantity.

Item Recurring Discount Amount (from Calculates item Recurring discount Item.MrcDiscountAmount =
Recurring discount percent) amount from item Recurring discount Item.MrcListPrice * Item.MrcDiscount­
percent. Percent / 100

Item Recurring Discount Amount (from Calculates item Recurring discount Item.MrcDiscountAmount =
Recurring discount percent) amount from item Recurring discount Item.MrcListPrice * Item.MrcDiscount­
percent. Percent / 100

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Item Recurring Extended Cost Calculates item Recurring extended Item.MrcExtendedCost = Item.MrcCost
cost from item Recurring cost and * Item.Quantity
quantity.

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

SAP CPQ Setup and Administration Guide


294 PUBLIC Quotes Administration
Calculation Description Formula

Product Type Recurring List Price Calculates product type Recurring list ProductType.MrcListPrice =
price as a sum of all item Recurring ex­ Sum(Item.RecurringExtendedListPrice)
tended list prices.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Product Type Recurring Cost Calculates Recurring extended cost as ProductType.MrcCost = Sum(Item.Re­
a sum of all item Recurring extended curringExtendedCost)
costs.

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring List Price Calculates item total Recurring ex­ Totals.MrcListPrice = Sum(Item.Recur­
tended list price as a sum of all item ringExtendedListPrice)
Recurring extended list prices.

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Cost Calculates total Recurring extended Totals.MrcCost = Sum(Item.Recurrin­


cost as a sum of all item Recurring ex­ gExtendedCost)
tended costs.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 295
5.2.3.5 Order of Calculations when Changing Quote Field
Values

Click on a field to see the default order of calculations that trigger once the value of the respective field is
changed. For each field, you will see the name of the calculation as defined in Quote Fields and Calculations, the
description of the calculation and the mathematical formula used for calculating the value.

Discount Amount Calculations [page 296]

Discount Percent Calculations [page 297]

Extended Amount Calculations [page 298]

Gross Margin Percent Calculations [page 299]

Recurring Discount Amount [page 300]

Recurring Discount Percent Calculations [page 301]

Recurring Extended Amount Calculations [page 302]

Recurring Gross Margin Percent Calculations [page 303]

Recurring Net Price [page 304]

One-Time Net Price [page 306]

Quantity Calculations [page 307]

5.2.3.5.1 Discount Amount Calculations

Calculation Description Formula

Item One-Time Discount Percent (from Calculates item One-Time discount Item.NrcDiscountPercent = 100 -
One-Time Extended Amount) percent from item One-Time extended 100 * Item.NrcExtendedAmount /
amount, One-Time list price and quan­ Item.NrcListPrice * Item.Quantity
tity.

Item One-Time Net Price Calculates item One-Time net price item.NetPrice = item.ListPrice * (1 -
from item list price and item discount item.DiscountPercent / 100)
percent.

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Product type Net Price Calculates product type net price as a ProductType.NetPrice = Sum(Item.Ex­
sum of all item extended amounts. tendedAmount)

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

SAP CPQ Setup and Administration Guide


296 PUBLIC Quotes Administration
Calculation Description Formula

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Item Gross Margin Percent Calculates item gross margin percent Item.GrossMarginPercent = 100 *
from item extended amount and item (Item.ExtendedAmount - Item.Exten­
extended cost. dedCost) / Item.ExtendedAmount

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total Average Gross Margin Percent Calculates item total Recurring manu­ Totals.MrcGrossMarginPercent = 100 *
factures gross margin from total Recur­ (Totals.MrcNetPrice - Totals.MrcCost) /
ring net price and total mrc cost. Totals.MrcNetPrice

5.2.3.5.2 Discount Percent Calculations

Calculation Description Formula

Item One-Time Discount Amount (from Calculates item One-Time discount Item.DiscountAmount = Item.ListPrice
One-Time discount percent) amount from One-Time discount per­ * Item.Quantity * Item.DiscountPer­
cent. One-Time discount amount also cent / 100
includes item quantity.

Item One-Time Net Price Calculates item One-Time net price item.NetPrice = item.ListPrice * (1 -
from item discount percent. item.DiscountPercent / 100)

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 297
Calculation Description Formula

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Item One-Time Gross Margin Percent Calculates item One-Time gross margin Item.GrossMarginPercent = 100 *
percent from item One-Time extended (Item.ExtendedAmount - Item.Exten­
amount and item One-Time extended dedCost) / Item.ExtendedAmount
cost.

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total Recurring Gross Margin Percent Calculates item total Recurring manu­ Totals.MrcGrossMarginPercent = 100 *
factures gross margin from Recurring (Totals.MrcNetPrice - Totals.MrcCost) /
net price. Totals.MrcNetPrice

5.2.3.5.3 Extended Amount Calculations

Calculation Description Formula

Item One-Time Discount Amount (from Calculates item One-Time discount Item.DiscountAmount = Item.ListPrice
One-Time discount percent) amount from One-Time discount per­ * Item.Quantity * Item.DiscountPer­
cent. One-Time discount amount also cent / 100
includes item quantity.

Item One-Time Discount Percent (from Calculates item One-Time discount Item.DiscountPercent = 100 * Item.Dis­
Discount Amount) percent from item discount amount. countAmount / Item.ListPrice

Item One-Time Net Price Calculates item One-Time net price item.NetPrice = item.ListPrice * (1 -
from item list price and item discount item.DiscountPercent / 100)
percent.

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

Product type discount amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

SAP CPQ Setup and Administration Guide


298 PUBLIC Quotes Administration
Calculation Description Formula

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Item One-Time Gross Margin Percent Calculates item One-Time gross margin Item.GrossMarginPercent = 100 *
percent from item One-Time extended (Item.ExtendedAmount - Item.Exten­
amount and item One-Time extended dedCost) / Item.ExtendedAmount
cost.

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total Gross Margin Percent Calculates item total manufactures Totals.GrossMarginPercent = 100 * (To­
gross margin from net price. tals.NetPrice - Totals.Cost) / Totals.Net­
Price

5.2.3.5.4 Gross Margin Percent Calculations

Calculation Description Formula

Item One-Time Gross Margin Percent Calculates item One-Time gross margin Item.GrossMarginPercent = 100 *
(from Discount Percent) percent from item One-Time extended (Item.ExtendedAmount - Item.Exten­
amount and item One-Time extended dedCost) / Item.ExtendedAmount
cost.

Item One-Time Discount Amount (from Calculates item One-Time discount item.DiscountAmount = item.ListPrice
Discount Percent) amount from item discount percent. * item.Quantity * item.DiscountPer­
cent / 100

Item One-Time Net Price Calculates item One-Time net price item.NetPrice = item.ListPrice * (1 -
from item discount percent. item.DiscountPercent / 100)

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 299
Calculation Description Formula

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item One-Time extended amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total One-Time Gross Margin Percent Calculates total One-Time manufac­ Totals.NrcGrossMarginPercent = 100 *
tures gross margin from One-Time net (Totals.NrcNetPrice - Totals.NrcCost) /
price. Totals.NrcNetPrice

5.2.3.5.5 Recurring Discount Amount

Calculation Description Formula

Item Recurring Discount Percent (from Calculates item Recurring discount per­ Item.MrcDiscountPercent = 100
Recurring Discount Amount) cent from item Recurring discount * Item.MrcDiscountAmount /
amount. Item.MrcListPrice

Item Recurring Net Price Calculates item Recurring net price Item.MrcNetPrice = Item.MrcListPrice -
from Recurring discount amount. Item.MrcDiscountAmount

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

SAP CPQ Setup and Administration Guide


300 PUBLIC Quotes Administration
Calculation Description Formula

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

5.2.3.5.6 Recurring Discount Percent Calculations

Calculation Decsription Formula

Item Recurring Discount Amount (from Calculates item Recurring discount Item.DiscountAmount = Item.ListPrice
Recurring discount percent) amount from Recurring discount per­ * Item.Quantity * Item.DiscountPer­
cent. Recurring discount amount also cent / 100
includes item quantity.

Item Recurring Net Price Calculates item Recurring net price Item.MrcNetPrice = Item.MrcListPrice -
from Recurring discount amount. Item.MrcDiscountAmount

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 301
Calculation Decsription Formula

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

5.2.3.5.7 Recurring Extended Amount Calculations

Calculation Description Formula

Item Recurring Discount Amount (from Calculates item Recurring discount Item.MrcDiscountAmount =
Recurring extended amount) amount from Recurring extended Item.MrcListPrice - Item.MrcExtende­
amount. dAmount / Item.Quantity

Item Recurring Discount Percent (from Calculates item Recurring discount per­ Item.MrcDiscountPercent = 100
Recurring Discount Amount) cent from item Recurring discount * Item.MrcDiscountAmount /
amount. Item.MrcListPrice

Item Recurring Net Price Calculates item Recurring net price Item.MrcNetPrice = Item.MrcListPrice -
from Recurring discount amount. Item.MrcDiscountAmount

SAP CPQ Setup and Administration Guide


302 PUBLIC Quotes Administration
Calculation Description Formula

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

5.2.3.5.8 Recurring Gross Margin Percent Calculations

Calculation Description Formula

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.GrossMarginPercent = 100 *
(from Recurring Discount Percent) percent from item Recurring extended (Item.ExtendedAmount - Item.Exten­
amount and item Recurring extended dedCost) / Item.ExtendedAmount
cost.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 303
Calculation Description Formula

Item Recurring Discount Amount (from Calculates item Recurring discount item.DiscountAmount = item.ListPrice
Recurring Discount Percent) amount from item Recurring discount * item.Quantity * item.DiscountPer­
percent. cent / 100

Item Recurring Net Price Calculates item Recurring net price Item.MrcNetPrice = Item.MrcListPrice -
from Recurring discount amount. Item.MrcDiscountAmount

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Total Recurring Net Price Calculates total Recurring manufac­ Totals.MrcNetPrice = Sum(Item.Recur­
tures gross margin from Recurring net ringExtendedAmount)
price.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

5.2.3.5.9 Recurring Net Price

Calculation Description Formula

Item Recurring Discount Amount (from Calculates item Recurring discount per­ Item.MrcDiscountAmount =
Recurring net price) cent from item Recurring net price. Item.MrcListPrice - Item.MrcNetPrice

SAP CPQ Setup and Administration Guide


304 PUBLIC Quotes Administration
Calculation Description Formula

Item Recurring Discount Percent (from Calculates item Recurring discount per­ Item.MrcDiscountPercent = 100
Recurring Discount Amount) cent from item Recurring discount * Item.MrcDiscountAmount /
amount. Item.MrcListPrice

Item Recurring Extended Amount Calculates item Recurring extended Item.MrcExtendedAmount =


amount from item Recurring net price Item.MrcNetPrice * Item.Quantity
and quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Recurring Gross Margin Percent Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 305
5.2.3.5.10 One-Time Net Price

Calculation Description Formula

Item One-Time Discount Amount (from Calculates item One-Time discount Item.DiscountAmount = Item.ListPrice
One-Time net price) amount from item net price. - Item.NetPrice

Item One-Time Discount Percent (from Calculates item One-Time discount Item.DiscountPercent = 100 * Item.Dis­
Discount Amount) percent from item discount amount. countAmount / Item.ListPrice

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Item Gross Margin Percent Calculates item gross margin percent Item.GrossMarginPercent = 100 *
from item extended amount and item (Item.ExtendedAmount - Item.Exten­
extended cost. dedCost) / Item.ExtendedAmount

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total Average Gross Margin Percent Calculates total average gross margin Totals.GrossMarginPercent = 100 * (To­
percent from total net price and total tals.NetPrice - Totals.Cost) / Totals.Net­
cost. Price

SAP CPQ Setup and Administration Guide


306 PUBLIC Quotes Administration
5.2.3.5.11 Quantity Calculations

Calculation Description Formula

Item One-Time Extended List Price Calculates item One-Time extended list Item.ExtendedListPrice = Item.ListPrice
price from item One-Time list price and * Item.Quantity
quantity.

Item One-Time Extended Amount Calculates item One-Time extended Item.ExtendedAmount = Item.NetPrice
amount from item net price and quan­ * Item.Quantity
tity.

Item One-Time Extended Cost Calculates item One-Time extended Item.ExtendedCost = item.Cost *
cost from item One-Time cost and item.Quantity
quantity.

Item One-Time Discount Amount (from Calculates item One-Time discount Item.DiscountAmount = Item.ListPrice
One-Time discount percent) amount from One-Time discount per­ * Item.Quantity * Item.DiscountPer­
cent. One-Time discount amount also cent / 100
includes item quantity.

Product Type One-Time Net Price Calculates One-Time net price as a sum NetPrice = Sum(Item.ExtendedA­
of all item extended amounts. mount)

Product Type List Price Calculates One-Time extended list price ListPrice = Sum(Item.ExtendedList­
as a sum of all item extended list prices. Price)

Product Type Discount Amount Calculates One-Time discount amount ProductType.DiscountAmount = Pro­
from product type One-Time net price. ductType.ListPrice - ProductType.Net­
Price

Product Type One-Time Discount Calculates product type One-Time dis­ ProductType.DiscountPercent = 100
Percent count percent from product type One- * ProductType.DiscountAmount / Pro­
Time discount amount. ductType.ListPrice

Product Type One-Time Cost Calculates One-Time extended cost as Cost = Sum(Item.ExtendedCost)
a sum of all item One-Time extended
costs.

Product Type Product Model Price Calculates product model price by mul­ ProductType.ProductModelPrice =
tiplying quantity by product model Sum(Item.Quantity * Item.ProductMo­
price. delPrice)

Total One-Time List Price Calculates total One-Time extended list Totals.ListPrice = Sum(Item.Extended­
price as a sum of all item extended list ListPrice)
prices.

Total One-Time Net Price Calculates total One-Time extended Totals.NetPrice = Sum(Item.Extende­
amount as a sum of all item extended dAmount)
amounts.

Total Amount Calculates total amount as a sum of all Totals.Amount = Totals.NetPrice


item Recurring extended amounts.

Item Recurring Extended List Price Calculates item Recurring extended list Item.MrcExtendedListPrice =
price from item Recurring list price and Item.MrcListPrice * Item.Quantity
quantity.

Item Recurring Discount Percent (from Calculates item Recurring discount per­ Item.MrcDiscountPercent = 100 -
Recurring Extended Amount) cent from item Recurring extended 100 * Item.MrcExtendedAmount /
amount. Item.MrcListPrice * Item.Quantity

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 307
Calculation Description Formula

Item Recurring Extended Cost Calculates item Recurring extended Item.MrcExtendedCost = Item.MrcCost
cost from item Recurring cost and * Item.Quantity
quantity.

Product Type Recurring Net Price Calculates Recurring extended amount ProductType.MrcNetPrice =
as a sum of all item Recurring extended Sum(Item.RecurringExtendedAmount)
amounts.

Product Type Recurring List Price Calculates product type Recurring list ProductType.MrcListPrice =
price as a sum of all item Recurring ex­ Sum(Item.RecurringExtendedListPrice)
tended list prices.

Product Type Recurring Discount Calculates Recurring discount amount ProductType.MrcDiscountAmount =


Amount from Recurring net price. ProductType.MrcListPrice - Product­
Type.MrcNetPrice

Product Type Recurring Discount Calculates product type Recurring dis­ ProductType.MrcDiscountPercent =
Percent count percent from product type Recur­ ProductType.MrcDiscountAmount /
ring discount amount. ProductType.MrcListPrice

Product Type Recurring Cost Calculates Recurring extended cost as ProductType.MrcCost = Sum(Item.Re­
a sum of all item Recurring extended curringExtendedCost)
costs.

Total Recurring List Price Calculates item total Recurring ex­ Totals.MrcListPrice = Sum(Item.Recur­
tended list price as a sum of all item ringExtendedListPrice)
Recurring extended list prices.

Total Recurring Net Price Calculates item total Recurring ex­ Totals.MrcNetPrice = Sum(Item.Recur­
tended amount as a sum of all item Re­ ringExtendedAmount)
curring extended amounts.

Total Recurring Amount Calculates total Recurring amount as Totals.MrcAmount = Totals.MrcNet­


a sum of all item Recurring extended Price
amounts.

Total Product Discount Amount Calculates item total One-Time ex­ Totals.ProductDiscountAmount = To­
tended amount from total net price. tals.ListPrice - Totals.NetPrice

Total Average Product Discount Percent Calculates item total One-Time dis­ Totals.AverageProductDiscountPercent
count percent from total product dis­ = 100 * Totals.ProductDiscountA­
count amount. mount / Totals.ListPrice

Total Recurring Product Discount Calculates item total Recurring ex­ Totals.MrcProductDiscountAmount =
Amount tended amount from total Recurring net Totals.MrcListPrice - Totals.MrcNet­
price. Price

Total Average Recurring Product Calculates item total Recurring dis­ Totals.AverageMrcProductDiscountPer­
Discount Percent count percent from Recurring product cent = 100 * Totals.MrcProductDis­
discount amount. countAmount / Totals.MrcListPrice

Total Cost Calculates item total One-Time ex­ Totals.Cost = Sum(Item.ExtendedCost)


tended cost as a sum of all item ex­
tended costs.

Total Recurring Cost Calculates total Recurring extended Totals.MrcCost = Sum(Item.Recurrin­


cost as a sum of all item Recurring ex­ gExtendedCost)
tended costs.

SAP CPQ Setup and Administration Guide


308 PUBLIC Quotes Administration
Calculation Description Formula

Item Recurring Gross Margin Percent Calculates item Recurring gross margin Item.MrcGrossMarginPercent = 100
percent from item Recurring extended * (Item.MrcExtendedAmount -
amount and item Recurring extended Item.MrcExtendedCost) / MrcExtende­
cost. dAmount

Item One-Time Gross Margin Percent Calculates item One-Time gross margin Item.GrossMarginPercent = 100 *
percent from item One-Time extended (Item.ExtendedAmount - Item.Exten­
amount and item One-Time extended dedCost) / Item.ExtendedAmount
cost.

Total Product Model Price Calculates total One-Time product Totals.ProductModelPrice =


model price from item product model Sum(Item.Quantity * Item.ProductMo­
price and quantity. delPrice)

Product Type Gross Margin Percent Calculates One-Time manufactures ProductType.GrossMarginPercent =


gross margin from product type net 100 * (ProductType.NetPrice - Product­
price. Type.Cost) / ProductType.NetPrice

Total Average Gross Margin Percent Calculates total average gross margin Totals.GrossMarginPercent = 100 * (To­
percent from total net price and total tals.NetPrice - Totals.Cost) / Totals.Net­
cost. Price

Product Type Recurring Gross Margin Calculates Recurring manufactures ProductType.MrcGrossMarginPercent


Percent gross margin from product Recurring = 100 * (ProductType.MrcNetPrice
net price. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Average Recurring Gross Margin Calculates total Recurring manufac­ Totals.MrcGrossMarginPercent = 100 *
Percent tures gross margin from Recurring net (Totals.MrcNetPrice - Totals.MrcCost) /
price. Totals.MrcNetPrice

5.2.3.6 Rolled up and Reverse Calculations


When handling calculations in Quote 2.0, users can use standard, rolled up and reverse calculations. Unlike
Quote 1.0, Quote 2.0 allows you to handle reverse rolled up calculations.

Rolled up Calculations

The following settings must be performed in the Setup so that the rolled up columns display on quotes for a
user type:

• to have the permission to manage rolled up columns enabled in Quotes Quote Layout Permissions .
Rolled up columns should be moved from available to selected in the Visible Columns section.
• to move the rolled up columns from available to selected in UI Design Quote Layout.
• to have all the columns in one list, either in the list of available or the list of selected columns.

To calculate a rolled up amount of a quote field, add the respective rolled up calculation to the end of the list of
calculations that are executed when the value of that field is changed. The rolled up calculations should also be
added in the list of calculations in Item Add/Update Calculations that are triggered when an item is added to a
quote.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 309
The default rolled up calculations are in the system and they are named accordingly (e.g. Rolled Up Extended
Amount, etc.).

Reverse Rolled up Calculations

Reverse rolled up calculations are available only in Quote 2.0. This calculation type lets you change the rolled up
amount so that the system would calculate the respective amount for each item.

For example, if you change the rolled up extended amount of a main item, the system will calculate the rolled up
amount of each item and consequently the extended amount of each item.

When a rolled up amount is changed, the discount percent will first change accordingly. From there on, other
calculations will be executed to calculate the amount of each item. In the calculation setup, only the discount
percent calculations are set up by default. Administrators should add subsequent calculations based on their
model of SAP CPQ.

 Note

You can set up the calculation order for rolled up fields only for main items. Therefore, line item rolled up
fields should not be editable on quotes.

SAP CPQ Setup and Administration Guide


310 PUBLIC Quotes Administration
Reverse Calculations

Reverse calculations in Quote 2.0 let you change the amount in Product Types and Total fields so that the value
in the respective item fields changes accordingly (the discount percent is first changed and then other fields
set up for the calculation).

5.2.3.7 Calculations for SAP Subscription Billing


Integration

When integration with SAP Subscription Billing is enabled, the SubscriptionItem section displays in Fields and
Calculations. This section contains only standard quote fields available on quotes when the two applications
are integrated. SAP Subscription Billing products don’t support quote item custom fields.

Quotes with SAP Subscription Billing products contain standard quote fields and the standard fields available
only for SAP Subscription Billing products. Calculations for the SAP Subscription Billing integration should be
managed and set up in the same way as other calculations in Quote Fields and Calculations [page 284].

 Note

Discount fields on rate plan charges are only editable on the quote if they are defined as parameters in the
rate plan template.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 311
These are the standard quote fields and calculations introduced specifically for SAP Subscription Billing
products:

Quote Field Calculation Description Formula

Contract End Date Subscription Billing - Calcu­ Calculates end dates from Contract End Date = Start
late End Dates from Start the start date and the con­ Date + Contract Length
Date and Months tract duration. This calcula­ (months)
tion is by default present
on the fields Start Date,
Item Effective Date, Contract
Length, and Minimum Term.

One-Time Charge Discount Subscription Billing - Calcu­ Calculates item One-Time ItemOne-TimeNetPrice
late Item One-Time Net Price net price from one-time = SUM(OneTimeChargeList­
from One-Time Charge charge. Price - OneTimeChargeList­
Price* OneTimeChargeDis­
countPercent/100)

Recurring Charge Discount Subscription Billing - Calcu­ Calculates item Recurring ItemRecurringNetPrice
late Item Recurring Net Price net price from recurring = SUM(RecurringChargeList­
from Recurring Charge charge. Price - RecurringChar­
geListPrice*RecurringChar­
geDiscountPercent/100)

One-Time Discount Percent Subscription Billing - Calcu­ Calculates one-time charge affectedChargesTotalList-
and any fields affecting the late One-Time Charge from from item One-Time discount
Price = SUM(OneTimeChar­
discount percent via calcula­ Item One-Time Discount Per­ percent.
geWithDiscountListPrice) -
tions cent
sum of one-time charge
list prices that could be
discounted. If affectedChar-
gesTotalListPrice is equal
to zero, an error message
displays, stating that all
one-time charges have fixed
prices and couldn’t be dis­
counted.

averageChargeDiscount =
item.ListPrice * item.Dis­
countPercent / affected-
ChargesTotalListPrice - Apply
averageChargeDiscount to all
one-time charges that can be
discounted.

SAP CPQ Setup and Administration Guide


312 PUBLIC Quotes Administration
Quote Field Calculation Description Formula

Recurring Discount Percent Subscription Billing - Calcu­ Calculates recurring charge affectedChargesTotalMr-
late Recurring Charge from from item Recurring discount
cListPrice
Item Recurring Discount Per­ percent.
= SUM(RecurringCharge­
cent
WithDiscountListPrice) - sum
of recurring charge list
prices that could be dis­
counted. If affectedCharges-
TotalMrcListPrice is equal
to zero, an error message
displays, stating that all
recurring charges have fixed
prices and couldn’t be
discounted.

averageChargeDiscount
= item.MrcListPrice
* item.MrcDiscountPer­
cent / affectedChargesTo-
talMrcListPrice - Apply aver­
ageChargeDiscount to all re­
curring charges that can be
discounted.

In Quote Fields and Calculations, calculations for those SubscriptionItem fields that contain them should be set
in the following order:

Field Order of Calculations

Start Date Subscription Billing - Calculate end date from start date and
months

Item Effective Date Subscription Billing - Calculate end date from start date and
months

Contract Length Subscription Billing - Calculate end date from start date and
months

Minimum Term Subscription Billing - Calculate end date from start date and
months

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 313
Field Order of Calculations

One-Time Charge Discount Subscription Billing - Calculate item One-Time net price
from one-time charge

Item One-Time Discount Amount (from One-Time Net Price)

Item One-Time Discount Percent (from One-Time Net Price)

Item One-Time Extended Amount

Total One-Time Net Price

Total Amount

Product Type One-Time Discount Percent

Product Type One-Time Discount Amount

Recurring Charge Discount Subscription Billing - Calculate item Recurring net price from
recurring charge

Item Recurring Discount Amount (from Recurring Net Price)

Item Recurring Discount Percent (from Recurring Net Price)

Item Recurring Extended Amount

Total Recurring Net Price

Total Recurring Amount

Related Information

Quote 2.0 Calculations [page 283]


Order of Calculations when Changing Quote Field Values [page 296]
Quote 2.0 [page 199]
SAP Subscription Billing Integration for Quote 2.0

5.2.4 Solution Design

The Solution Design feature enables users to organize items into sections and subsections in a separate tab on
quotes.

The Solution Design tab is just another view of the items that are already in the quote (if there are same items
in the new tab and the Quotation tab, they aren’t treated as duplicates but as the same and all changes made
on an item in either one of the tabs are applied to the same item in the another tab).

Also, the calculations are upgraded to cover sections as well - currently, section calculations are available only
for quote item custom fields.

This feature is available only in the Quote 2.0 engine.

SAP CPQ Setup and Administration Guide


314 PUBLIC Quotes Administration
Example

John is a sales lead in a furniture manufacturing company. The company applied to a call for tender for
furnishing a new business complex in Stockholm. The tender proposal contains more than 1000 items (chairs,
desks, coat hangers, and so on) that are distributed into 3 buildings, each with 11 floors and dozens of offices.
The tender documentation contains a tender proposal form in Excel with sections for each building and
subsections for floors and offices, respectively.

John uploads the Excel form in the Solution Design tab in SAP CPQ and the system creates sections in the
hierarchy indicated in the file. Afterwards, John indicates which sections and subsections can contain products
and inserts items either directly within the sections or from the quote.

Once the solution has been completed, John downloads it in an Excel file and submit it for the tender call
respecting the required form.

Managing Section [page 315]

Section Calculations [page 319]

Add and Allocate Products to Sections [page 321]


You can either add products to sections from the Solution Design tab or allocate items from the
Quotation tab.

Section Distribution [page 322]


A quote section can be distributed into other sections in the Solution Design tab.

Section Totals [page 325]


The sections grid in Solution Design contains a row for displaying the total value of each quote item
custom field whose type is currency and number. The row is added automatically to the grid, after you
create at least one section.

5.2.4.1 Managing Section

To enable users to create sections, you must first create a dedicated tab on quotes. Go to Setup General
Application Parameters Shopping Cart and Quotes and set the parameter Enable Solution Design to TRUE.
A new tab, Solution Design, is automatically displayed on quotes. Alternatively, you can create the tab manually,
using the implementation file (this file isn’t available by default. Contact the SAP CPQ Support team to enable
this for your tenant.)

You can create sections either in Excel or using the in-built tool Section Builder. For both workflows, you need to
have the Quote 2.0 engine enabled on your tenant and have the Solution Design tab created.

Create Sections Using Excel [page 316]


The ability to import sections through Excel allows users to handle multiple sections easily, with
minimal manual effort. This feature can be useful for handling tender documentation, when there’s
a predefined set of sections in an Excel file that you aren’t allowed to change. In that case, you can
upload the Excel with sections, populate them with products, handle the calculation and consequently
download the Excel with values for each section.

Create Sections using Section Builder [page 317]


The Section Builder is an SAP CPQ tool for manually creating sections.

Edit and Filter Sections [page 318]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 315
5.2.4.1.1 Create Sections Using Excel

The ability to import sections through Excel allows users to handle multiple sections easily, with minimal
manual effort. This feature can be useful for handling tender documentation, when there’s a predefined set of
sections in an Excel file that you aren’t allowed to change. In that case, you can upload the Excel with sections,
populate them with products, handle the calculation and consequently download the Excel with values for each
section.

Procedure

1. In the Solution Design tab on the quote, click Excel Template.

An Excel file is downloaded.

The file name contains the quote number. All cells are formatted as Text and the local formatting of Excel
files isn’t automatically applied.
2. Populate the file with this data:
• Hierarchy - the ordered number of sections and subsections
• Section Name - names of sections and subsections
• Can contain products (Yes/No) - populate with either 1, Yes or True each section to which you wish to
add products.
If there are quote item custom fields for which users have the editing rights, they also have a dedicated
column in the Excel and you can populate them with values.
• Can be distributed (Yes/No) - populate with either 1, Yes or True each section that you wish to
distribute.
• Solution Team - populate with the name of the team to which the section should be assigned. If the
team doesn't already exist in the system, it’s created automatically [page 327]. You can add multiple
teams if they’re separated by a comma. Also, each team must have a unique name.

 Tip

The first row in the Excel template is hidden and you shouldn't remove or change it in any way. The
row contains original names of quote item custom fields and the system updates those fields based
on their original names. Since quote item custom field names are unique in the system and their
translated names aren’t, if there are multiple fields with the same translated value, the correct field is
updated.

3. Click Excel Upload and select the populated template.

A grid displays in the tab.

Sections and subsections are created following the hierarchy in the template.

SAP CPQ Setup and Administration Guide


316 PUBLIC Quotes Administration
5.2.4.1.2 Create Sections using Section Builder

The Section Builder is an SAP CPQ tool for manually creating sections.

Procedure

1. In the Solution Design tab on the quote, click Section Builder.

An empty grid displays.


2. Click Add.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 317
3. Enter the label of the new section in the empty field.
4. Click Save.
5. (Optional) Add as many sections as needed.

There are additional settings for each section:

• - move a section to another section


• - add a subsection under the respective section
• - edit the section name
• - delete the section and all children subsections. The products in the deleted sections aren’t deleted
from the quote.
• Can contain products - select next to each section to which you want to enable adding products.
Alternatively, select all section in the column header.
• Can be distributed - select next to a section that you want to distribute to other sections. Alternatively,
select all section in the column header.
• Assigned to - click on the assign button and select the solution teams that have the rights to manage
the section. This option is available only when there is at least one solution team in the Teams tab.
6. Click Save.

Sections are created.

5.2.4.1.3 Edit and Filter Sections

To edit the existing sections and add new ones, click above the sections grid. To download sections in an
Excel file, click . The downloaded file contains the sections’ hierarchy, sections’ names and the quote item
custom columns.

The button allows users to update a single quote item custom field throughout multiple sections at once. The
update can be applied to all field types, but only one field can be updated at a time. After a field value is
updated, all calculations defined for that field are triggered as when changing the value manually.

 Note

The button for bulk update is enabled when there is at least one editable column in sections and after a
user has selected the sections in which the field is updated.

Filter Sections

Sections can be filtered by name (only the exact match returns results) and by the value of quote item custom
fields that administrators have marked for filtering (Use column value to filter quote items is selected on the
field in Setup). Also, users have the following options for filtering sections:

• Show only my sections - displays only the sections assigned to the team the user belongs to.
• Show Sections

SAP CPQ Setup and Administration Guide


318 PUBLIC Quotes Administration
• Regular - displays the sections that aren’t distributed to other sections, and which weren’t created
through distribution.
• Distributed - displays the subsections that were created when a section was distributed to other
sections.
• Distribution - displays the sections that can be distributed.
When all three options are either selected or deselected, all results are displayed.
• Hide product items - doesn’t display products in the filtered sections.
• Only sections with items - displays only sections that contain product items.

The logic between filter options is AND. After a filter is applied, only the sections that match the entered criteria
and their pertaining products are displayed. The applied filter is saved locally in the browser for a user and
quote. If that user opens the quote in another browser or reassigns the quote, the filter won’t be applied. Also,
different users on the same quote can apply different filters. The applied filters display in pills above sections
in the Solution Design tab and users can easily remove them, which refreshes the display of sections. Excel
download is available while filters are applied and, in that case, only the filtered sections are downloaded.

5.2.4.2 Section Calculations

Standard quote fields aren’t displayed in the Solution Design tab, but administrators can add quote item
custom fields and manage calculations for them. The prerequisite is to make the field visible on quotes in
Layout Permissions [page 282].

Create Section Calculation

1. Access Setup Quotes Fields, Calculations, Layout Fields and Calculations


2. Click Add New Field.
3. Fill out the fields [page 284]
4. Click Save.
The field is added to each group of fields (MainItemLineItem, ProductType, u, CartTotal and Sections).
5. In Sections, select the field you created.
Additional settings display on the right.
6. In Aggregate Type,, select the calculation that is performed on all items in sections.
The aggregate types are fixed in the system:
• Sun - the sum of all items
• Count - the total number of items
• Avg - the average value of all items
• Min - the minimum value of all fields
• Max - the maximum value of all fields
The system applies the aggregate function to all items in the section and subsections, calculates the
amount and displays the results in the section field.
7. Save the changes.
A section calculation is automatically created and it’s available in the list of all calculations.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 319
 Note

Reverse calculations aren’t enabled for sections. Consequently, a quote item custom field in a section can
either be made editable or you can select an aggregate type for it.

Trigger Section Calculations

The following procedure describes how to add a section calculation to the list of calculations that are triggered
every time an item is added and updated in the quote.

1. In Fields and Calculations, click Item Add/Update Calculations.


A list of calculations that are triggered whenever an item in the quote is added or updated displays on the
right.
2. Click Add calculation.

3. Click next to the new calculation.


All section calculations have Section after their label.
4. Close the window and save the changes.
The calculation is added.
5. In the Editing tab, make the quote item custom field editable in MainItem, LineItem, ProductType, and
CartTotal.
The calculation is set up.
After you change the value in the quote item custom field for an item on the quote, the system reapplies
the aggregate type to the new values, triggers the calculations, and displays a new value in the section row
in Solution Design.

SAP CPQ Setup and Administration Guide


320 PUBLIC Quotes Administration
On the user side, calculations are triggered every time users click outside the field they’ve edited. It isn’t
necessary to press the Enter button to run the calculations.

Custom Section Calculations

The following example shows you how to create a custom calculation that calculates a discounted value of a
quote item custom field in a section.

1. Create three quote item custom fields [page 284]:


• Sum - aggregate type Sum
• Discount_Percent - type Number
• Discount_Value - type Number
2. Add a custom calculation to the Discount_Percent field.

x = context.AffectedSection
x[“Discount_Value”] = x[“Sum”] * x[“Discount_Percent”] / 100;
3. Save the changes and open the Solution Design tab in a quote.
The Sum column is populated with values for each item and a summed up value displays in the section
field. If you change the percent in the Discount_Percent field, and refresh the section, the Discount_Value
field is populated with the new discounted values.

Related Information

Fields and Calculations [page 284]


Managing Section [page 315]
Section Distribution [page 322]
Section Totals [page 325]

5.2.4.3 Add and Allocate Products to Sections

You can either add products to sections from the Solution Design tab or allocate items from the Quotation tab.

The following procedure describes adding products within a section:

1. Click next to a section.


A search field displays.
2. Enter the name of the product.
3. Click Configure or Add next to the product in the list.
The options vary depending on whether the product is simple or configurable.
The product is either automatically added to the section or you’re redirected to the configurator to first
configure it.

4. Alternatively, click to browse the product catalog for a product.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 321
The product is added to both the section and the quote.

Next to each item on quotes, there’s the icon for allocating items. After clicking on the icon, you can find the
section to which you want to allocate the item. Once an item is allocated, the icon is grayed out, but you can
always click on it again and change the section.

Products in sections have the icon displayed next to them. Clicking the icon opens a dropdown list with
actions that users can perform on a product:

• make a copy of the product in the same section and also on the quote
• delete the product from the section and from the quote
• edit the product so that the changes are applied in both the section and on the quote - if you’re editing
line items, they are automatically removed from the section. You need to go back to the quote and allocate
them to the section again.
• refresh the product so that all settings from the quote are applied on that product in the section -
recommended when handling calculations in the Quotation tab.
• move the product to a different section
• remove the product from the section

5.2.4.4 Section Distribution

A quote section can be distributed into other sections in the Solution Design tab.

When the distribution is initiated, a new distributed section is created in each section to which the source is
being distributed. The value of the distributed section is split between the target sections as indicated in the
distribution method [page 322].

To be able to distribute a section to other sections, you first need to enable the distribution for it either in the

Section Builder or the excel file when creating/editing a section [page 315]. Consequently, the button
displays in the Solution Design tab, next to the section that can be distributed.

Distribution Methods [page 322]

Distribute a Section [page 324]

5.2.4.4.1 Distribution Methods

A distribution method defines how the values from the source section are distributed to target sections.
You can either create a custom calculation in Setup Quotes Fields, Calculations, Layout Distribution
Calculations or manually enter the percentages. There’s also the Split Evenly action that distributes the
section evenly to the target sections. When applying a custom distribution method, every time you make a

change (for example, change the price of an item), you should click and the values are redistributed
according to the distribution method. The Redistribute action is above the section grid, next to other section
actions. The action is available only when there are sections selected for distribution in the Can be distributed
column and there is a custom distribution method applied.

SAP CPQ Setup and Administration Guide


322 PUBLIC Quotes Administration
Example

The following calculation method is selected for distributing a section when users want to keep the same ratio
in the sections that are distributed as between target sections.

itemsToBeDistributed = context.Quote.GetSectionItems(context.Source)
sumOfItems = 0
for item in itemsToBeDistributed:
sumOfItems += item["Wholesale_Price"]
targetSum = 0
for target in context.Targets:
targetSum += context.Quote.GetParentSection(target)["Wholesale_Price"]
for target in context.Targets:
target.DistributionPercent = context.Quote.GetParentSection(target)
["Wholesale_Price"] / targetSum *100
for target in context.Targets:
for section in context.Quote.GetSectionAndHisAncestors(target.SectionPath):
section["Wholesale_Price"] += sumOfItems * target.DistributionPercent /
100
context.Source["Wholesale_Price"]-=target["Wholesale_Price"]

Before Distribution

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 323
After Distribution

5.2.4.4.2 Distribute a Section

Prerequisites

To have a distribution method created in Setup Quotes Fields, Calculations, Layout Quote Fields and
Calculations .

Context

Only a section that has a calculation of the aggregate type Sum can be distributed. Sections with other
aggregates types can’t be distributed. The Retract action removes the distributed sections from the target
sections.

SAP CPQ Setup and Administration Guide


324 PUBLIC Quotes Administration
Procedure

1. Click next to a section.

The Distribution Section modal pops up, displaying these fields:

• Select section to distribute - the field is grayed out and it displays the name of the field that is being
distributed. If multiple sections are selected, you should select in this field one section at a time and
manage other fields in the pop-up.
• Distribution Method - list of custom distribution calculations. Additionally, the Manual method is the
default value. If this method is selected, you’ll be able to set up the percentages according to which the
value of the source section is distributed to target sections.
2. Click next to Distribute to.
3. Click the empty field and the available target sections are displayed (all the sections that aren’t enabled for
distribution).
4. Select one section.
5. Repeat the previous steps to add other target sections.
6. Click Split Evenly.

New subsections are added to target sections, one level below the target sections.

The value of the source section is evenly split between the target sections.

You can change the percentage manually and remove the target section by clicking .

5.2.4.5 Section Totals

The sections grid in Solution Design contains a row for displaying the total value of each quote item custom
field whose type is currency and number. The row is added automatically to the grid, after you create at least
one section.

Enable Section Totals

You can select one of the predefined calculations or create a custom calculation for calculating the section
totals.

Prerequisite: to have the sections set up in Solution Design [page 315].

1. Go to Quotes Quote Fields and Calculations .


2. Under the tab,Field and Calculations expand Sections.
3. Select a quote item custom field.
4. In Total Calculation Type, select one of the predefined types:
• None – selected by default. No calculations are applied if this option is selected and - - displays in the
empty cell in the quote.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 325
• Sum - the values of all parent sections are summarized.
• Average – the average value of all parent sections is calculated and displayed in quote.
• Custom – enables creating a custom calculation for calculating all quote item custom fields. The script
can be created in the Custom Total Calculation pop-up under Section Fields.
5. Click Save.

Custom Total Calculations

If you need a calculation more complex than the standard calculations Sum and Average, you can write a script
for calculating the section totals in Custom Total Calculation under Section Fields.

 Note

There can only be one script that calculates custom total calculations for all fields (you can’t create a
separate script for each field).

Custom calculations are triggered after standard section total calculations, so if you write a new calculation
formula for a field for which you’ve already selected a standard calculation (SUM or AVERAGE), the custom
calculation will override it.

In the History tab in Custom Total Calculation, you can view all the versions of scripts created up to that
moment. If needed, you can also compare the scripts.

 Tip

The methods available for managing section totals via scripting are described in the Scripting Help.

5.2.5 Quote Teams

Grouping users into teams enables parallel work on one quote and allows quote owners to assign quote
sections to different teams.

Quote owners create administrator teams that manage sections and assign users to solution teams. Each
solution team has access only to the sections assigned to it. Consequently, multiple teams can work on the
same quote and on different sections at the same time, without altering each other's work.

The hierarchy of teams on quotes, based on their rights, is as follows:

• Quote Owner - the default user with maximum rights. Only quote owners can create administrator teams
and they can also create solution teams.
• Administrator Team - unlike the solution team users, administrator team users can create, edit, and delete
sections. Administrator teams create solution teams, add users to teams, and assign teams to sections.
There can only be one administrator team per quote.
• Solution Team - a group of users that can be assigned to a section. Only members of a team assigned to
a section have access rights to it. Users in the team assigned to a parent section don’t have access to its
subsections. The users in this team can’t add any new teams, nor can they edit the existing ones. They can
only view the grid with the existing teams.

SAP CPQ Setup and Administration Guide


326 PUBLIC Quotes Administration
Quote teams can be managed in the Teams tab. You can create and manage tabs as any other tab in SAP CPQ
[page 397], however, you should use the /quotation/Teams implementation file. By default, this tab is visible to
all permission groups in all quote statuses.

Assign Section to Team [page 327]


You can assign sections to teams in the Solution Design tab.

Create Teams [page 327]


Users can create teams either through the Excel template for creating sections (Solution Design tab),
or in the Teams tab.

5.2.5.1 Assign Section to Team


You can assign sections to teams in the Solution Design tab.

Here are some facts and limitations that you should keep in mind when assigning sections:

• by default, sections aren’t assigned to any teams.


• a section can be assigned to one or multiple teams.
• a section can have multiple teams assigned to it.
• if a section isn’t assigned to any team, all users can manage it.
• a quote owner must be a member of a solution team to be able to edit and distribute a section.
• the mass assign button is visible only when multiple sections are selected.
• team members have access only to the section assigned to them, not to the section's pertaining
subsections.
• if a user upgrades products to a new version, all products that have a new version is upgraded, regardless
of their sections and whether the user has access to those sections.
• when copying quotes, all teams in the Teams tab and their assignments are copied.

5.2.5.2 Create Teams


Users can create teams either through the Excel template for creating sections (Solution Design tab), or in the
Teams tab.

Teams that are created through the Excel template for creating sections [page 316] are without members, and
the assigned user shoud add other members to the team following the procedure below.

By default, the tab contains a grid with the quote owner's name and the role. The following procedure describes
the steps for creating an administrator team, but they apply to creating a solution team as well.

1. Click Add.
The Add Team modal displays.
Party Role is automatically populated with Administrator Team.
2. Define the name of the team.
3. Find users for the team in the Team Users search field.
Enter the name or the email of the user and the system offers matching results.
You can add both users from the same company as yours or from a different company to the team.
However, inactive and blocked users aren’t available to be added to a team.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 327
4. Click Add.
The team details display in the Teams grid.
You can edit them by clicking on the team name. Also, you can delete a team and view the team members
by clicking and , respectively.
After teams are created, you can assign quote sections to them [page 327].

 Note

If a user is a member of a team on a quote, that quote displays in the My Quotes tab.

5.2.6 Filtering Items in Quote 2.0

Quote Filtering allows users to filter out quote items by specific values in quote item custom fields and in some
standard SAP CPQ fields (Part Number, Product Type and Product Name). Filtering is available only in Quote
2.0.

After you allow filtering for a quote item custom field and users select or enter a value in that field on the quote,
the system can filter out only the items that have a specific value in the quote item custom field. To enable this,
users need to enter the field value as a filter criterion in Filter Items.

 Note

You can search for quotes using multiple statuses in the filter.

Setup

To enable filtering per quote item custom fields, you need to make the following adjustments in the Setup:

• Create a quote item custom field [page 391] and select Use column value to filter quote items. Filtering is
supported for all field types.
• Select the quote item custom field in Quote Layout [page 394].
• Make the quote item custom field visible to users in Quote Layout Permissions [page 394].

User Side

The Filter Items button opens the Filters pop-up with the filtering criteria. All quote item custom fields that are
enabled for filtering are displayed in the pop-up. Depending on the type of the quote item custom field, users
can enter, pick a value, or set a range of minimum and maximum values. The logic between multiple filters is
AND.

Users should follow the search logic described below when entering search criteria in standard SAP CPQ fields:

• Part Number - enter the exact value or use % to expand the search (for example, AB23% filters all quote
items whose part number starts with AB23).

SAP CPQ Setup and Administration Guide


328 PUBLIC Quotes Administration
• Product Type - start typing and the system will offer matching types.
• Product Name - enter the exact product name or expand the search with % (for example, Manuf% filters all
quotes whose product type starts with Manuf).

A filter remains applied on a quote as long as it’s opened in the same browser. The first time the user opens it in
a different browser, the filter is refreshed. The filter is visible on the quote only to the user who applied it.

If a filter is applied, the filtering criteria is visible above the list of items and the total number of filtered items is
displayed on the right.

If users manage sections in the Solution Design tab, they’ll have the following two checkboxes available:

• Show Only Unallocated Products - filters only the items that aren’t allocated to any sections.
• Show only products assigned to my sections - filters the items that are allocated to the section to which the
user has rights.

Additional Restrictions

• Even if you enable filtering for a quote item custom field, if the field isn’t visible for a user, they can’t apply
the field’s values as filters on the quote.
• When a quote with applied filter is copied and a new revision is created, the filter isn’t applied.
• Filters are available on quotes in the view mode, when the user has no rights to perform any actions on the
quote.

5.2.7 Scripting for Quote 2.0

The Quote 2.0 scripting is event-based which adds to the performance of the system when working with
complex scripts.

After triggering an action in Quote 2.0, the system triggers an event that retrieves only the context of
avilable objects that are relevant for that specific action. Every event has the quote object in context
(context.Quote). Other available objects depend on the event that was raised. Consequently, you can handle
only the part of the quote that is available in the context of that event. This boosts the performance of the
entire system when executing complex scripts.

The scripting for Quote 2.0 is different from the scripting for Quote 1.0, primarily because it's event-based and
the logic is different. Consequently, if you wish to migrate from the old quote engine to the new one, you’ll have
to adjust your scripts because most of them won't fit to Quote 2.0 logic.

 Note

Methods and properties for Quote 2.0 are listed under Scripting.Quote in the scripting documentation.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 329
Supported Variables

The global scripting scope is created for Quote 2.0 with these variables:

• User
• WebServiceHelper
• Session
• FederationUtility
• ScriptExecutor
• LogTrace
• SqlHelper
• XmlHelper
• RestClient
• UserPersonalizationHelper
• FileHelper
• Translation
• Assert

This scope is independent from Quote 1.0. Global scope is accessible without a prefix. For example,
User.FirstName / Trace.Write('test').

Event scopes should have a context prefix and contain variables that are specific for appropriate scopes. For
example, context.Quote.DateModified

Quote variable is removed from configurator events (you can’t call quote context from the configurator). To
read quote data from the configurator, you should use CTX tags. Additionally, you can’t write data in the quote
from the configurator. You can retrieve the quote comment via context.Quote.Comment, but you can’t insert
the comment using context.Quote.Comment = ‘Test Comment’.

 Note

context.AffectedItems fetches all items that the user changed on quote. For example, if the user
changes the discount for three out of 10 items on the quote, context.AffectedItems fetches those
three items.

Unsupported Variables

The following variables aren’t currently supported for the Quote 2.0 scripting:

Scope Variables

Global TagParserProduct

TagParserQuote

CRM MSCrmServiceContext

MSCrmService

SAP CPQ Setup and Administration Guide


330 PUBLIC Quotes Administration
Scope Variables

MSCRMOpportunityId

MSCRMUserId

SalesforceProxy

SFEnvironment

NsEnvironment

Some variables that were in the global scope in Quote 1.0 are moved to event-specific scopes in Quote 2.0:

• Quote
• Product
• CustomerHelp
• SAP
• TechnicalDocumentation

TABLE Tag and SqlHelper

You should avoid fetching any Quote 2.0 data directly from the database since the quote object may have
different states while processing the user action. For example, fetching the number of items in the quote while
adding a single item to the quote:

clr.AddReference('System.Core')
import System
clr.ImportExtensions(System.Linq)
result = SqlHelper.GetFirst ('select count(*) as Count from sys_QuoteItem where
QuoteId = {}'.format(context.Quote.Id))
Trace.Write(result.Count) # 0 since quote has not been saved yet
Trace.Write(context.Quote.GetAllItems().Count) # 1 since there is one item in
memory that will be saved at the end of the processing pipeline.

Scripting Examples

In Quote Fields and Calculations you can create basic scripts that are triggered either after a value in a quote
field is changed, after an item is added to a quote or when an item is updated.

• The following custom calculation sets the default discount to 10% when items are added/updated:

for item in context.AffectedItems:


item.Discount = 10

• This script updates the quantity of the maintenance item so it matches the total number of items in the
quote. This calculation should be triggered before extended list price is calculated.

maintenance = context.Quote.GetItemByItemNumber(1)
for item in context.AffectedItems:
maintenance.Quantity += 1
#add maintenance item to affected items so that the rest of the
calculations run for this item as well

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 331
context.AffectedItems.AddItem(maintenance)

If you want to default the item discount based on the DiscountLevel attribute value in Quote 1.0, you should
write:

sender.DiscountPercent = GetDiscountForLevel(Product.AttrVal('DiscountLevel'))

In Quote 2.0, you can write:

for item in context.Items:


item.DiscountPercent =
GetDiscountForLevel(context.Product.AttrVal('DiscountLevel'))

5.2.8 Business Partners

Business partners of an organization are all the entities that have business relations with that organization.

The following sections explain business partners, partner functions and involved parties in more detail. The
sections also contain how-to instructions for creating these entities and provide all the relevant details for using
involved parties on quotes.

What are Business Partners and Partner Functions? [page 333]


The Business Partners is the default functionality for managing customers and other involved parties in
quotes in the Quote 2.0 engine.

Involved Parties and Customers – Differences [page 333]

Create Business Partner in SAP CPQ [page 337]


Business partners are created and managed in a dedicated section in the Setup by administrators with
enabled access rights for this feature.

Create Business Partner in External Systems and Import into SAP CPQ [page 341]
Business partners can be created in external systems and imported into SAP CPQ. In such a case, the
external system is the master for business partners.

Create Partner Function in SAP CPQ [page 342]


Partners functions are managed on the dedicated page in the Quotes section. There are some partner
functions which are available by default, so before you start creating a partner function, check to see if
it’s already there.

Create Partner Functions in External Systems and Import into SAP CPQ [page 343]
Partner functions can be created in external systems and imported into SAP CPQ. In such a case, the
external system is the master for partner functions.

Synchronize Business Partners and Partner Functions [page 344]

Involved Parties [page 344]


The Involved parties tab is where users choose partner function and choose or add business partners
to create an involved party. An involved party on a quote is a business partner matched with the partner
function they perform on the quote.

Business Partner Bulk Import/Export [page 347]

SAP CPQ Setup and Administration Guide


332 PUBLIC Quotes Administration
5.2.8.1 What are Business Partners and Partner Functions?

The Business Partners is the default functionality for managing customers and other involved parties in quotes
in the Quote 2.0 engine.

Business partners of an organization are all the entities that have business relationships with that organization.
A business partner can be an organization, a person, a group of organizations, a group of persons, and so on.
Typically, the business partners of an organization or company are customers, vendors, employees, contact
persons, organizational units, and so on.

Partner functions determine how a certain business partner is related to a transaction. The most common
partner functions are Sold-To Party (entity to which goods are being sold), Ship-To Party (entity to which goods
are being shipped), Payer (entity responsible for payment), Bill-To Party (entity to which invoice is issued), and
so on.

Partner functions are assigned to quotes, and business partners are, on their end, assigned to partner
functions based on their involvement in the transaction made via quote, sales order, contract, opportunity,
and so on. By assigning a business partner to a partner function, the SAP CPQ user creates an involved party.
This way, it is possible to track, from a legal and business perspective, all the parties that have participated in a
business transaction. Partner functions essentially show how a business partner is involved in a transaction.

Example

A Jamie Peters is the recipient of the goods sold through a quote. The SAP CPQ administrator creates the
business partner Jamie Peters, while the partner function Ship-to party is already in the system, created by
default when the Business Partner feature is enabled. On the quote, the user creates a new involved party by
selecting Jamie Peters from the list of existing business partners and Ship-to party from the list of partner
functions.

Related Information

Involved Parties [page 344]


Quote 2.0 [page 199]

5.2.8.2 Involved Parties and Customers – Differences

The Customers [page 544] feature has been replaced with Involved Parties in Quote 2.0 primarily to streamline
the integration flow between SAP CPQ and other SAP products that already have Business Partners up and
running. Business partner data can easily be maintained and transferred between SAP CPQ and all other SAP
systems involved in the sales cycle. Additionally, the overall efficiency of the development and implementation
of SAP CPQ is improved with Business Partners.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 333
Involved Parties in Quote 2.0 and Customers in Quote 1.0

Both Customers [page 544] and Involved Parties are available in SAP CPQ, but their availability depends on the
quote engine:

• The old quote engine currently uses and will continue to use only the Customers feature (as Quote 2.0
will become the default quote engine in the future, Involved Parties and similar new features won’t be
developed for the old engine).
• All Quote 2.0 tenants created after the 2011 release (November 2020) by default only have Involved
Parties.
• Existing clients with the Quote 2.0 engine will continue to use the Customers feature until they migrate the
existing customer data to Business Partners. For more details on the migration procedure and how we will
assist you during the transition, please contact the SAP CPQ Support team. Please have in mind that the
Involved Parties won't show by default in these tenant until the SAP CPQ Support team enables it.

Related Information

Involved Parties [page 344]


Quote 2.0 [page 199]

5.2.8.2.1 Migrate Customers to Involved Parties in Quote


2.0

The two quote engines in SAP CPQ use different features for recording and managing business relationships
on the quote. Quote 1.0 uses Customers and Quote 2.0 uses Involved Parties. However, clients who have been
using the Quote 2.0 engine before the release of SAP CPQ version 2011 (November 2020) have also been using
the Customers feature up to that point.

 Note

In the first quarter of 2023, the Customers feature will be obsolete and replaced by the Business Partners
feature in existing Quote 2.0 tenants. To be able to use your data uninterruptedly after the first quarter of
2023, you need to migrate customers to business partners.

In the SAP CPQ release 2011 we have released Involved Parties, which consequently lead to existing clients on
Quote 2.0 needing to migrate their customer data to involved parties and make additional related adjustments
throughout SAP CPQ. However, SAP CPQ Support team first needs to enable the Involved Parties feature on
your teanant (it won't show by default) so you could proceed with the migration. This guide is meant to provide
guidance on the migration process.

 Note

Involved Parties are the default engine for all new tenants using Quote 2.0. In Quote 1.0 Customers will
continue to be the only feature and Involved Parties will not be implemented. [page 333]

SAP CPQ Setup and Administration Guide


334 PUBLIC Quotes Administration
Involved Parties in SAP CPQ

As part of the Involved Parties concept in SAP CPQ, we have introduced business partners and partner
functions.

Business partners of an organization are all the entities that have business relationships with that organization.
Partner functions determine how a certain business partner is related to a transaction. This page explains in
more details business partners and partner functions. [page 333]

Administrators create business partners and partner functions either in SAP CPQ or they import them from an
external system as explained in the following pages:

• Create Business Partner in SAP CPQ [page 337]


• Create Business Partner in External Systems and Import into SAP CPQ [page 341]
• Create Partner Function in SAP CPQ [page 342]
• Create Partner Functions in External Systems and Import into SAP CPQ [page 343]

For importing business partners and partner functions, and for data synchronization, use the following APIs:

• Quotes API
• GET /api/v1/quotes/{quoteId}/involvedParties
• DELETE /api/v1/quotes/{quoteId}/involvedParties/{involvedPartyId}
• PATCH /api/v1/quotes/{quoteId}/involvedParties/{involvedPartyId}
• POST /api/v1/quotes/{quoteId}/involvedParties/{partnerFunctionKey}
• Business Partners
• Partner Functions

On the user side, there’s the Involved Parties tab dedicated to maintaining and managing involved parties.
There, users can create involved parties with a new business partner [page 346] or with an existing business
partner [page 345], they can also edit and delete business partners [page 347].

The involved parties have their set of dedicated document generation tags [page 176] and CTX tags [page 731].

Also, new methods are available in scripting for managing involved parties, business partners and partner
functions. This is the home page of scripting documentation. Search it by involved parties, business partners
and partner functions to check for methods.

Migration Overview

In this section, you can find a list of all areas and features in SAP CPQ that need to be revised and adjusted
when migrating from Customers to the Involved Parties concept.

Quotes

• Data Migration
To migrate data from the Customer tab to the Involved Parties tab, the SAP CPQ product team will work in
coordination with customers and partners.
• Document Generation Templates
The existing customer tags should be replaced by the relevant involved parties tags [page 176].

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 335
• Quote and Custom Tables
All quote tables and custom tables that are related to customers need to be aligned with the Involved
Parties concept.
• Quote List Column Headings
This feature is currently not supported for involved parties.
• Customer Custom Fields
Currently, SAP CPQ doesn’t have an option to create involved parties custom fields.

Customers
• Master Data Synchronization
To synchronize involved parties data, use these APIs:
• Quotes API
• GET /api/v1/quotes/{quoteId}/involvedParties
• DELETE /api/v1/quotes/{quoteId}/involvedParties/{involvedPartyId}
• PATCH /api/v1/quotes/{quoteId}/involvedParties/{involvedPartyId}
• POST /api/v1/quotes/{quoteId}/involvedParties/{partnerFunctionKey}
• Business Partners
• Partner Functions
• Custom Fields
Currently, SAP CPQ doesn’t have an option to create involved parties custom fields.

Scripting
All scripts that are related to customers should be adjusted to fit the involved parties concept. This refers
to global scripts, product scripts, custom actions, custom calculations and responsive templates. This is the
home page of scripting documentation. Search it by involved parties, business partners and partner functions
to check for methods.

Formulas
All formulas that are used in rules and conditions, and are related to customers, should be adjusted to use the
CTX tags specific to involved parties. [page 731]

Workflow
The Required Fields by Workflow Actions [page 475] page in Setup is changed to contain the active partner
functions. When you migrate from Customers to Involved Parties, you should make sure to select which fields
are required for partner functions, as you did for customers.

Salesforce Integration

If you’re using SAP CPQ in integration with Salesforce, you need to change mappings in Setup CRM
Integration Partner Functions Mapping . When Customers feature is used, mapping is handled in the
Customer Roles Mapping page.

Related Information

Quote 2.0 [page 199]

SAP CPQ Setup and Administration Guide


336 PUBLIC Quotes Administration
Involved Parties [page 344]

5.2.8.3 Create Business Partner in SAP CPQ

Business partners are created and managed in a dedicated section in the Setup by administrators with enabled
access rights for this feature.

Procedure

1. In Setup, go to Business Partners Business Partners .


2. Click Add New Business Partner.

A page with General and Permissions tabs displays.


3. Fill out the fields in the General tab as explained in Business Partners General Fields [page 337] table.
4. (Optional) If business partner custom fields [page 339] have been created, fill them out in the Custom
Fields tab.
5. Save the changes.

The business partner is created.

 Note

You can manage the permissions for business partners in the Business Partner Permissions [page 341]
section. Before any business partner permission rules are defined, no business partners are accessible
to any users.

Related Information

Involved Parties [page 344]


Create Business Partner in External Systems and Import into SAP CPQ [page 341]

5.2.8.3.1 Business Partners General Fields

The following table describes the mandatory and optional general data for maintaining a business partner.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 337
Field Description

Name (required) The name of the business partner, as it will display on the
quote. This can be the name of an organization or the name
of a person.

System ID (required) Generated automatically from the business partner name


and the addition _cpq.

Be careful when changing the value of System ID as it will


be is used for matching business partners in the source
and target environments in the deploy/send process.
The Deploy/Send feature is currently not supported for
Business Partners.

External ID It is populated automatically when the business partner is


sent via the API to SAP CPQ or when it is imported from
external systems. The external ID shouldn’t be changed
manually on the business partner in SAP CPQ unless the
ID is also changed in the external system. The external ID is
replicated successfully only if the business partner has the
Customer role defined.

First Name The first name of the contact person. If the business
partner is an organization, then this should be the first
name of the contact person of the organization.

Last Name The last name of the contact person. If the business partner
is an organization, then this should be the last name of the
contact person of the organization.

E-Mail E-mail address of the business partner.

Telephone The phone number of the business partner.

Fax The fax number of the business partner.

Address 1 (required) The primary address of the business partner.

Address 2 The secondary address of the business partner.

City The city of the business partner.

ZIP Code The ZIP code of the city of the business partner.

Region The region of the business partner.

Country/Region The country or region of the business partner.

State The state of the business partner.

Time Zone The time zone of the business partner.

VAT Number The value added tax identification number of the business
partner.

Tax Number 1 The primary taxpayer identification number of the business


partner.

Tax Number 2 The secondary taxpayer identification number of the


business partner.

Bank Account 1 The primary bank account of the business partner.

SAP CPQ Setup and Administration Guide


338 PUBLIC Quotes Administration
Field Description

Bank Account 2 The secondary bank account of the business partner.

Business Partner Type A business partner can be an Organization or a Person. A


descriptive piece of information.

Primary Industry The industry in which the business partner is active. A


descriptive piece of information.

Related Information

Involved Parties [page 344]


Create Partner Function in SAP CPQ [page 342]

5.2.8.3.2 Business Partner Custom Fields

You can create custom fields on business partners, which display on involved parties on the quote and in
business partner master data.

Business partners can be used for a variety of custom, business-specific purposes. An example of such a
purpose is sorting your customers into categories such as Gold, Platinum, or VIP.

Once it is defined in the Setup, a business partner custom field is automatically present on all business
partners, involved parties in the Involved Parties tab on the quote, and in business partner master data.
However, you can manage the values for that field as they pertain to specific business partners, as well as the
permissions and visibility rules for that field.

You can reference business partner custom fields using CTX tags [page 176], and read and update them via
IronPython scripting.

Create Business Partner Custom Field

1. Go to Setup Business Partners Business Partner Custom Fields .


2. Click Add New Custom Field.
The definition page opens.
3. In the General tab, fill out the required fields and make the necessary selections:
1. Name (required) – the unique name of the custom field.
2. Label (required) – the label displayed for that custom field on the quote. Translations are created in
dictionaries for labels, and not names.
3. Suppress Information Logging – by enabling this option, you prevent the logging [page 804] of old and
new values of this custom field.
4. Type – select a type for the business partner custom field:

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 339
Type Description

Text Text up to 1000 characters can be entered in the field.

Number Numeric values can be entered in the field.

Date The field contains dates and provides a date selection


calendar.

Attribute If Attribute is selected, a new field appears where you


can select an attribute from a list. Only attributes with
the type User Selection can be selected for business
partner custom fields.

Boolean You can choose between the values Yes and No using a
toggle switch.

4. In the Permissions tab, manage the permissions for the busines partner custom field:
1. If the option Same permission for all permission groups is enabled, the same permission level for
this field applies for all permission groups. In that case, you can select a Field permission: Hidden,
Read-Only, or Editable. When you first create a business partner custom field, the toggle switch is
enabled, and the field permission Hidden is selected by default.
2. If the option Same permission for all permission groups is disabled, you can assign the permissions
Read-Only or Editable to specific permission groups.
5. Click Save.
The business partner custom field is now created. It will appear on all business partners in the Setup and
on involved parties on the quote.

Enter Value for Business Partner Custom Field

1. Go to Setup Business Partners Business Partners .


2. Click Add New Business Partner or, alternatively, edit an existing business partner.
3. In business partner definition, open the tab Custom Fields.
Every defined business partner custom field displays in this tab.
4. Enter or select a value for a business partner custom field.
5. Click Save.
After you save your changes, whenever this business partner is used on the quote as part of an involved
party, the business partner custom field appears with the value you specified in the Setup.

 Note

The value you enter for a business partner custom field in the Setup displays on the quote by default
whenever that field appears. However, if a user has the permission to edit a business partner custom field,
they can overwrite that value on the quote or enter a new value. The values which the user enters directly
on the quote apply only to the quote in question.

 Note

You can manage business partner custom fields via the API. Learn more in the API documentation .

SAP CPQ Setup and Administration Guide


340 PUBLIC Quotes Administration
5.2.8.3.3 Business Partner Permissions

You can create rules to define which users have the permissions to access and edit business partners.

 Note

Before any business partner permissions are defined, no business partners are visible to any users. An easy
way to make all business partners available to all users is to create a rule in which you will select all available
permission groups and enable the switch All business partners are visible to selected groups.

1. Go to Setup Business Partners Business Partner Permissions .


2. Click Add New to create a new rule.
3. In Name, enter a name for the rule.
4. Enable the Active switch to make the rule active in the system.
5. Move the permission groups which the rule is going to affect from available to selected.
6. Enable the switch All business partners are visible to selected groups to make all business partners visible
to the groups selected in the previous step.
Alternatively, if you disable the switch, the Visibility conditions fields display, where you can create a more
complex rule.
7. Under Visibility conditions, create a rule to define the conditions under which business partners are visible
to the selected groups.
For example, you can create the following formula to make sure that a logged-in user belonging to a
selected permission group can only access business partners from their own country: Country Equals
<* CU_INFO(COUNTRY_ABBREVIATION) *>
8. Click Save.
Users will now be able to access business partners on the quote in the way that you have defined in this
rule.

5.2.8.4 Create Business Partner in External Systems and


Import into SAP CPQ

Business partners can be created in external systems and imported into SAP CPQ. In such a case, the external
system is the master for business partners.

To import business partners from external systems into SAP CPQ, use the following APIs:

• Business Partners

Related Information

Involved Parties [page 344]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 341
5.2.8.5 Create Partner Function in SAP CPQ

Partners functions are managed on the dedicated page in the Quotes section. There are some partner
functions which are available by default, so before you start creating a partner function, check to see if it’s
already there.

Context

 Note

The following partner functions come out-of-the-box with the Business Partner feature: Sold-to part, Ship-
to party, Bill-to party, Payer, Contact person, and Sales representative.

Procedure

1. In Setup, go to Quotes Partner Functions .


2. Click Add new partner function.
3. Fill out the fields as described in the following table.

Field Description

Name (required) The name of the partner function, as it will display on


quotes.

Key (required) The unique identifier of the partner function, input type
string, usually four characters. Used for mapping partner
functions between SAP systems.

Valid From The date after which the partner function is available in
the Involved parties tab.

Valid To The date until which the partner function is available in the
Involved parties tab.

Show by default on new quotes If enabled, the partner function will be added to the
Involved parties tab by default on all new quotes.

Can be used only once on quote If enabled, the partner function can’t be reused in the
Involved parties tab (for example, you can’t have two Ship-
to party functions.)

4. Save the changes.

The partner function is created.

Translate Partner Function [page 343]


The name of a partner function can be translated to any of the system languages.

SAP CPQ Setup and Administration Guide


342 PUBLIC Quotes Administration
5.2.8.5.1 Translate Partner Function

The name of a partner function can be translated to any of the system languages.

Procedure

1. In Setup, go to Quotes Partner Functions .

2. Click next to the partner function you want to translate.

A submenu displays.
3. Click Translate this item.

The Translate Partner Function page displays.

The Partner Function Information contains the name of the partner function as defined in Setup, and the
partner function value in the default language.
4. Click Add New Translation.
5. Find the target dictionary in Dictionary.
6. Enter the translation in Translation value.
7. Click Save.

The name of the partner function is translated to the selected language.

Next Steps

When the target language is selected as user’s language, the translated value displays in quotes. In the list of
partner functions in Setup, the name of the partner function always displays how it was defined, not translated.

Related Information

Involved Parties [page 344]

5.2.8.6 Create Partner Functions in External Systems and


Import into SAP CPQ

Partner functions can be created in external systems and imported into SAP CPQ. In such a case, the external
system is the master for partner functions.

To import partner functions from external systems into SAP CPQ, use the following APIs:

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 343
• Partner Functions

Related Information

Involved Parties [page 344]

5.2.8.7 Synchronize Business Partners and Partner


Functions

Since involved parties are used in other SAP systems, it is possible to synchronize business partners and
partner function data between SAP CPQ and those other systems. In that case, the external system holds the
master data which is being replicated in SAP CPQSAP CPQ.

To enable data synchronization, you should use the following APIs:

• Quotes
• Business Partners
• Partner Functions

5.2.8.8 Involved Parties

The Involved parties tab is where users choose partner function and choose or add business partners to create
an involved party. An involved party on a quote is a business partner matched with the partner function they
perform on the quote.

The prerequisite for managing involved parties on the quote is to create the Involved parties tab following this
procedure [page 397]. The tab is empty if there are no partner functions selected to be added by default on the
quote.

The icons on the right side, above the grid, allow users to manage the involved parties:

• - add an involved party.

• - delete the selected involved party.

• - choose from the list of available columns those that are visible in the grid.

Create Involved Party with an Existing Business Partner [page 345]


A partner function is a mandatory minimum field in an involved party. This means that an involved party
must contain a partner function, but it doesn’t need to have a business partner.An involved party can
be created with a business partner already defined by the administrator.

Create Involved Party with a New Business Partner [page 346]


A partner function is a mandatory minimum field in an involved party. This means that an involved party
must contain a partner function, but it doesn’t need to have a business partner.An involved party can
be created with a new business partner, created locally.

SAP CPQ Setup and Administration Guide


344 PUBLIC Quotes Administration
Search, Edit and Delete Business Partner [page 347]
If you add only a partner function without a business partner in the Involved parties tab, you can
afterwards search for and add a business partner directly from the grid.

5.2.8.8.1 Create Involved Party with an Existing Business


Partner

A partner function is a mandatory minimum field in an involved party. This means that an involved party must
contain a partner function, but it doesn’t need to have a business partner.An involved party can be created with
a business partner already defined by the administrator.

Procedure

1. Click Create Involved Party in the Involved parties tab.


2. Click Add Existing Business Partner.

The Add Existing Business Partner pop-up displays.


3. Select a partner function.
4. (Optional) Select a business partner.

To search for an existing business partner, you can filter any of the standard business partner fields.

 Note

You can only search for business partners using standard business partner fields. Using business
partner custom fields for filtering business partners isn't supported.

5. Click Save.

The involved party is created.

Related Information

Search, Edit and Delete Business Partner [page 347]


What are Business Partners and Partner Functions? [page 333]

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 345
5.2.8.8.2 Create Involved Party with a New Business
Partner

A partner function is a mandatory minimum field in an involved party. This means that an involved party must
contain a partner function, but it doesn’t need to have a business partner.An involved party can be created with
a new business partner, created locally.

Context

 Note

If you want to allow your users to create new business partners in the Involved parties tab, set the
parameter Allow adding business partners on quotes without creating them first in Setup to TRUE in
Setup General Application Parameters (Shopping Cart and Quotes) .

The business partners created on the quote are not accessible in the Setup and can’t be used for other
quotes and other partner functions. They are created locally, only for that partner function.

Procedure

1. Click Create Involved Party in the Involved parties tab.


2. Click Add New Business Partner.

The Add New Business Partner pop-up displays.


3. Select a partner function.
4. Fill out the fields as explained in the Business Partners General Fields [page 337] table.
5. Click Add.

The involved party is added to the quote.

Related Information

Search, Edit and Delete Business Partner [page 347]


What are Business Partners and Partner Functions? [page 333]

SAP CPQ Setup and Administration Guide


346 PUBLIC Quotes Administration
5.2.8.8.3 Search, Edit and Delete Business Partner

If you add only a partner function without a business partner in the Involved parties tab, you can afterwards
search for and add a business partner directly from the grid.

Additionally, you can remove a business partner by clicking next to it in the grid. If the partner is created
by the administrator in the Setup, this will only remove the partner from the quote, it won’t delete it. If
the business partner is created locally, only for that partner function, removing it from the grid removes it
altogether.

Once a business partner is added to a quote, the relation between the business partner on the quote and that
business partner in the Setup no longer exists. In other words, if you edit a business partner in the Involved
parties tab, the changes are not propagated in the Setup. Likewise, if you edit a business partner in the Setup,
the changes are not propagated to existing quotes.

Related Information

What are Business Partners and Partner Functions? [page 333]

5.2.8.9 Business Partner Bulk Import/Export

With this feature, you can import or export business partners in bulk on the new Bulk Business Partner Import/
Export page in the Import/Export section of the Setup. You can export a template that can be populated with
new or updated business partners and subsequently imported into SAP CPQ. You can also export all business
partners at once, as well as specify whether the ID or the system ID of imported business partners should be
used to determine if new business partners should be created or if existing ones should be updated.

5.3 Quote Tables

SAP CPQ supports tabular structure for displaying dynamic data on Quotes. Quote Tables can be a useful
resource for displaying Customer purchase history, capturing payment details, etc.

 Note

Quote tables can be managed via the Quote Tables API. Information about this API is available in the
dedicated section on Swagger .

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 347
Example

You can create a Quote Table for your users to keep a record of the payment schedule in a milestone-based
quote payment. The screenshot below shows a possible table design in such a scenario.

The Total Milestones is a quote-level custom field for inputting the number of milestones for the payment of
the quote total amount. Clicking Populate Milestones triggers a script that adds a row for each milestone and
divides the total amount into equal installments. The date of each milestone is calculated with a month of
difference, starting from the date in Payment Start Date. Any comments and notes users might have, can be
added in the Milestone column.

If users change an allocated amount, the unallocated amount is automatically recalculated. The unallocated
amount equals to $200 in the example as the amount of the first milestone is decreased by $200. The action is
triggered by the On Cell Changed script defined in Setup:

total= 0.0
cf_TotalUnassigned=Quote.GetCustomField(“Quote Total Unassigned”)
tbl=Quote.QuoteTables[“Payment_Schedule”]
for row in tbl.Rows:
total+=row[“Amount”]
cf_TotalUnassigned.Content = “$ ” + str(Quote.Total.TotalAmountInMarket - total)

The script subtracts the total amount in all rows from the total quote amount to display the unallocated
amount.

Create Quote Table [page 349]


Tables on quotes are quote-related and can’t be created for each product item. The data in the table
can either be retrieved automatically from other systems and SAP CPQ or users can input/select
entries for each cell. Note that quote tables are available only in the responsive version of SAP CPQ UI.

Quote Table Columns [page 350]


Table data is organized in columns. Multiple columns with the same denominators can be visually
represented to users as a group.

Manage Quote Table Column Groups [page 353]


Columns in quote tables can be organized in groups visually represented by common group headers.
Groups allow you to organize columns in logical units, so your users have a neat overview of the data.

SAP CPQ Setup and Administration Guide


348 PUBLIC Quotes Administration
Quote Table Actions [page 355]
Standard and custom quote table actions allow users to manage rows and cells in Quote Tables.

Import via Excel [page 357]


Users can import data into quote tables by importing Excel files on both quote engines.

Quote Table Translation [page 359]


The Translations tab allows you to translate the Quote label, column and action labels and validation
messages.

5.3.1 Create Quote Table

Tables on quotes are quote-related and can’t be created for each product item. The data in the table can either
be retrieved automatically from other systems and SAP CPQ or users can input/select entries for each cell.
Note that quote tables are available only in the responsive version of SAP CPQ UI.

 Note

The maximum number of rows in a quote table is 3000.

Once created in the Setup, a quote table is visible on all quotes in the tab selected during creation. All quote
tabs, except Documents, can host one or more tables, but a quote table can be located only within one tab.
Table content isn’t shared between tables.

1. In Setup, access Quotes Quote Tables .


2. Click Add New and a page with four tabs displays.
3. Fill out the fields in Define Table:
• Table Label(required) - the label in the default system language that displays above the table on quotes.
• Table Name - populates automatically with the table label, but all special characters and spaces are
replaced with an underscore. The field is editable until the table is saved. You use the table name when
referencing the table in scripts and document templates and translate it to nondefault languages in the
Translations section.
• Quote Tab to show this table on - the list of quote tabs for placing the table. In Quote 2.0, you can show
the table in multiple tabs. However, in Quote 1.0 you can show the table only in one tab.
• Table Rank - controls the position of the table on the quote. Quote tables share ranks with quote
custom fields (for example, a quote custom field with a rank of 10 is placed before a quote table with a
rank of 20 on a quote).
4. Select Allow Search on Columns to allow users to search quote columns.
5. Define permissions:
• In the Permissions section, click Add Permission.
• In the pop-up, select statuses and permission groups to limit visibility.
To make the table visible to all statuses and groups, opt for Select All Statuses and Select All
Permission Groups, respectively. Note that quote tables aren't visible in any quote statuses or to any
permission groups when no selection is made in the Permissions pop-up.
• Click Add.
The permission details display in the Permissions section and can be edited/deleted at any time.
When multiple permissions are defined, the logic applied between them is OR. You can override the
permissions via Iron Python scripts.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 349
6. Click Save.
Note that you need to save data in Define Table to be able to move to other tabs. The table is now created
and it’s shown on all quotes in the system.

Search on Quote Tables: Hint for Your Users

Different column types require different input in the search fields so correct results are displayed:

• Attribute and Boolean columns - the search terms render in a dropdown list or with checkboxes so users
can select one.
• Date columns - users can either find a date in the on-demand calendar or input it manually.
• Other column types - the search term needs to be keyed in. The character limit for cells in string type
columns is 2000 characters per cell.

 Note

The numeric, decimal, and money columns accept < and > characters to be used for “lower than” and
“greater than” operations. In textual search fields, if a user enters one or two letters, the rows containing
the item that starts with these letters are filtered. If more than 2 letters are entered, the system shows the
items that contain the two letters, not necessarily begin with them.

After entering or selecting from a dropdown menu a search term for one column, only the rows consistent
with the search remain in the table. Those rows are filtered further on when a new search term is applied in
another column.

5.3.2 Quote Table Columns

Table data is organized in columns. Multiple columns with the same denominators can be visually represented
to users as a group.

Add Columns to Quote Table

Quote table columns can either pull data via IronPython scripts (the system supports a maximum of 3000
rows) or users import data manually.

1. In Define Columns, click Add Column.


2. Define the column label and the column name will automatically populate.
Make sure not to use the reserved SQL words for the label.
3. Choose the column type.
The column type conditions the input users can make in the field.
4. Click Set Permissions.
The Permissions pop-up displays.
5. Select the permission groups for which the column will be editable/hidden.
Note that columns in quote tables are in read-only status by default.

SAP CPQ Setup and Administration Guide


350 PUBLIC Quotes Administration
6. (Optional) Set the validation rules.
Read more about the quote table validation rules in the Validation Rules section.
7. (Optional) Select the Contains Personally Identifiable Information checkbox.
All information that could potentially be used to identify an individual should be flagged as PII [page 804].
8. (Optional) Enable the Suppress Information Logging toggle switch.
You can choose to suppress logging of PII data for an additional layer of protection.
9. Save your changes.
10. Repeat the previous steps to add more columns.
11. Click Save.

Validation Rules

Validation rules show users that data input is required and that a limit on the data users enter is required.

The table shows which validation rules are available for which column types:

Column Types Validation Rules

Number Minimum
Decimal
Maximum
Money

String Required

Contains

Date Required

Attribute

Boolean Not available

To manage validation rules for a column, access Validations when editing the column. After selecting a
validation rule and entering the value, you should define the validation message that will display to users if
they break the rule. The validation message is required, otherwise you can’t save the columns.

If one or multiple validation rules are broken, the validation of the entire table fails and an informational
message displays above the table. However, users will still be able to save the quote table and the quote and
manage other sections independently.

A rule's activity is handled through the Active checkbox. If a rule becomes temporarily unneeded, but may
become required in the future, unselect the checkbox.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 351
 Note

A flag on quote tables, with values True or False, denotes the validation status. As the flag is exposed for
scripting, scripts can be created for users to perform actions based on the validation status.

SAP CPQ Setup and Administration Guide


352 PUBLIC Quotes Administration
Scripting

Quote table columns are exposed for scripting so that you can create scripts for complex calculation of the
tabular data. Additionally, you can manage validation rules and column labels via scripts:

• Validation Rules - the new method ExecuteValidations triggers the validation rules. To check if a
validation rule is broken, use the HasValidationsFailed method. Also, you can activate/deactivate
a rule via scripting (for example, add a pre/post action to actions and cell events in the Actions tab).
Changing the activity via scripting doesn’t influence the behavior of the Active checkbox in Setup (the
activity must be changed manually).
• Column Labels - column labels are exposed for scripting so you can rename them to meet specific
business needs of your users. You can create a global script that renames the labels after users execute the
event to which the script is attached in Events.

Example

A script affecting the Payment Schedule quote table is attached to the action of changing the date of the first
payment in the designated quote custom field. After users change the date, the script is triggered and the First
Installment label is replaced with October 15.

Note that in the example quote, the parameters Quote.QuoteTables and GetColumnByName retrieve quote
and column names, respectively, not labels.

Quote.QuoteTables[“Payment_Schedule”].GetColumnByName(“First_Installment”).Label =
“October 15”

5.3.3 Manage Quote Table Column Groups


Columns in quote tables can be organized in groups visually represented by common group headers. Groups
allow you to organize columns in logical units, so your users have a neat overview of the data.

Example

When tracking the installment schedule plan for a product over a year,
create a column for each month and group the months in four quarters.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 353
To manage groups, access a table and go to Define Columns Manage Columns and Column Groups . The
Column Groups pop-up is divided into two sections: Column Groups and Columns (automatically populated
with all columns that aren’t included in groups).

1. Click Add Column Group.


2. Define the group name and the label.
Make sure not to use the SQL reserved words when naming columns and groups.
3. Click Add.
The groups display in the order they were created.
To change the order of column groups, drag and drop them.
To edit and delete a group, click .
4. Click to expand the group.
5. Drag and drop the columns from the right into the dedicated group area.
6. Click Confirm.
7. Click Save to save the table.

 Note

• All columns, including those that are standalone (outside of groups), must be moved to Column
Groups. Otherwise, you can’t save the group.
• The ordering of columns and groups is set in Column Groups.
• Once you add a column to a group, you can only move it to a different group or outside of groups, but
you can’t move it back to the list of available columns.

SAP CPQ Setup and Administration Guide


354 PUBLIC Quotes Administration
Scripting

Quote table groups are currently not exposed for scripting. To calculate the sum and average values of a group,
you can use the sum and average of columns as shown in the example snippet:

table = Quote.QuoteTables['Price_Overview']
rows = table.Rows
sum=0
for row in rows:
sum = sum + row.GetColumnValue('January')
#sum for column January
Trace.Write(sum)
#average for the column January (to calculate average on multiple columns,
multiply rows.Count by the number of columns first)
Trace.Write(sum/rows.Count)

5.3.4 Quote Table Actions

Standard and custom quote table actions allow users to manage rows and cells in Quote Tables.

Add row, Delete row, and Copy row are standard actions available on Quote Tables. On the Administration side,
you can activate/deactivate actions, choose permission groups that can see them and define actions that are
executed before and after the standard actions. In addition to managing the table and row actions, you can also
activate/deactivate the On Cell Changed event on the same page.

Only those actions that have the Active checkbox selected are visible to users when interacting with Quote
Tables. To further control the visibility, click Permissions and select the groups to which the actions are visible.

The Pre Script and Post Script buttons provide access to a Script Editor where you can define actions that are
executed before and after the standard action, respectively. The blue flags on Permissions, Pre Script, and Post
Script buttons denote that permission groups are selected and/or scripts are defined.

Below are the available contexts for the scripts that can be attached to Quote Table events:

Copying rows
Available argument: EventArgs.

EventArgs contains Table(IQuoteTable), SourceRow(IQuoteTableRow), and


NewRow(IQuoteTableRow) properties.

Table represents the quote table on which the action has been triggered.

SourceRow represents the quote table row that is copied .

NewRow represents a new quote table row copied from the source row.

Adding new rows (Pre Script)


Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable), Row(IQuoteTableRow), and Cancel(Boolean) properties.

Table represents the quote table on which the action has been triggered.

Row represents a newly created quote table row that will be added to the quote table.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 355
Cancel is a boolean variable that allows the script to cancel adding a row to the quote.

In order to cancel adding a row to the quote, you need to set the Cancel property to True.

This event can be used to validate something or prepopulate a row.

Adding new rows (Post Script)


Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable) and Row(IQuoteTableRow) properties.

Table represents the quote table on which the action has been triggered.

Row represents a newly created quote table row that has been added to the quote table.

Deleting rows (Pre Script)


Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable), Row(IQuoteTableRow) and Cancel(Boolean) properties.

Table represents the quote table on which the action has been triggered.

Row represents a newly created quote table row that will be deleted from the quote table.

Cancel is a boolean variable that allows the script to cancel deletion.

In order to cancel deleting a row, you need to set the Cancel property to True.

Deleting rows (Post Script)


Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable) and Row(IQuoteTableRow) properties.

Table represents the quote table on which the action has been triggered.

Row represents the table row that has been deleted from the quote table.

On Cell Changed
In the Cell Events section, you activate the On Cell Changed event and attach a script that will be executed after
users make a change in a quote table cell. To use this event, you need the following context information:

Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable), Cells(List<IQuoteTableCell>) and


OldValues(List<object>) properties.

Note: OldValues list contains cell values, not display values.

As the system automatically saves every change made in a quote table cell, the list of changed cells and old
values will have only one element. An example code snippet below demonstrates how to access the changed
cell and log its current and previous values:

i = 0
while i < len(EventArgs.Cells):
cell = EventArgs.Cells[i]
Trace.Write('Column: {0}, value: {1}, display value: {2}, old value:
{3}'.format(cell.ColumnName,

SAP CPQ Setup and Administration Guide


356 PUBLIC Quotes Administration
cell.Value, cell.DisplayValue, EventArgs.OldValues[i]))
i += 1

The list of changed cells and the list of old values are sorted so that related entries have a matching index
(position) on both lists.

Custom Actions on Quote Tables

Administrators create custom actions so their users could manage specific tasks on quote tables. In the
example scenario detailed in Quote Tables, the custom action Populate Milestones creates as many rows as
there are milestones defined in Total Milestones.

To create an action that isn’t standard on Quote Tables, click Add Custom Action. In the Script Editor, define the
action's name and the script that will be executed upon clicking the action button. The custom action buttons
appear above Quote Tables and their labels in the default language can be translated in the Actions section in
the Translations tab.

Scripts acting as Custom actions on Quote Tables have the following variables available in their context:

Available Argument: EventArgs.

EventArgs contains Table(IQuoteTable).

 Note

Scripts attached to standard table and row actions and cell events don’t run when you interact with rows
via scripts. They only run when a user interacts with a Quote Table through the user interface.

Quote Table events can also be accessed via Iron Python Scripts. New rows can be added, data can be
read from them, permissions can be set, etc. The interfaces to do this are described in SAP CPQ Scripting
Documentation .

5.3.5 Import via Excel

Users can import data into quote tables by importing Excel files on both quote engines.

The following procedures contain step-by-step instructions on how to upload Excel files into quote tables.

General Prerequisites

• To have a quote created.


• To have a quote table created [page 349].
• To select Allow Excel upload checkbox for the quote table.

This functionality can be accessed by navigating to the quote tab in which the quote table is placed. There,
users can:

• Upload new data


• Update the existing data

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 357
Upload New Data

Instead of manually adding rows into quote tables, users can download empty Excel templates, fill them out
and upload them into the quote table.

1. Click Download Excel File.


A dropdown list appears.
2. Click Add New Entries.
An Excel file is downloaded.
3. Fill out the file according to the instructions.

4. Click .
5. Upload the file with new data.
A message informs you whether the upload was successful or not.

Update the Existing Data

When managing extensive quote tables, it’s easier to download the existing data in an Excel file, update it and
upload the template back into the quote table. The prerequisite is to have data in the quote table.

1. Click Download Excel File.


A dropdown list appears.
2. Click Update Existing Entries.
An Excel file with the data from the quote table is downloaded.
3. Update the data in Excel according to the instructions.
If needed, you can also add rows in Excel to upload new data into the quote table.

4. Click .
5. Upload the file with the updated data.
A message informs you whether the upload was successful or not.

Template Guidelines

The Excel template contains a sheet with all columns and rows that exist in the quote table for which a user has
editing rights.

 Note

Quote table rows are distinguished by ID numbers, so if existing entries need to be updated, you shouldn’t
change the ID numbers in the template.

If users populate the Excel file incorrectly by entering an inadequate value format and try to upload it into a
quote table, an error message appears. Additionally, users are prompted to download the file again and enter
the correct data to ensure a successful upload. The incorrect data in the Excel file is marked in red and the new
Error column is also displayed in the file. You don’t need to change the color of the cells and delete the Error
column before reimporting the file.

SAP CPQ Setup and Administration Guide


358 PUBLIC Quotes Administration
The date format used in uploaded Excel files must match the date format which is set for that user.

An Excel template is always downloaded in .xlsx format, but it can be uploaded in any of the following Excel
formats: .xlsx , .xls, .xltx, and .xlt.

 Note

There’s a new event When Excel is uploaded into a Quote Table available in the Global Scripts. A global script
can be triggered after an Excel file is successfully uploaded to a quote table.

5.3.6 Quote Table Translation

The Translations tab allows you to translate the Quote label, column and action labels and validation messages.

Each label has a dedicated row with a value in the default language and a value in the target language, if
defined. To add a translation, first choose the target language in the Language drop-down list. You are now able
to add the translated value in the Translation column.

5.4 Quote Tab Permissions

The Quote Tab Permissions allows managing visibility of the quote tabs based on the workflow statuses and
permission groups.

Unless you select a status and/or a permission group, all defined quote tabs are visible in all status and to all
permission groups. Quote tab permissions are managed under Setup Quotes Quote Tab Permissions .
When you access the page, a list with the following data for all existing permissions is displayed:

• Tab - the name of the tab for which the permission is created.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 359
• Permission - the name of the selected status and the permission group.
• Custom Permission - displays the values Yes/No depending on whether additional visibility restrictions are
set up.

The Show drop-down list allows you to filter the list per specific tabs or display all tab permissions in the list.

You can always edit or delete a permission by clicking and, respectively.

Create a Quote Tab Permission

1. In the Quote Tab Permissions page, click Add Tab Permission.


2. In the new page, select a tab on which the permissions are applied.
3. Select a status in which the tab is hidden.
Make use of the Select all Statuses checkbox if you wish the tab to be hidden in all statuses.
4. (Optional) Select all or specific permission groups that won’t have access to the tab.
The logic OR is applied between the permission groups.

5. In the Additional visibility restriction section, click to create a condition formula [page 762] for a more
specific restriction.
6. Click Save to finalize the creation.

 Tip

Quote.CurrentItem CTX tag can’t be used for defining additional visibility restrictions.

Note that the condition formula additionally restricts the tab visibility related to permission groups and
statuses, it doesn’t overrule it. The system re-evaluates the condition formula every time the quote is modified.

5.5 Custom Quote Fields

The Custom Fields administration allows creating custom fields in the shopping cart for users to include
additional information, such as terms of payment or other specific information to your company.

The fields can also be useful in helping to define what a generated document includes. Field selections can also
affect the configuration of the products. Each custom field is assigned to a tab defined as a quote tab and gets
permissions set to define how the field will be used based on the user and the status of the quote.

Custom Fields administration can be found under the Quotes admin menu. Here user can copy, delete, and edit
existing custom fields. Clicking Add New allows adding a new custom field.

Creating a new custom field comes in two steps. First step is to define the field, including the label, the type
of field it is, what tab it is displayed in and the order, and the label. Once defined, user can then assign
permission to the field. The permissions determine how the field is displayed to the user, such as hidden,
required, editable, and read- only.

SAP CPQ Setup and Administration Guide


360 PUBLIC Quotes Administration
 Note

Quote custom fields have a limit of 2000 characters per field. Additionally, the maximum number of quote
custom fields that can be created in SAP CPQ is 1024. This is applicable for both Quote 1.0 and Quote 2.0.

Definition

• Name - Custom fields can be created with any name, or label. This label can then be different for other
users based on user group.
• Type - This determines how this custom field is used :
• Free Input - Field appears as a text box in which users input a value. No restrictions on what the user
can enter.
• Attribute - This type allows you to connect your custom field to an attribute. This way, in the quote, you
get the text box where you can select custom field value from the list of attribute values. If you set an
attribute of type „Auto-complete“ to be connected to your custom field, then in the quote, instead of
drop box, you get the autocomplete text box where you can type a value that you want to assign to your
custom field. As you start typing, autocomplete offers a list of values that either starts with the typed
combination of letters, or contains it.
You can also set the value of autocomplete custom fields via scripting by using the Value Code
property, as explained in Autocomplete Attributes [page 32].
• Date - Field appears as a text box in which the user enters a date. The date the user enters must match
the date format the user has set on the User’s Page. Next to this field, the user is able to click an icon to
display a calendar where the date can be chosen.
You can’t change the Date field to any other type, nor can you switch other types to Date. You can
switch fields to and from Free Form, Attribute and Long Text.
• Long Text - Field appears as a large text box in which the user can enter multiple lines of text. No
restrictions on what the user can enter.
• Tab - Select one or multiple quote tabs under which this field will be displayed. The only tabs available are
those tabs that have been defined as a quote tab in the Quote Tabs administrative section. It’s important
to keep in mind that the tabs that are used for the cart, customer info, and attachments are available
selections. This means that user can place custom field not only in custom tabs, but also within the cart,
customer info, or attachments.
• Order within Tab - Determines where this field will be displayed in relation to the other fields on that tab.
The lower ranked fields will be displayed on the top, while the higher ranked will be displayed after.
• Calculation Type (Quote 1.0 only) - If “Once, when quote is created” or “Every time quote is modified”
Calculation type is selected, a new Formula field is shown. The evaluated formula value is assigned
to the content of the custom field. This way a custom field value can be defaulted to some
value. Some of the tags aren’t supported for “Once, when quote is created” calculation type option
(<*CTX(Quote.QuoteNumber)*>,<*GI(CART_OWNER_ID)*>,…).
When application parameter “Enable quote custom field calculation ranking” is true, the new field is
added in custom fields administration “Calculation rank”. This field is visible only when “Calculation
type” is not “None”. For example, admin can add three dependent custom fields: Custom field
“A” ,Custom field “B” ,Custom field “C” . Custom fileds B i C have calculation type 'Every time quote is
modified'. Custom field B has formula <*EVAL(<*CTX(Quote.CustomField(A))*> * 2)*>, custom field C:
<*EVAL(<*CTX(Quote.CustomField(B))*> * 2)*>. Calculation rank is set to 1 for B and to 2 for C. When the

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 361
user enter “5” in the custom field “A” and click on “Calculate”, the value for custom field “B” should be 10
and for custom field “C” should be 20.
• Calculations are run (Quote 2.0 only) - You can select an event that specifies the moment when the
dedicated calculation formula is triggered. After selecting an event, you can create the relevant formula.
This way, it is possible to create certain scripts directly on the custom field, instead of having to use global
scripts. You can select the events Once, when quote is created, On Involved Parties Changed, and After
changing the value of custom fields. After selecting one or more of these events, a box displays where you
can define formulas. Additionally, if the checkbox After changing the value of custom fields is selected, a
new field displays, where you can add custom fields which trigger the event once they are changed.
• Save quote on change - If enabled, the quote is automatically saved after the custom field value is changed.
The field is visible if the application parameter Automatically save quote on custom field change is set to
TRUE in General Application parameters Shopping cart and Quotes .
• Transfer to Items - Determines whether or not this field’s value will affect the product’s configuration. This
is done when this field is connected to an attribute. That same attribute needs to be added to the product
where the product definition is using the attribute. Once the field is selected in the cart and saved, the
value is passed to the product’s configuration and the same attribute value is selected in the product. Any
rules, calculations, etc used around this attribute will be affected.
For example, say we have a custom field connected to an attribute called Number of Users, which contains
the values 1 through 10. In addition, we’ve also added this same attribute to the product’s configuration
to control the pricing of the software we are configuring. Once a user has configured the software and
added it to the cart, they can select a value from the custom field Number of Users drop down list. Once
it is saved, that value is passed back to the configuration where the pricing is updated based on the
number of users selected. - This determines whether this field will be displayed along with the order on the
confirmation page after clicking Place Order. If selected, then the custom field will also be displayed in the
email that goes to the ordering parent or system administrator depending on how it is configured.
Note that value from custom fields that are marked as 'transfer to item' will NOT be transferred when
product is in catalog and while product is configurated. After the product is added to the quote, all custom
fields that are marked as 'transfer to item' will pass their values. This may affect a final price of the
particular product, if the price depends on the attribute that is used in custom field.

 Note

When using the Transfer-to-item functionality it will cause Quote Reconfigure – not only when the
custom field value is changed, but also when the Calculate action is triggered (on item discount
change, list price change or any other field value change).

• Show on place order confirmation page


• Default Label - User can give the field a different label from the required name of the field. If left empty then
the system will use the name of the field. This is just the default label. The label can be changed based on
the user group.

clicking this icon displays a list of all the user groups in the system where user can define what the
label will be for each group. This is most beneficial when quotes are being shared among user types. Users
that open quotes from another user group will see their label with the other user’s value.
For instance, if we have a custom field called quote name, we may want the managers to see the label
‘Project Name’ but the sales rep to see ‘Quote Name’. When a sales rep user creates a quote they’ll enter a
value for Quote Name. Then when the manager opens the same quote, they’ll see the same value the sales
rep enter but under the label Project Name.
• Contains Personally Identifiable Information - All information that could potentially be used to identify an
individual should be flagged as PII [page 804]

SAP CPQ Setup and Administration Guide


362 PUBLIC Quotes Administration
• Suppress Information Logging - You can prevent old and new values from being logged in the Audit Trail as
an additional layer of protection.

Permissions

The Permissions tab defines how the custom field will be displayed to the user based on the user group and
status of the quote. There are four options that you can define for the field:

• Hidden - This is used for the statuses or user groups that you would not like the field displayed for. The field
is not displayed at all to the user. If the field is required the user will not be prompted to enter a value for
the field.
• Read-Only - This is generally used for statuses after the quote has been completed, such as Order Placed
or Received Order. The field is not editable. Whatever value had been entered for the field will be displayed
as uneditable text. Even when a custom field is read-only for a user type, a script will change the value
when triggered.
• Editable - This is generally used for the initial statuses in which the quote is being created, such as Open.
The field is displayed in whatever format it was defined in.
• Required - This is used when user would like the user to define this field before they are allowed to Place
Order on the quote. Field marked as required are editable and are displayed with a red asterisk. If they try
to Place Order on the quote or save the custom fields on that tab, then they will be prompted to define the
field.

One of these options can be defined for each cell in the matrix of user groups and statuses. To set an option to
a cell click the cell to display a pop-up where the option can be selected. There are six different types of cells in
the matrix that can be defined:

• All Permissions - Sets the same option for all the cells in the matrix. Click the upper left corner of the matrix
to define.
• All Statuses for One User Group - You can set all the statuses for one user group by clicking the user group’s
name on the left side of the matrix.
• All User Groups for One Order Status - You can set all the user groups for one order status by clicking the
status on the top of the matrix.
• Individual Cell Intersection - You can set a cell intersection between a status and a user group. For instance
the Sales Rep group should have the custom field Read-Only when in the Order Placed status.
• Default (For New User Groups) - Set how the custom field will be displayed to the users added to new user
groups that haven’t been set in this matrix yet.
• Default (For New Order Status) - Set how the custom field will be displayed in a new statuses that haven’t
been set in this matrix yet.

The default cells make administration easier so that when you create a new user group or status you do not
need to go through and define all the custom field permissions again.

 Note

Selecting an option for a cell that includes all statuses or all user groups might take a little bit of time to set
depending on the number of statuses and user groups created in the system. Large number of groups or
statuses means there are a lot of cells to set, so there might be a slight delay in setting them all.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 363
When finished defining the custom field and its permissions, click Save at the bottom of the page. You are not
redirected to another page in case you would like to continue to define the field. For instance if you’ve just
defined how the field will be used and now you’d like to define the permissions.

Date Quote Custom Fields in Scripting

In Quote 1.0, quote custom fields are stored as strings in the database, and in Quote 2.0, dates are stored in the
datetime format. If you are setting the date in a quote custom field in Quote 1.0 through scripting, you’ll first
need to convert the date to string, using the ToUserFormat function. Check the following examples:

Quote 1.0

from datetime import datetimecrmEstCloseDate = datetime.strptime("26/03/2022",


'%d/%m/%Y').date()
crmEstCloseDate1 = DateTime.Parse(str(crmEstCloseDate))
aa = UserPersonalizationHelper.ToUserFormat(crmEstCloseDate1)
Quote.GetCustomField('Estimated Ship Date').Content = aa

Quote 2.0

from datetime import datetime crmEstCloseDate = datetime.strptime("26/03/2022",


'%d/%m/%Y').date()
crmEstCloseDate1 = DateTime.Parse(str(crmEstCloseDate))
context.Quote.GetCustomField("Date Tester").Value = crmEstCloseDate1

5.6 Key Attributes

Key attributes provide you with an option to set up attributes as search criteria on the user side.

Users can search for quotes based on the value of key attributes in the environment. For example, if Memory is
a key attribute, users can make Memory a search field. When users browse quotes, they can search quotes with
the Memory value of 1024MB-DDR, and all quotes containing this value are listed.

You can find the Key Attributes administrative section under Setup Quotes . There, you can add new key
attributes, change the label of the existing key attributes, and modify the expression used to compute the value
of the key attribute.

You can create a new key attribute by clicking Select. This brings up a pop-up window where you can search for
the attribute you would like the key attribute to reference.

The Label field determines what the default label for this key attribute will be. Users can change the label when
the key attribute is added as a search field.

The Expression for computing key attribute value field must contain a standard SAP CPQ tag which determines
what value will be used when searching for this key attribute. Generally this field contains tags such as Value
or ValueCode. You can also include a much more complex expression here if necessary.

SAP CPQ Setup and Administration Guide


364 PUBLIC Quotes Administration
Show quote key attributes in a container attribute

In order to do this you can use arguments of the tag LoadCartItems consisting of the prefix KeyAttribute-
and key attribute name. For example:

• KeyAttribute-Memory
• KeyAttribute-Processor
• KeyAttribute-Printer

In the syntax checker, only non-empty key attributes will be displayed. This tag will be
used to populate the appropriate column with value of item’s key attribute. The complete
tag may look like this: <*CTX( Container(Test_Container).LoadCartItems(KeyAttribute-
Memory).ToColumns(Memory) )*>

Here are some of the typical use cases:

• Create a container attribute that will be populated with contents of the quote. This container will be
displayed in configurable product. The container should contain quote item fields.
• Add key attributes to be displayed in a container (String, Numeric, Date)
• Create a quote and add several items. Some items should have these key attributes empty.
• You will see that quote contents are displayed in the container and that key attribute values are will be
displayed for all items.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 365
5.7 Search Fields
The Search Fields administration allows controlling which fields will be available for users to filter their load
quote page by.

They can be defined on a per user group basis and can ordered. The search fields available include quote
information, customer information, key attributes, or user information.

When users want to save default number of quotes that will be displayed, SAP CPQ will save maximum 50
quotes per page.

The Search Fields administrative section can be accessed under the Quotes admin menu. Here user can add,
remove, and modify the search fields.

To add a new search field, click the Add New button. This displays the search field definition page.

Available Fields displays the fields that can be searched by. These include any Key Attributes, Custom Fields,
and default fields, which include cart information, customer information and user information. The Label
field determines what the search field label will say on the user side. Because the search field name can be
sometimes not very descriptive or not custom for user's company, the Label field allows displaying any label
that is needed.

The Operator field determines how the system will search the value entered by the user. There are 6 options
available as an operator:

• =number - requires the value entered by the user and the selected field is a number
• =date - requires the value entered by the user and the selected field is a date
• =string - requires the value entered by the user and the selected field is a string, or text
• like - allows user to enter any value, this value is then searched by for in the selected field. An exact match
is not needed with this query. For example, if a user enters the value “com”, the system will match that with
“computer”, “communication”, “combination”, etc.
• number interval - user is given two fields to enter a number. The system then returns the values that fall
between the entered numbers.
• date interval - user is given two fields to enter dates. The system then returns the values that fall between
the entered dates.

 Tip

Searches done with the =number, =date, and =string operators must be exact matches in order for the
system to return the result.

The All User Types field refers to user types for which no search fields have been defined. What this means is
that, if a search field has been defined for a certain user type, that user type will not have access to search
fields defined for All User Types. For example, if a Project Name search field has been defined for a Sales user
type, the Sales user type will only have access to the Project Name search field, and to no other. This also
means that All User Types will not have access to the search field defined for a Sales user type.

Selected Fields lists all the search fields currently being displayed to users. The fields are listed in the order that
they will be displayed to the users from top to bottom.

To add a new search field, user must select the field from the Available Fields and click to send the field to
the Selected Fields. Then it is possible to order the selected fields by selecting the field and clicking the up and
down arrows.

SAP CPQ Setup and Administration Guide


366 PUBLIC Quotes Administration
 Note

User can only add one search field at a time. To add another search field, save the current addition, then go
back into the search field administrative section and click Add New.

When editing a search field, if desired, user can only remove and edit the label of the field that you edited. User
can, though, modify the ordering of all the fields while editing.

 Note

To make the Advanced Search feature available on the Existing Quotes page, you must tick the Show Fields
in a Quote Search/Filter check box on the User Types [page 144] Help page.

5.8 Quote Visibility

As an administrator, you can use quote visibility rules to define which quotes are accessible to users in the
Other Quotes tab.

By default, users can only view quotes that they have created, in the My Quotes tab of the Load Quotes page.
However, given the appropriate permissions, users can also access other quotes in the Other Quotes tab.
To allow a user to see the other quotes, you must create quote visibility rules in Setup Quotes Quote
Visibility . Quote visibility rules can be defined on both quote engines. However, there are differences between
how the feature works in Quote 1.0 and Quote 2.0.

 Note

Users won’t be able to see any quotes in the Other Quotes tab if no quote visibility rules are defined. This
behavior is the same in both quote engines.

In the Quote Visibility section in the Setup, you can see all existing quote visibility rules. You can filter the rules
using the parameters Group (which refers to user types), User, Company, and Condition (only in Quote 1.0).

 Note

When the system determines which rule is applied, groups have priority over users, and users over
companies.

By clicking Add New, you access the quote visibility rule definition page, where you can define a new rule by
completing the following steps:

• In step 1, you need to specify to which users the rule is applied, by adding individual users, user types, or
companies.
• In step 2, you can limit the quotes that the users specified in step 1 can view. You can allow the specified
users to only view their company's quotes, quotes created by other users for whom the specified user is
the approval parent, or quotes created by users for whom the specified user is the managing parent.
• Step 3 is available only for Quote 1.0 users. Here, you can specify a condition under which the rule is
applied. Since conditions aren't available in Quote 2.0, you can use SQL pre-filtering to create dynamic
settings, instead. SQL pre-filtering conditions can be used to improve performance in both quote engines.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 367
 Note

If you defined prefiltering conditions but you’ve noticed that they aren’t applied, contact the SAP CPQ
Support team to enable prefiltering for your tenant.

SQL prefiltering can affect the way regular filters work. Results which would be included if using regular
filters may be discarded due to prefiltering.

It is only possible to create one rule per combination of User Group, User, and Company. In addition, you can
only create one rule for a specific user (for example, John Smith). However, you can create a rule for the user
group Sales, even if John Smith belongs to that group. In this case, though, the visibility rule created for the
Sales group would have priority over the rule create for John Smith.

When a user opens the Other Quotes tab, the system runs the visibility rule for every quote in the system. If the
condition is met for a quote, then the specific user will be able to see that quote. The actions which the user
can perform on these quotes are defined in the Workflow Actions administrative section.

In Quote 1.0, only quote tags can be used in the condition field for visibility rules. You can use the formula
builder to create complex conditional statements. Any quote information can be retrieved to be used in the
calculation, including user information, customer information, custom fields, discounts, cart amounts, and
many others. Entering 1 in the condition field allows the selected user to see all quotes generated in the system.

Using Visibility Rules Together in Quote 1.0

You can create inherited visibility rules to further filter quotes.

For example, we can create a rule in which the Sales group can see all quotes where the quote creator’s user
group is Sales, by specifying the user type Sales and the condition <* SameGroup *>. This rule states that
any user in the Sales group will be able to see quotes from the users that are within their group. The <*
SameGroup *> tag checks the quote creator’s user group and the user group of the user currently logged in
and returns true if the same.

We then want John Smith, who is part of the Sales group, to only see quotes within his ZIP code. To achieve
that, we need to create a rule that specifies the user John Smith, the user type Sales, and the condition <*
SameZipCode *>. This way, the previous visibility rule for Sales also applies to John Smith, but in addition, the
tag <* SameZipCode *> matches the ZIP code of the currently logged in user with that of the quote creator.
The rule states that John Smith will only see quotes where his ZIP code matches that of the quote creator. In
addition, since the Sales user type is also specified, John Smith is now allowed to see only those quotes where
he has the same user group and the same ZIP code as the quote creator.

Visibility Rule Examples for Quote 1.0

All companies have unique needs but there are some commonalities which will be used for quote visibility
rule examples. Companies can have many different ways of distributing products and services and hierarchal
structures to manage them. For example, a Sales Management group needs to see all quotes that its groups
or salespeople generate, which may include individual users, Value-Added Resellers, Wholesale Distributors,
Outside Sales Reps, etc. Several quote sharing rules must be created in order to specify who can and cannot
see the quotes that have been generated.

SAP CPQ Setup and Administration Guide


368 PUBLIC Quotes Administration
There are four groups that need cart visibility rules applied to them:

• Sales Management: The internal management staff which needs access to all quotes.
• Sales: The internal sales rep staff which work in territories or specific companies.
• Channel Rep: Wholesalers, VARs, Distributors.
• Direct Sales: Center sales personnel, customer service, etc.

The Sales group will be divided into 2 territories, East and West. The Channel Rep group has 4 major stocking
wholesalers, 2 in each territory. In addition, they have 5 Value-added resellers assigned to each.

Based on these conditions, four visibility rules can be created.

Rule 1

Sale Management needs access to ALL quotes. Administrator should select Sales Management as user type
and in Condition, enter 1.

Rule 2

The Sales group should see only quotes within their territory. Jerry Thompson is assigned to East and Anna
Windfree is assigned to West. In order to make sure each rep can only see quotes that belong in their respective
territory a rule is created using the <*SAMETERRITORY*> tag. Administrator should select Sales as user type
and in Condition, enter <*SameTerritory*>.

Now every Sales user will be able to see all quotes located within their respective territory. Based on this
rule Jerry Thompson will not be able to see Anna Windfree’s quotes, because in there user profile they are
in different territories. For more information on assigning users to a territory, see the chapter on Users in the
Users section.

The way this rule works is very simple as well. When a user from the group Sales accesses the Other Quotes
tab, every quote is evaluated against the tag <*SAMETERRITORY*>. This tag evaluates to 1 (true) if a user who
created a quote (quote owner) has the same territory as the logged in user. All quotes will then be visible to the
logged in user through the Other Quotes tab.

Rule 3

Channel Reps should see only those quotes they have generated (My Quotes) and all
quotes created by their own distributor companies. The Channel Rep group supplies Westcoast
Distribution Inc. and Eastcoast Distribution Inc. They need to view all quotes generated by
those two distributor companies. In this case the condition is a bit more complex and requires
the following expression: [OR]([EQ](<*CO_INFO(COMPANY_NAME)*>,Eastcoast Distribution Inc),[EQ]
(<*CO_INFO(COMPANY_NAME)*>,Westcoast Distribution Inc)). Administrator should select Channel Rep as
user type and in Condition, enter [OR]([EQ](<*CO_INFO(COMPANY_NAME)*>,Eastcoast Distribution Inc),[EQ]
(<*CO_INFO(COMPANY_NAME)*>,Westcoast Distribution Inc)). The way the above rule works is also very
simple. When a user from the Channel Rep group accesses the Other Quotes tab, every quote is evaluated to

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 369
see whether or not the user who created that quote belongs to a company Eastcoast Distributors or Westcoast
Distributors. Those quotes that belong to those companies are then visible.

Rule 4

By default the employee from each company (Westcoast and Eastcoast) can only see their own quotes (My
Quotes). In order to allow each user to see quotes from their own company we need the following rule: User
Type should be set to Direct Sales, My company's quotes checkbox selected and Condition set to 1. The way
this rule works is also very simple. After a user from Direct Sales accesses the Other Quotes tab the user will
see all quotes where the quote owner has been added to the same company as the logged in user.

Involved Parties Quote Visibility Example for Quote 2.0

In the Sql Join box, join condition needs to be set for sys_QuoteInvolvedParties and
sys_PartnerFunctions tables:

LEFT OUTER JOIN sys_QuoteInvolvedParties qip ON qip.QuoteId = q.Id


LEFT OUTER JOIN sys_PartnerFunctions pf ON pf.Id = qip.PartnerFunctionId

Before setting up the prefiltering, check the query in the Developer Console. The query shows that q.Id
references Quote Id (alias q is used for sys_Quote table).

Additional WHERE condition can be specified in the Sql Where box:

(qip.Country != 'US' OR qip.Country IS NULL)


AND (pf.[Key] = 'bt' OR pf.Id IS NULL)

This example uses the partner function key bt to check if the business partner is not from the United States.

JOIN with sys_PartnerFunctions table can be avoided if PartnerFunction id can be used instead
(sys_QuoteInvolvedParties.PartnerFunctionId).

Note that in cases when one quote contains multiple involved partners with the same partner function key (for
example, there are two involved parties with the bt partner function key) and you want to show the quotes in
which all involved parties are outside of the United States, you should use only the Sql Where prefiltering since
using GROUP BY and JOIN would result in duplicate rows.

For example, if you want to exclude quotes in which any of the involved parties is located in the United States,
then you can use the following condition in the Sql Where prefiltering.

NOT EXISTS (
SELECT 1
FROM sys_QuoteInvolvedParties qip
WHERE qip.QuoteId = q.Id
AND qip.Country = 'US'
)

SAP CPQ Setup and Administration Guide


370 PUBLIC Quotes Administration
5.9 Reports

The Reporting Module allows authorized users to create reports, such as how many configurations have been
completed in a certain time frame, who completed them, how many quotes were generated or how many
projects were created, their status, activities by departments, individual users, customers, etc. SAP CPQ
administrators can set these reports up by using the administrative interface for the reporting module.

Reports link under the Quotes admin menu. The picture below shows a list of existing reports and some action
buttons which are used to Reporting Module administration is invoked by clicking on the Add, Change (edit),
Copy or Delete reports.

Clicking the Add New button brings up a new screen where user can choose to create a Standard Report (which
can have filters) or a Common TreeView Report.

Creating either a standard or a tree report requires the administrator to select from a list of standard views or
stored procedures.

 Note

Currently SAP CPQ does not provide any stored procedure as report source.

Reporting Module administration is invoked by clicking on theThe following picture, (Standard Report → View),
shows a typical list of standard views. Views are similar to tables that combine data from 2 or more SAP CPQ
database tables. After selecting the desired view, user will see a report definition screen as shown in the image
below:

The first column lists all the fields from the database that are available for the report using the selected “view”
from the previous screen.

Column order specifies which data (columns) should be included in the report and the order in which the
columns will appear from left to right.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 371
Sort Type controls data sorting within the column, either ascending or descending.

Example 1

The first report has the following columns: Quote Creator, Customer Name, Total Quote Amount. Sort Order,
Sort Type, Group By and Total are also defined. The report will display quotes grouped by Quote Creator and
Customer Name, and a sum of the Total Quote Amount.

Clicking the Preview button will bring up a screen with a preview of the report as shown in the following image:

SAP CPQ Setup and Administration Guide


372 PUBLIC Quotes Administration
 Note

To sucessfully preview the report, you first must select the Group By option for each column in which no
aggregate function has been applied (that is, each column in which Total is set to None).

Please note that all records that have the same Quote Creator and Customer Name are combined into one
row. The number displayed in the Total Quote Amount column is a sum of amounts of all quotes created by the
user whose name is displayed in the Quote Owner column and sold to the customer displayed in the Customer
Name column. In order to successfully define such a report, the administrator needs to specify what operator
to apply to all the fields (columns) that are not being grouped. These operators are located in the Total column
and the choices are Count, Sum, Max, Min, Ave, etc.

Example 2

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 373
The previous report also displays how many quotes were created by the user whose name is displayed in the
Quote Creator column and sold to the customer whose name is displayed in the Customer Name column. After
clicking Preview, the output is as follows:

Since database field names are not always user-friendly the Alias column is used to allow the administrator to
specify a more user-friendly name for each column. In some of the examples above, the column Name uses the
alias Quote Creator which is the name presented to the user.

It is also possible for the administrator to specify if a user should be able to use any search criteria. This is
accomplished by specifying the Condition operator as shown in the following image:

SAP CPQ Setup and Administration Guide


374 PUBLIC Quotes Administration
Next, the administrator needs to specify the mechanism for providing the search criteria value under the Value
column:

User Entry implies that the user will enter the desired search value.

User ID implies that only the data pertaining to a particular user will be provided in the report.

Search criteria can also be set to return only the record created on that particular day (Current Date).

The user can also select from the list of values (select one or more of those values). If the administrator selects
User Select (Single) or User Select (Multiple), the user will be presented by a drop down or a multi select list box
of search criteria.

In the case of User Select the administrator must select a source for the search data, which will be presented to
the user.

Here are two examples of user-selected searches. The first one has a condition operator of ”>” and User entry.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 375
SAP CPQ Setup and Administration Guide
376 PUBLIC Quotes Administration
Here is another example with Like operator:

The LIKE operator is used on a value typed in by the user. Here is the output:

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 377
The final steps in creating a report are illustrated in the following picture:

First select the User Group(s) that will have access to the report. The number of records per page has default of
10, which can be changed. A Report Description can be added. The report can then be previewed by selecting
the Preview button. All parameters can be reset by selecting the Reset button or the report can be saved by
selecting the Save button.

5.10 Cart Level Aggregates

Other than attribute values, in the product rules administration page you may set and read global variables
(globals, GI). Global variables are stored at cart level and are common for each main item/product
configuration in the cart. Global variables may be used to model the interactions between items and to define
action availability within the configuration. For details see the chapter on Global Variables [page 760].

Cart Level Aggregates are special Global Variables. When you define an aggregate you provide its name and
formula. This formula is evaluated for each main item in the cart. The evaluated formula is then converted to
a numeric value. If it can not be converted to a numeric value, the aggregate value for that particular item is
set to be zero. SAP CPQ will implicitly multiply each formula with the quantity of the item. The final value of
an aggregate is assigned to a Global Variable with the same name as the aggregate. This means that when you
define an aggregate you actually define a Global Variable.

 Tip

Since Quote Properties are also global, you must be careful to define unique aggregate names.

Cart Level Aggregates are a favorable method for calculating the sum of the numeric values in the cart. They
are calculated when an item is added to the cart, and during the Reconfigure action. Cart tags and some CTX
Tags [page 731] should be used in its formulas.

Example 1

• Aggregate Name: “Item Count”

SAP CPQ Setup and Administration Guide


378 PUBLIC Quotes Administration
• Formula: 1

 Note

As stated earlier, SAP CPQ will implicitly multiply each formula with the quantity of the item. This is why the
formula reads “1” – because if your item count is 3, the end result will be 3. In other words, this will create a
global variable “Item Count” and its value will be equal to a count of the main line items – number of added
configurations – in the cart.

Example 2
• Aggregate Name: “Total Hard Drives”
• Formula: <*CTX(Quote.CurrentItem.Attribute(attributename).Value)*>

This will create a global variable “Total Hard Drives” and its value will be equal to a product of quantities of
“Hard Drive” attributes in each item in the cart. If an item or a configuration does not have a “Hard Drive”
attribute, the aggregate value for that particular item will be set to zero, thus such items will not affect the final
aggregate sum value.

This aggregate/global variable can also be used in an action condition, for example:

[GT](<*GI(Total Hard Drives)*>,10)

This condition will allow an action if global “Total Hard Drives” is greater than 10. For more details on conditional
workflow actions see the chapter on Workflow Actions [page 416].

5.11 Bulk Deletion

The Bulk Deletion section allows administrators to delete other users, their quotes or their customers.

Administrators can clean up the system database by deleting old users, their quotes and customers. You can
access this feature in Quotes Bulk Deletion . Bulk deletion of quotes is only available for the Quote 1.0
engine.

On the Bulk Deletion page, you can choose whether to delete users and their quotes, or to delete local and
global customers in the system.

 Note

In Quote 2.0, you can only delete quotes using bulk deletion, not customers or users.

Delete customers

In this section, you can delete a user’s customers or global customers. To delete global customers, search for
customers in the table and select the checkbox next to the customers you want to delete. Next, click the Delete
button.To delete a user’s local customers, click the Select button next to Select User, and click the selection
icon in the list of users. The selected user's customers display in the section, where you can delete them by
selecting the checkbox next to the user and clicking Delete. Only active users can be selected in this menu.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 379
A customer can't be deleted if there are quotes associated with them. Make sure that all quotes associated
with the customer are deleted prior to deleting the customer.

Delete user(s) and/or their cart(s)

Before deleting a user, that user's customers must be deleted. Users can't be deleted if they are the
administrator of a company, an approval parent, managing parent, ordering parent, or have customers
associated with their account.In this section, you can delete a user’s account, quotes, or both. Search for
the users in the table. Two checkboxes display next to the name of the user. To delete a user from the system,
select the left-hand side checkbox. To delete only the user's quotes, select the right-hand side checkbox next to
the name of the user.

Deleting a user’s account automatically deletes their quotes as well. If you wish to keep the user’s quotes and
still delete the user, first reassign the quotes to another user, and then delete the user’s account. If you only
delete a user’s quotes, the account remains intact.

5.12 Column Headings


The Column Headings administrative section allows SAP CPQ administrators to control the columns displayed
to users on the Existing quotes page.

You can restrict the visibility of column headings to specific user types or you can make them visible for all
user types. You can also select the order in which the columns will be displayed on a quote. Available column
headings may include quote information, customer information, key attributes, custom fields and/or user
information. Any field available to users on the Existing quotes page can be sorted.

The Column Headings administrative section can be accessed via Setup Quotes . Here administrators
can add, remove, and modify the column headings.

To add a new Existing Quotes Column, click Add New. A blank definition page will be displayed. Selecting Edit
would bring up the same page. Fields starting with the blue asterisk symbol, (*), are required in order to save
the new column. When you add/edit a column heading, two additional check-boxes are enabled if the column
represents a quote custom field:

• Label : Editable - If this is checked users are able to change the value of this field from the Existing quotes
page.
• Label : Changing field value triggers quote recalculation - When users edit a field from the Existing quotes
page, the quote will be recalculated. This feature can be used when the field is used in other calculations in
the quote or when its value is transferred to quote items.

This feature will enable users to edit custom fields from the Existing quotes page. Users can change quote level
custom fields directly on the existing quotes page. For example, this can be very useful when changing the
expected close date for several quotes without opening them one by one. Additionally, you can define which
fields are editable and whether or not changing that field causes the entire quote to be recalculated.

Custom field types that are supported for edit are: Text Field, Attribute and Date.

When a user enters values in one of the editable quote fields and clicks Save, SAP CPQ will identify quotes
where the user has entered a value and save the quotes one by one. Unless you have marked the column to

SAP CPQ Setup and Administration Guide


380 PUBLIC Quotes Administration
trigger quote re-calculation, the values will be saved directly to the database without loading the SAP CPQ cart
(in the background). If the cart is loaded, the value will be saved and all calculations will be triggered, transfer to
item feature executed and so on (similar to how calculations are triggered when the user updates the field from
the cart).

• Available Fields contains the fields that can be displayed. These include any key attributes, custom fields,
and default fields, which include cart information, customer information, and user information.
• Label field determines which text will be displayed in the column heading on the user side.
• User Type determines which user types will be able to see this specific column heading:
• All User Type option allows all users to see the column heading.
• Selecting any specific user type will enable only that user type to see the column heading.
Consequently, as soon as you click Save, the user type in question will only be able to view column
headings assigned to them, while the column headings assigned to All User Type will become
inaccessible to them. (For example, if all user types have access to column headings A, B, C and
D, while users from the Sales user type have access only to B, they will not be able to view A, C and D,
even though they are assigned to All User Type).
• Search Fields Order lists all the column headings currently being displayed to users. The fields are listed in
the order that they will be displayed to the users. The fields listed at the top will be displayed on the left
side of the quote list.

To add a new column heading, select the heading field from the Available Fields and click Add to Column
Headings to add to column to the Existing quotes page. User can then order the selected fields by selecting the
column heading and clicking the up and down arrows in the Search Fields Order list box.

 Note

User can only add one column heading at a time. To add another column heading, save the current
addition, then go back into the column heading administrative section by clicking Add New.

When editing a column heading, if desired, users can only remove and edit the label of the heading that is being
edited. Users can modify the ordering of all the headings while editing a particular column heading though.

5.13 Email Customers / Quote Acceptance Settings

This option can be used when there is need to customize default settings when sending an email after
generating documents.

Send Email To Customer Form

• Don't preselect TO on Send Mail - Set to TRUE in order not to preselect To on Send Mail.
• Don't preselect CC or BCC on Send Mail - Set to TRUE in order not to preselect CC or BCC on Send Mail.
• Emails are sent by - In Quote 1.0, emails can be sent via the CPQ Mailer, User's Mail Client, or they can
choose between the two during the document generation process. In Quote 2.0, only the User's Mail Client
option can be used.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 381
• Users can attach generated document to the Email. This option is - SAP CPQ Admin is able to define
whether option to attach document is hidden, visible, or pre-selected for the user.
• Predefine Email Subject - Admin can predefine email subject. Also tags and expressions can be used.
• Predefine Email Body - Admin can predefine email body. Also tags and expressions can be used.
• Update Opportunity activity in Salesforce after sending Email to Customer - Set to TRUE in order to update
opportunity activity every time email is sent.
• Attach document to CRM opportunity when sending Email to customer - Set to TRUE to automatically
attach generated document to opportunity.
• Hide option to send document to opportunity from user - Set to TRUE to hide button 'Send to CRM'
• Hide Send Email Form after document generation - set to TRUE to hide the option to send an email after
document generation, so that the user can only download the document. This parameter should be set to
FALSE if you want to send the document for e-signing.

Electronic Quote Acceptance Parameters

• User used for Quote Acceptance - In this field, you can set up a user who will be able to open proposal links
from the emails. Their password expiration date mustn't be exceeded.
• Show Generated Document On View Proposal - You can set if generated document can be downloaded from
View Proposal.
• Show Quote On View Proposal - You can set if generated document is shown on View Proposal.
• Users can send quotation link in the Email to customer for electronic acceptance process. This option is - You
can define whether option to send quotation link is hidden, visible, or pre-selected for the user.

 Tip

To make action Send Document to CRM visible on the Download Document and Send Email page, set
application parameter Hide option to send document to opportunity from user (located in the Email
Customers/Quote Acceptance Settings, in the Quotes submenu) to False.

Translating Predefined Email Body and Subject

You can translate a Predefined Email Subject or a Predefined Email Body using Dictionaries and CTX tags (our
example illustrates how to translate the Predefined Email Body). To translate a Predefined Email Subject, you
must first choose the Dictionary Key [page 702] of the value you want to appear in the email body. Once you
have done that, you should complete the following:

1. Go to Quotes Email Customers/Quote Acceptance Settings where you will click the syntax checker
button, select CTX from Available Tags and click Construct CTX tag.
2. Select Dictionary from the Select CTX tag object dropdown menu; select Current from the Select Dictionary
object
3. To insert the value of your previously chosen Dictionary Key, select Value from the Select Current object
dropdown menu.
4. Click the AB button (Show Editable Argument) from the Select Value argument to be able to insert your key
between brackets in the Your CTX tag: field

SAP CPQ Setup and Administration Guide


382 PUBLIC Quotes Administration
5. Click Insert.
6. Check to see that the Condition entry field has been populated with the appropriate CTX tag; note that you
will have to manually enter the Dictionary Key in the field.
7. Click Check Syntax and if the system OK's it, click Update.

8. Made sure that the Predefine Email Body entry field has been populated with your CTX tag and click Save.
9. Once you have downloaded documents in Quote and you are ready to send your email, your Predefined
Email Body will be translated and populated in the Email Form (Figure 6). Note that the system will
translate your Predefined Email Body to the language set by the Default Dictionary option on User Page.

5.14 Favorites

Favorites will be presented to users in a widget that will be placed in different pages in SAP CPQ (quote, catalog,
configuration and special page for Favorites).

For each favorite, users will be able to see favorite’s name, favorite’s description, part number, product that
is used as favorite’s base and category where this product belongs to. Users will be able to search favorites
based on all these fields. User will be able to sort all columns in this table. Search There are three check boxes
on which user will specify whether they want to search My Favorites, Company Favorites and All Favorites. By
default, all three check boxes will be selected.

Users will be able to add favorites to current quote or to create new quote (if one is not loaded yet in session)
by choosing one or more favorites from table and clicking on ‘Add to quote’. If result is success for favorite, it is
added to the quote. If at least one favorite is incomplete, user will not be immediately taken to quote. Instead,

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 383
same screen will be displayed to user from where he can continue to quote or complete favorite (clicking on
‘complete’ link will take user to product configuration with favorite loaded).

User will be able to delete only favorites they have created. System will prompt user whether he/she is sure
favorite should be deleted.

To enable favorites, the application parameter Users are able to create product favorites needs to be set to
TRUE.

Favorites are also supported in the Quote 2.0 engine.

User Side - catalog

Two new icons will be added to the catalog:

• Add to Favorites - Users will be able to add both simple and configurable products to favorites from the
catalog (for simple product there will be only ‘Add to Favorites’ icon).
• View Favorite Configurations for this product - In catalog, users will be able to see icon for configurable
products (as well as systems and collections).Mouse over for icon will be ‘View Favorite Configurations for
this product’. When user clicks on ‘Favorite Configurations’ link, favorites for that product will be displayed.

SAP CPQ Setup and Administration Guide


384 PUBLIC Quotes Administration
In product configuration, 2 new icons will be added – ‘Add to Favorites’ and ‘View Favorite Configurations for
this product’. Users who belong to appropriate user types will be able to define favorites for their company and
for all users (these check boxes will be displayed only to appropriate user types).

User Side - Quote

Users will be able to add favorites to current quote from the widget. New quote item action ‘Create Favorite’ will
be added. When users click on it, pop-up will be displayed where users will be able to enter favorite’s name and
description. Item action will be available for all main items (both configurable and simple products).

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 385
5.15 Images for Quote Actions

The purpose of this feature is to enable images for quote actions so that users can easily spot them.

User Side

In quote, depending on value of application parameter,actions will be displayed with images. Actions will be
sorted by sort order (actions with empty sort order field will be displayed at the end). If actions have empty
sort order (applicable for all existing clients), quote actions will be displayed in the same order as before. Some
actions will always be displayed and some will be collapsed.

SAP CPQ Setup and Administration Guide


386 PUBLIC Quotes Administration
Setup

There will also be a flag (application parameter) – ‘Display images for quote actions’. When this flag is selected,
users will see quote actions in the quote. Default value for flag will be FALSE.

Admin will be able to edit action. When he clicks on ‘Edit’, he will be able to change :

• Action name - required field


• Sort Order (within quote)
• Primary action - Include info icon : Flag decides whether action is displayed always to users (cannot be
hidden by clicking on ‘Collapse’ button)
• Image - Admin will be able to upload image for quote action

5.16 MRC Column in Existing Quotes

The purpose of this feature is to allow MRC total amount as column in the list of existing quotes.

In Setup Quotes Column Headings and in Setup Quotes Search Fields administrator should
add new field ‘Total MRC Amount’ to the list of Available Fields.

This field will return total MRC amount on user’s side in the same way as field ‘Total Amount’ returns total NRC
price.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 387
5.17 Quick Config (also referred to as Reverse Search )

The purpose of the Quick Config functionality is to provide a shortcut for searching and configuring the
configurable product at the same time.

This is achieved by entering a part number and attribute values that you would like to configure for the
particular product. If your search query matches the search pattern for that product (previously defined
through SAP CPQ setup by administrator), then SAP CPQ finds your product, preselects attributes that you
stated in your search query and finally adds product to the quote.

In classic design, the Quick Config field is located at the right side of the main menu. In responsive design it is
located in the quote.

If you are using classic design quick config, you should choose “Part Number Search” from the dropdown, type
your search term and click on search button.

If you are using responsive design you should enter the quote, type your search term and click on the “gear”
button at the right side.

 Note

To make the next example applicable, make sure that parameter Setup General Application
Parameters tab General Parameters Optimize Part Number Search For Simple Products has its value
set to false. This parameter must be set to true only if you want to search simple products. If this parameter
is turned on, then Cat Matching table search is ommited, and search is only performed against products
table

Example

This example explains how to set up a Quick Config for the product. It also demonstrates this functionality in
action.

Steps for administrator to create a product that will be searchable by Quick Config.

1. 1. Go to SAP CPQ Setup Products and add a new configurable product named: Mercedes Benz w204
C class
2. 2. Define three attributes for this product as follows:
1. attribute Color with four possible values: gray, black, white, red
2. attribute Fuel with two possible values: petrol, diesel
3. attribute Equipment with four possible values: classic, elegance, avantgarde, amg
3. Create a part number as follows: mercedes-c-w204-<*VALUE(Color)*>-<*VALUE(Fuel)*>-
<*VALUE(Equipment)*>.
Note that, this way, you defined a dynamic part number that depends on selected values for three
attributes.
4. Under Current product click on Code Matching item.
Here define a code matching searching string that will be checked during quick config searching
5. Enter matching string as follows: mercedes-c-w204-

SAP CPQ Setup and Administration Guide


388 PUBLIC Quotes Administration
Note that code matching string should match a static part of part number so quick config could match it to the
right product.

Now, when you are done with quick config set up you can see how it works.

In classic design type search term as follows: mercedes-c-w204-gray-diesel-classic. SAP CPQ will check if
there is a product in your list of products that has this particular part number. Since there is no product
with this part number, quick config search begins. In the essence, quick config will check your list of Code
Matching strings to check if any code matching string matches your search term. If it is found (in our
example ”mercedes-c-w204-” code matching string will be found), quick config will then check if the rest of the
search term contains values of product attributes. If it contains, and values are valid (in our example they are),
quick config will redirect you to the Configurator with the product configured according to your search term.

Apparently, you will get the product Mercedes Benz w204 with preselected attributes color, fuel and
equipment. Their preselected values will be gray, diesel and classic, respectively.

Note that there is an assumption that each product that you want quick config to take into consideration,
should have unique part numbers and code matching strings. Also, quick config must find only one product
and configure it if your search term contains the appropriate, valid attrbiute values in the right order as you
defined it in part number field. If the order of attributes is not good, or attribute values provided through the
search term does not fit, then quick config will not be able to find the product and the appropriate message will
be displayed.

If you want to add more than one products to the quote this way, you should use the Add Items in Bulk feature.
Here is an example how to add and configure two different products by using Add Items in Bulk and add them
to the quote.

Let's assume that there is another product named “BMW Serie 3” in our product list and that Code matching
string bmw-e90-3- is defined for that product. Two attributes, color and fuel are defined and part number of
this product is bmw-e90-3-<*VALUE(Color)*>-<*VALUE(Fuel)*>

Go to Add Items in Bulk and type search terms bmw-e90-3-white-petrol and mercedes-c-w204-white-petrol-
elegance and click on validate button.
If you entered valid search term, quick config will find your products and offer you to add them to the quote.

5.18 Quick Product Search in the Quote

Quick product search on ‘Add Products’ section is used for finding all types of product (simple or configurable)
or favorites by typing any part of its part number, product name or description.

When user enters search criteria, SAP CPQ will look for products that have entered search criteria anywhere in
the part number/name/description, or on the beginning of the word(depends on how application parameter is
set).

When search doesn’t produce any results (both within favorites or products), SAP CPQ will show the messages
for part number search: Auto-complete search didn’t find any products or favorites with this part number. The
same message will be displayed if the appropriate name/description is not found.

When users click on See more results link in the message, SAP CPQ will try to find products by using standard
product search (as if user clicked on the product part number search) in the top right corner of the screen. If
SAP CPQ finds any results, user will be taken to the catalog where results are displayed (in the same way as if

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 389
user entered part number in the top right corner of the screen). If SAP CPQ doesn’t find any results, message
will be displayed: Additional search didn’t find any part numbers that contain searchcriteria.

Quick product search from the quote will be controlled with new application parameters, Product Search On
The Quote Can Find Configurable Products and Product Search On The Quote Can Find Product Favorites.
They are set on TRUE by default. If parameter Product Search On The Quote Can Find Configurable Products
is set to TRUE, SAP CPQ will look for configurable products when user starts typing either part number of
name/description (SAP CPQ will look for matching part numbers/names/descriptions in the same way as it
looks for simple products – there will be no reverse configuration done, parsing of descriptions and so on)
If parameter Product Search On The Quote Can Find Product Favorites is set to TRUE, SAP CPQ will look for
favorites when user starts typing either part number of name/description (SAP CPQ will look for matching
part numbers/names/descriptions in the same way as it looks for simple products – there will be no reverse
configuration done, parsing of descriptions etc.) When user clicks on the product, he will be taken to the
product configuration. If user came from the quote (and not from the catalog), breadcrumbs will be different –
Current Quote link will be displayed instead of categories. It is important to note that there will be no products
loading, processing of product rules, description parsing etc. when search results are displayed. This will
happen only when user clicks on the product.

Product search in Catalog

User has entered SAP CPQ and goes to catalog start page. Instead of browsing through categories, user can
start typing product, category or favorite name and find appropriate item. This will reduce the time it takes
for user to find the item that she is looking for – typically users know what they want to quote. This behavior
will be controlled with application parameters: Enable auto-complete product search in catalog by part number
and show part number in results and Enable auto-complete product search in catalog by product description and
show description in results. If those params are set to TRUE, user can choose will search be done via product
part number or product name/description.

User has different search options for categories: Entire catalog (Search is done for entire catalog) and Category
Name specified (Search is done within this category and all its sub-categories and their sub-categories and so
on).

When user clicks on ‘See more results’, they will be taken to the catalog where SAP CPQ will search for the
products in the same way as if user entered part number or name/description in the top right search box (in
top menu) and clicked on Search.

When search doesn’t produce any results (both within product or favorites), SAP CPQ will show following
messages for part number search: Auto-complete search didn’t find any products, categories or favorites with
this part number.

Within search results, user can click on:

• Configurable product - In this case, user is taken to the product configuration page
• Simple product - View details pop-up is displayed for this simple product
• User has the option to Add to quote. If this is clicked, product is added to the quote and user is taken to the
quote screen (if quote doesn’t exist at this moment, new quote gets created)
• Favorite - By using the same logic as for products, user is either taken to product configuration screen or
product details page is displayed with favorite name and description displayed instead of product name
and description
• Category - User is taken to this category

SAP CPQ Setup and Administration Guide


390 PUBLIC Quotes Administration
If catalog top is not displayed (parameter SAP CPQ Setup UI Design Catalog Layout Display top
selection menu in Catalog set to FALSE), Search widget will be displayed above the breadcrumbs.
Breadcrumbs will not be displayed for home category. Instead of Home Top Category , there will be
only one node Home Category that will take users to the top category page.

5.19 Quote Item Custom Fields

Custom fields on quote items are able to hold values of different types.

Users are able to edit values of item custom fields in the quote. When administrators add new (or edits
existing) custom field, they are able to administer item custom field:

• Name- This field is required. You cannot save two or more custom fields with the same name
• Label- When you are defining new fields, after you finish typing a name, the label is populated with what
was typed in the Name field.This field is required.
• Type- Once you define the type of the field, it cannot be changed. Five types are available:
• Number - (selected by default). Custom fields of this type can have decimals. They can also have
negative values.
• Date - Custom fields with Date type will be saved in the same way quote custom fields that are dates
are saved (in default format mm/dd/yy).
• Currency - Custom fields of this type are calculated and saved in the same way as other prices in
SAP CPQ (list price, cost, extended amount etc.). Values will be saved in default currency (dollar) and
current market and currency factors will be applied when displaying this value.
• Text - all characters are supported.(When admin is editing existing field, this field is displayed as
read-only)
• Attribute - This type allows you to connect your quote item custom field to an autocomplete attribute
(other attribute types are not supported). This way, in the quote, you get the text box where you can
select the quote item custom field value from the list of attribute values. If you set an attribute of the type
„Auto-complete“ to be connected to your custom field, then in the quote, instead of drop box, you get the
autocomplete text box where you can type a value that you want to assign to your quote item custom field.
As you start typing, autocomplete offers a list of values that either starts with the typed combination of
letters, or contains it. You can also set the value of autocomplete item custom fields via scripting by using
the Value Code property, as explained in Autocomplete Attributes [page 32].
• Order of calculation - This field can accept only numbers. Default number is 10. If admin deletes everything
and clicks on the field, value 10 is saved for the field.
• Calculation Formula - This field will accept standard SAP CPQ tags.
• Display summary in the quote - Default value is FALSE.
• Always include in KO context - When the checkbox is selected, the field is included in the knockout
context and sent to the user's browser. Consequently, you can use the hidden quote item custom field for
processing in responsive templates. (Example: A quote item custom field controls whether a product’s cost
used for calculating the line item’s list price is editable. The field is hidden from quotes as users do not
need to see its value. However, if Always include in KO context is selected, administrators can use the field’s
value when defining the responsive templates to control whether the list item’s price is editable or not.)
• Contains Personally Identifiable Information - All information that could potentially be used to identify an
individual should be flagged as PII.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 391
• Suppress Information Logging- You can prevent old and new values from being logged as an additional layer
of protection.

 Note

If a quote item custom field is not visible on the quote layout, and the Always include in KO context is
selected, the field value will be visible in the hiddenValues observable array. To retrieve the field value, use
getHiddenValue(“QICF_Name”). If a field does not exist, the function returns FALSE. The function does not
have to contain the complete name of a quote item custom field. You can enter only a part of the name and
the system will find the first field whose name starts with the defined string and it will return its value.

Example

Log into SAP CPQ as an administrator and go to Setup. You need to create a new attribute of type Auto-
complete, and then select it as an underlying for your custom field. If you need instructions on how to create an
Auto-complete attribute, take a look at Autocomplete Attributes [page 32].

Once you have created the attribute, you want to create new Quote Item Custom Field by going to Setup
Quotes Quote Item Custom Fields and clicking on Add New button.

Form for adding a new Quote Item Custom Field is displayed.

Fill out Name field, select Attribute from the Type dropdown list and select the particular attribute (that you
have previously created). Click Save.

In order to be able to see your newly created Quote Item Custom Field, you need to do three things:

• add it to the appropriate permission group


• move it to the list of visible custom fields
• add it to the quote editable group

More information on how to add the custom field to the appropriate permission group is available on this link -
Quote layout permissions [page 394]

More information on how to move the custom field to the list of visible fields is available on this link - Visible
fields [page 394].

Also, you will have to insert a translation for your custom field into SAP CPQ dictionary. You can find more
information on how to achieve this by following next link - Creating Custom Dictionary [page 703]

Now, your Quote Item Custom Field is set up. To see how it works, go to catalog and create a new quote. Your
custom field is displayed in the quote as a column and you are able to select a value for it.

Once you define the type of the field, it cannot be modified. (When admin is editing existing field, this field is
displayed as read-only)

Order of calculation - This field can accept only numbers. Default number is 10. If admin deletes everything and
clicks on the field, value 10 is saved for the field.

Calculation Formula - This field will accept standard SAP CPQ tags.

Display summary in the quote- Default value is FALSE.


For each item custom field that is defined, new editable groups will be available in the Available Fields section
in Cart Fields Administration. Example – when user adds field ‘Delivery Date’, fields ‘Main Item – Delivery Date’

SAP CPQ Setup and Administration Guide


392 PUBLIC Quotes Administration
and ‘Child Item – Delivery Date’ will be added. When user deletes particular item custom field, all related
editable fields will be removed from here.

If certain field is found among quote editable fields (found in Editable Field group), it will be displayed as every
other editable field. When developing this template in xslt, we should make an effort to make it as easier as
possible for the admin to show item custom fields in the quote. When user clicks to edit currency item field, it
will be displayed as every other price field on the quote. When user edits number field, it will be displayed in
the same way other numbers (e.g. Quantity) are displayed on the quote. After user changes value for particular
field, SAP CPQ will display icon indication that currently displayed value is different from default value (default
value is calculated every time other quote item custom fields are calculated). This icon will be displayed only if
default value is not empty (if it is empty and user entered something in the field, no icon will be displayed).

 Note

Quote item custom fields are created and evaluated once quote items have been created, so they should
not be used in any item calculation, including item discount, multiplier, etc. Additionally, they should not be
used in any item information, including information regarding the product or attribute, such as description,
part number, price, cost, among others. That said, it is possible to use quote item custom fields in item
calculations or item information – but this can be carried out only with a Reconfigure action which can
negatively affect system performance. For this reason, it is not recommended.

SAP CPQ will execute calculation only if any of the data used by the quote has been changed. For example,
if the entered value of a particular custom field was 100, and has remained 100 following any changes, the
calculation will not be executed.

New CTX tags are developed:

• CurrentItem:
• <*CTX(Quote.CurrentItem.CustomField(“CustomFieldName”) )*>
• Total:
• <*CTX(Quote.Total.ItemCustomField(“CustomFieldName”).Summary )*>
• <*CTX(Quote.Total.ItemCustomField(“CustomFieldName”).Maximum )*>
• <*CTX(Quote.Total.ItemCustomField(“CustomFieldName”).Minimum )*>
• <*CTX(Quote.Total.ItemCustomField(“CustomFieldName”).Count )*>
• Rolled-Up Items:
• <*CTX(Quote.CurrentItem.RolledUpItemCustomField(“CustomFieldName”).Summary )*
>
• <*CTX(Quote.CurrentItem.RolledUpItemCustomField(“CustomFieldName”).Minimum )*
>
• <*CTX(Quote.CurrentItem.RolledUpItemCustomField(“CustomFieldName”).Maximum )*
>

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 393
5.20 Quote Layout

This functionality enables system administrators, and selected users, to personalize their shopping cart/quote.
This functionality is available in Responsive Design only.

To use Quote Layout, open Setup UI Design Quote Layout . Once you complete this entry, a page
comprising Quote Columns and Quote Sections will open up.

The Available Columns list box contains all available quote columns. From this list, admins can choose which
columns they will be displayed in the quote. Admins can use left and right arrows to move selected columns
from an Available Columns list box to the Selected Columns list box.

The Available Selections list box contains all available sections. From this list, admins can choose which
sections they will be displayed in the quote. Admins can use left and right arrows to move selected columns
from an Available Selections list box to the Selected Sections list box.

The administrator will be able to set permissions for layout based on permission groups. She/he will be able to
set which columns/sections will be allowed to chosen permission group.

Quote Layout Permissions

Quote Layout Permissions enables administrators to set permissions for the quote layout based on permission
groups. To determine which columns and sections will be allowed to which permission groups, go to Setup
Quotes Quote Layout Permissions. Once you click Add New you will be redirected to the Quote Layout
Permissions page where you can select which column/sections will be open to which permission group.

On this page you will be able to define one permission group that will be allowed to see Quote sections/
columns. You will be able to find this permission group from a list of User Types, Companies, Brands and
Manually Created Groups.

The permission group Visible to Everyone will be added by default. This permission group contains all
permission groups and cannot be deleted.

User Side

Users will be able to set their own Quote Layout and change behavior set for their permission group. This is
done on the User Quote Layout entry on the User Page menu. Once you click this link, a page will open up where
you will see:

• Quote columns
• Quote sections

The Available Columns and Available Sections: only columns and sections selected for the user’s permission
group will be displayed in the Available Columns and Available Selections lists. Selected columns will be
populated based on the selection in the Quote Layout Permission. Users can override this by hiding columns

SAP CPQ Setup and Administration Guide


394 PUBLIC Quotes Administration
they don’t want displayed it in the quote. Now take a look at what your selections will look like in your quote:

Quote Item Custom Fields

When Display summary in the quote is checked on the Quote Item Custom Field in Quotes in Setup: related data
should appear in Total Summary and Totals in the quote if the field is selected in Quote Layout in Setup and on
the User Side.

 Note

Note that the value entered in the Type field must be Number or Currency. The system will not recognize
the Text value type.

Before viewing your Quote Item Custom Field in the quote, don’t forget to add your it to the appropriate Quote
Layout Permission Group and Quote Layout.

Related Information

Quote Troubleshooting

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 395
5.21 Quote Revisions

A quote revision is a copy of the quote from which the revision was created.

You can create as many revisions as needed and they do not have to be directly sourced from the master quote.
All revisions with a common master quote have the same quote composite number.

When you create a quote revision, all the data from the source revision will be copied to the new revision. All the
subsequent changes will not be propagated from the source quote to the revision and vice versa.

Quote revisions allow sales representatives to create multiple quote versions before the final agreement on
the offer is reached. Additionally, they can track how the offer changed over time by accessing the revisions’
history.

Example

A sales representative John is creating a quote for a family looking to refurnish their kitchen. The family wishes
to buy a table and a cupboard, so John creates a quote for the pieces that fit into their budget. Additionally,
John creates a quote revision and adds a set of chairs that match the design of the table and the cupboard.
The family likes the new offer but they think the price is a bit out of their range. John creates a new revision,
changes the discount and sets the revision as active. From there on, the revision will go through the approval
process and if the revision gets approved and the family accepts the offer, the deal will be closed. If new
changes to the offer are needed, John will create new revisions accordingly.

Setup Prerequisites

Handling quote revisions is completely on the user side of SAP CPQ, and other than the workflow settings, no
other adjustments need to be made by administrators.

First, you need to allow the user type to access the revisions-related actions. In Workflow/Approval
Workflow Permissions , allow the user type to access these actions:

• Edit
• View
• Delete
• New Active Revision
• New Revision
• History
• Set Active

Also, in Workflow/Approval Workflow , add the actions to the quote status. Secondly, in General
Application Parameters , find the parameter Available actions for Inactive Revisions and select one of these
values:

SAP CPQ Setup and Administration Guide


396 PUBLIC Quotes Administration
• Based on status of ACTIVE revision - users can delete and edit only the active revision (although deleting
the active revision will delete all related revisions as well). Also, when this parameter is on, you can create
an active revision only from an active revision.
• Based on status of EACH revision - users can delete and edit all revisions (active and inactive).

 Note

If you delete an active quote revision, it's pertaining master quote and all related revisions will be deleted as
well.

Application Parameters

Two application parameters influence the behavior of revisions:

• Reset Quote Expiration Date on New Revision - if set to TRUE, the system resets the expiration date of every
new revision. The parameter is supported by both Quote 1.0 and Quote 2.0.
• Copy Opportunity Id On New Revision - if set to TRUE, opportunity Id is copied to every new revision of the
quote. Supported only by Quote 1.0.

5.22 Create Quote Tab

Quote tabs are used for organizing information on quotes.

Context

There are several default quote tabs which enable you to access and edit billing and shipping information,
upload files to a quote and so on. You can also add new tabs if needed.

Quote tabs can only be created after general tabs [page 701] are created. To create a quote tab:

Procedure

1. Go to Setup Quotes Custom Quote Tabs .


2. Click Add New.

A new page is displayed.


3. Select a tab from the Tab Name dropdown list.

The Tab Name dropdown list shows all existing general tabs, including the ones you created.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 397
4. In the Type dropdown list select one of these options:
• Implementation File: when selected, it renders an existing SAP CPQ page in the quote tab. Some of the
pages are loaded in classic design only, even if you are using the responsive design. On selection, the
available implementation pages display in the Implementation file dropdown list. If you wish to add only
custom fields [page 360] to the custom quote tab, leave the Implementation File field empty. The blank
custom quote tab will still be visible and it can be added to quote. You can add custom fields at any
time.
You can't use the same implementation file to create multiple quote custom tabs.

 Note

If you've created multiple quote custom tabs with the same implementation file before the 2208
release, the settings will stay unchanged after the release. However, you won’t be able to edit the
tabs with the same implementation file unless you first select different files.

• /quotation/ShippingInfo.aspx
• /quotation/ResponsAbilityCollaboration.aspx
• /quotation/OrderConfirmation.aspx
• /quotation/Opportunity.aspx
• /quotation/CustomPage.aspx
• /quotation/Cart.aspx
• /quotation/Attachments.aspx
• IFrame: when selected, you can develop custom logic on your own, or connect your tab to a custom
page you have developed. For example, you can create a new quote tab that will display key attributes.
For more information on creating custom logic for retrieving and displaying key attributes, refer to this
page [page 615].
5. Enter the rank in the Rank field.
6. Click Save.

The page where all the custom tabs are listed is displayed.

When a quote tab is created, it will be visible on the quote. You can manage the visibility of the quote tabs
on the Quote Tab Permissions [page 359] page.

5.23 Renewal Management (only Quote 1.0)

Renewal of product and services is one of the key business operations in many industries, especially in Service
oriented industry.

 Note

This feature is currently available only in Responsive Design and for the Quote 1.0 engine. There is an
improved Renewal Management feature that is available only for Quote 2.0 in the integration with SAP
Billing and Revenue Innovation Management.

SAP CPQ Setup and Administration Guide


398 PUBLIC Quotes Administration
Renewal process allows companies to resell the exact same product or a service after some period of time
to the client to whom it sold earlier. Various sales scenarios could be considered as renewal: Auto renewal,
Product upgrade, Contract extension, etc.

Products or services sold to some client are usually recorded in external system, (e.g. CRM) in the form
of “Assets”. Assets provide details on the existing products/services that Customer is using, like Product
name, Price, Install date, Usage end date, etc. All information contained in the “Assets” is usually sufficient to
understand when and what should be renewed for particular Customer.

SAP CPQ offers its own renewal process, so all assets can be stored locally. On this page, you will find more
information on how to set up a Renewal Process in SAP CPQ, and how to utilize it.

Create Asset Table

The first step in creating and enabling Renewal Process is to create an Asset table. This table is going to be
used to store details on each asset created in your SAP CPQ environment. Note that you can define only one
Asset table.

To create Asset table, log into SAP CPQ as an administrator and go to Setup Renewal Administration
Define Asset Table
There is a list of available fields, list of selected fields and a list of fields that you want to be visible
on UI. Note that in column Selected Fields, some fields are pre-selected and you cannot deselect them.
You can add more available fields, or create new custom columns and add them. Once you define
a list of visible columns, you can proceed by clicking on Save button. Your asset table is created.
While you are using SAP CPQ, the asset table can be accessed anytime, since the link to the Asset

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 399
table is located in the top menu, under item Quotes. Next figure shows how Asset table looks like.

The Renewal Process in Short

When you sell a product or service to some customer, you have the option to create an Asset. Later, when you
want to resell the asset to the client, you can go to your list of assets, pick the desired asset and add it to the
quote (renew the asset). Depending on how you setup your Renewal Process, once the quote is completed,
either existing asset is going to be updated, or new asset is going to be created.

You define the phase when the asset is to be created through Workflow. There is an action named Create Asset
that can be set in workflow as a post action for some quote status (e.g. Quote Won status), that will trigger
automatically.

An asset can be in one of the following four statuses:

• Purchased – Meaning that the asset is added to the asset table after the quote is completed
• Pending – Meaning that the asset is added to the new quote which is not yet completed
• Renewed – Meaning that the asset is renewed (Update Asset option is not checked), and new asset is
created from it
• Obsolete – Meaning that the asset is linked to inactive product version

SAP CPQ Setup and Administration Guide


400 PUBLIC Quotes Administration
Asset table contains information about products previously purchased by the customer. By selecting which
asset is to be renewed, and then clicking on the “Renew” button, the selected assets are added to the quote.
Assets may have different statuses, but only assets that are in the status “Purchased” can be renewed.

In the next section, you will read some details on how to setup your Renewal Process.

Setup action “Create Assets”

This is the action which creates Assets for you. To find and set up the action, go to Setup Workflow/
Approval Actions , and find action Create Asset from the list of actions. Click on edit icon.

The purpose of this action is to record products from the quote into the Asset Table. On edit page of the action
you can set conditions under which the action will be performed.

You may decide that only particular user group(s) should be able to perform Asset renewal. You can set up
this by setting action condition and/or workflow permissions. Action could be attached to the quote status,
and once the quote reaches the desired status (e.g. Closed/Won), the Main Line Items along with the product
configuration will be automatically recorded in the Asset Table.

Setup Product Renewal Options

Two options are available to control product behavior in the renewal process (Update Asset and Always Allow
Renewal). They can be found in the Additional Product Data section under Setup Products Product
Definition .

Update Assets

If this option is selected, then when Create Asset action is triggered, the existing asset is updated. It changes
status from Purchased to Pending. In the contrary, if this option is not selected, then the existing asset changes
its status to Renewed, and the new version of the asset with status Purchased is created (recorded in Asset
table).

Always Allow Renewal

If this option is selected, it will be possible to renew assets in the obsolete status. Those are assets that have
underlying product with an inactive product version.

Renewal management fully supports complex product configurations, including configurable products and
parent-child product configurations. When the user adds a configurable product from the asset table into the
quote, the entire configuration that was initially sold to the customer will be automatically added into the
quote. All line items from the parent-child configuration will be independently recorded as separate assets into

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 401
the asset table, so users can decide whether the entire configuration or only some parts of the configuration
should be renewed.

 Note

Product renewal is currently not supported for Variant Configuration products.

Example

In this example, we will show you the life cycle of the asset and how the renewal process works. We have a
configurable product named „Hosted email“. We want to sell this product and also to have an asset once it is
sold.

Earlier, we have configured our workflow in the way that our action „Create Asset“ triggers as a post action on
the quote status „Quote Won“.

We created new quote by configuring and adding our product


„Email hosting“ and we put 10 as a number of desired emails.

The quote is in status Open. We worked on the quote, entered billing and shipping information, generated
quote, and finally completed quote (meaning that quote is now moved to status „Quote Won“).

By completing the quote, action „Create Asset“ is triggered, since, previously it has been set as a post action.

Since action is triggered, our asset is recorded and we are able to find it in our Asset table (list of assets).

Our asset is now in status „Purchased“.

Assuming that we want to resell „Hosted email“ product to the same client, configured exactly the same, we
can select the asset in our Asset table and click on Renew button above asset table.

SAP CPQ Setup and Administration Guide


402 PUBLIC Quotes Administration
This way, we created a brand new quote with „Hosted email“ product configured exactly as it used to be. At this
moment our asset is in status „Pending“.

Note that only assets that are in „Purchased“ status can be renewed. Therefor, we are not able to select our
assets yet, since the quote is not yet completed.

Now, we go to the quote, and update quantity field from 10 to 15, and complete the quote. Since the quote is
completed, action „Create Asset“ is triggered one more time.

Since the option „Update Asset“ is selected for our product, our asset is updated with new values (quantity is
now 15), and it moved to „Purchased“ status again.

If the option „Update Asset“ was not selected, then our previous asset would have gotten status „Renewed“,
and a brand new asset would had been created with status „Purchased“.

Now, if we go to product setup and make a product version 1 inactive, and option „Always Allow Renewal“ is not
selected, our asset will be in status „obsolete“.

But, if you select option „Always Allow Renewal“, then asset will be in „Purchased“ status and therefore
renewable.

5.24 Report Module

This feature gives users a Reports and Dashboards Overview Page that includes a list of existing reports in the
system. As an SAP CPQ administrator, you can search reports and executed different actions on them.

Here is a list of all actions available on each report: edit, clone, view, and delete.

A Delete button is located at the top right corner. Administrators can select several report actions and delete
reports in bulk. This enables administrators to avoid having to delete one by one. To create a new report click
New Report and to create a new dashboard, click New Dashboard. The list on the left contains all existing labels
created by admins users. Labels help admin users organize reports into categories. Administrators can add
more than one label to a report, which makes it easier to find a report when searching for it.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 403
Labels

Labels help administrators organize reports or dashboards into any category. Labels do all the work that
folders do, but with an added bonus: more than one label can be applied to a report or dashboard.

By selecting a particular label, you can filter out items contained only in that label in which case the active label
will be marked red. You can reset the label selection by clicking the root node Labels view all items.

When viewing reports, you can tick the checkbox next to the reports, click Labels, and click the label you want
to associate with the report(s). You can also check the boxes next to several labels and click Apply.

To manage labels, you must locate one of the existing labels on the left-hand side and click it. When you
right-click it, it will open a context menu with the following actions: add, rename and delete.

Labels can be added as a sub folder of a root label, or as a sub folder of existing labels. You can also rename the
label as well as delete it.

The sub-label can be created below a label that already exists by selecting which label you would like to place
it under. Then click Add Label in the context menu. The hierarchy can also be changed by moving nodes using
drag and drop.

Create New

When you click New, you can choose to create the following: report, dashboard, and predefined report.

You can also create a new report using the Report Wizard. To do so, you must choose New Report to go to
Report Wizard.

The first step of the Report Wizard contains the following fields:

• Report name - required field


• Description - optional
• Report data source - required
• Report type - required

The Report data source field contains a list of views/tables or stored procedures that were configured to be
a possible source of data for this report. All tables/view and queries that are created in the Report module
administration will be listed when creating a new report. You will also be able to create a data source, which
can be done in the administration section of the Report module. Report Type supports three types of reports:
Table, Chart and Gauge. Depending on the selected report type, you will have different screens for entering the
remaining information needed to complete the report creation process.

In the Cache Frequency dropdown, you can select the frequency for refreshing the report results, for each
report type. For example, if you select daily frequency, the system will cache the report results, and then, after
one day, it will refresh the report and show the latest results.

SAP CPQ Setup and Administration Guide


404 PUBLIC Quotes Administration
Report Custom Filters

A report module enables report creators to add custom filter conditions, to group and organize them and
to provide report parameters (called dynamics and dynamic inputs). This will allow end users to provide
additional data for retrieving records from the data source and displaying them on the report.

Adding Predefined Conditions

You can add a filter condition for any of the available fields from the selected data source by choosing a value
from the Select drop-down list.

The default option for any of the new conditions is a predefined value. A predefined value is used to filter
records from the data source and it cannot be changed when executing the report.

Report Filtering

Creating filters lets you narrow down the data contained in the data source used for the report. A data source
can be used in multiple reports, but the filtering criteria is specific for the report in which it was created.

Adding Filtering Conditions


In the Report Filter Criteria page, you can:

• set the maximum number of results that will be displayed after the filter is applied. If this number is lower
then the number of records retrieved from the database, the system won't be able to run the report and the
following error message will be displayed: An error occurred while processing your request.
• choose how fields are sorted.
• set the logic between multiple filtering groups (And and Or).
• add multiple filters in filtering groups.
• clear the defined queries.

In the central part of the page, you define the actual filtering conditions by selecting the values in three
dropdowns:

1. Select the column from the data source used in the report that should be filtered.
2. Select the logical operator (equals, Is empty, Ends with, and so on).
3. Select the condition type:
• L - Literal – filters one specific entry. For example, if you are filtering users by their username, you can
enter a username here.
• @ - Parameter – name of the field used as a search field in the next step. For example, if you’ve
selected the data source column with usernames in the first step, you can name the parameter
Username and apply the filter. The system will show all users in the system and in the User field you
can enter the username of one specific user.
• C – Context – conditions that filter users dynamically. Available conditions are $UserId and
$UserName.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 405
When creating filtering conditions, it is important to match the data source column with the filter criteria.
For example, if you are filtering users by usernames, you need to select the data source column that stores
usernames.

Dynamic Conditions

Dynamic or context conditions allow filtering users by the ID and the first and last name of the logged in user.
The advantage of using dynamic over other conditions is that when a dynamic condition is applied, different
users can run the same query report and they get the results for their respective users. Unlike the literal and
parameter conditions which return values for one specific user.

For example, you can combine the dynamic conditions with other conditions to get a list of all quotes that
pertain to the logged in user.

The following dynamic conditions are available in the Report Module for SAP CPQ:

• $UserId – searches for a user whose ID is the same as the ID of the logged in user.
• $UserName – searches for a user whose first and last name match the first and last name of the logged in
user.

Grouping Conditions

With grouping, a report creator can organize existing conditions in a hierarchical way and connect them with
either AND or OR logical operator. This new group section can contain any number of simple conditions or child
groups. You can change the position of the simple element or group using a drag and drop functionality.

While we don't recommended it, it is possible to nest an unlimited number of subgroups within any group of
conditions. A logical operator for a group can be changed from AND to OR and vice versa by clicking a toggle
button in the group header which shows the current logical operator. You can collapse and expand a group and
unigroup's conditions at any point, as well as delete a group.

The Tabular Report Type contains one step that must be completed in order to add the information needed for
the generation of this report type. You must choose what fields will be included in the report and decide if you
want to create a row or column groups. You can make the selection by dragging and dropping the fields from
the area “Available fields” to areas, such as “Row Groups”, “Column Groups” or “Values.”

You can apply some of the aggregate functions on selected fields.

The Chart Report Type Page provides many different types of charts. As an administrator, you can choose bars,
pies, columns and other graphic types.

Fields for a chart report are selected in the same way as fields for a tabular report type.

SAP CPQ Setup and Administration Guide


406 PUBLIC Quotes Administration
Report Viewer Page

The Report Viewer Page contains the report and, alternatively, report parameters defined using dynamic input
fields created in the Report Criteria page. Based on the report filter definition, some fields can be made
mandatory or can use existing lookup views as the data source for selection.

Microsoft Report Viewer Control is used for report rendering on the page. It contains standard controls for
paging, searching and exporting (pdf, excel, word).

A Report Viewer Page may contain several tabs for faster updating of the report definition or report filter
definition on the left-hand side: Report, Criteria Definition, and Report Definition.

Report Viewer Page – Additional layout parameters

Based on the report type a report view page can contain additional control with parameters related to the
current report. Chart types reports can be changed inline. This inline change is temporary and allows end-users
without administrative permissions to change parts of report layouts, as well as export such reports.

Report Module Administration Section

When you click Administration Data Source , the list of all data sources (table/query/view) is displayed.

You can create a new data source and when you click Add, the following fields are displayed: display name,
type, and name.

All fields are required. When Table or View is chosen, a list of all tables and views will be displayed, with an
administrator able to choose a desired table/view.

If Query is chosen, a field in which a SQL query should be written will be displayed.

Lookup Fields

This section focuses on the following:

• Explaining filter parameters section of the report Add/Edit.


• Giving administrators the ability of having drop-down menus as filter parameters.
• Building filters through drop-down options.

Creating a lookup field can help improve the efficiency of the data entry process. The fields that are candidates
for lookup are usually the ones which are foreign keys. Let’s say that in a table called “Activity” we have a
“UserId” column, and we want to allow users a simple way of entering a value for this field when defining the
report filter. You can enter a value, but usually this information is hard to remember and prone to errors. Report
module allows end users to define what data sources can be used as lookup sources.

The first step is to enter a new data source and choose a User table.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 407
The “Is Lookup” field must be checked and other two fields (Value and Display Field) must be populated in
order to create a lookup source. The Value field, in this case, is a user id; for a display field you can choose any
column from the Users table, for example, username, email, first name, last name, etc.

The second step is to open another data source and locate an “uid” column from this source. When you open
a detail view of that column you will see a new field called “Lookup.” This drop down will now contain a “Users”
data source previously defined as lookup.

Instead of numeric control, the new lookup control will be displayed on a report filter page when once you
choose this column. This control is more advanced and contains one label and two buttons.

When you click the first button a window with advanced grid control will pop up. It will include search, paging
and a sorting functionality. At this point, you can make your selection by double-clicking a row in the grid, or by
selecting a row and then clicking OK.

The Grid Control will contain only those columns that we chose in the Display Name field. Once you select an
item from the grid, a label will contain the Display Name.

Report RDL Templates

The Report Module supports adding RDL report templates which can define a standard layout for various
reports, such as defining the standard header and footer section on all reports. This RDL template file is
a standard RDL report, created using a Microsoft Report Viewer, Visual Studio or some other tool. An RDL
template can be any valid report definition file containing a placeholder element. This can be rectangle element
named “Report”. This rectangle element will define the actual size and position, so you can specify how much
space is allowed for a table, chart or gauge.

The Lookup Control used for report template selection also contains a preview functionality which enables you
to see the preview of the RDL Template. We recommended that the RDL template creator puts a visible border
on a rectangle placeholder so that a report creator can see its position and the dimension before generating a
report with a selected template. The placeholder border will be removed once the report is generated, so it is
used only for preview purposes.

New templates can easily be uploaded on the same control, by clicking the Add button.

Viewing and Configuring Dashboards

Dashboards give you a bigger overview by displaying summaries of different reports as widgets on a single
page. With a dashboard, you can monitor more reports at once. A list of existing dashboards can be found on
the “Reports and Dashboards Overview Page” where you can easily find or create a new dashboard.

You can insert am existing report or frame in each widget on the dashboard page. You can choose to insert a
chart type report or a tabular report in iframe. To do so, you must specify the format type that will be used for
this report (pdf or image).

SAP CPQ Setup and Administration Guide


408 PUBLIC Quotes Administration
Multilanguage - Translation

Internationalization and localization are supported in Report Module. The Application Client of Report Module
can specify culture and language which should be used. Appropriate Date, Time and Numeric Formats are
applied based on the culture used.

Adding New Languages is also supported in the administration part of Report Module. Import and export of
existing data enables you to edit translation in Excel and then easily upload it back onto the server.

User Side

When you click the Graphic Reports page, you will be redirected to the page where all reports visible to users
will be displayed in the iFrame. Users will be able to run/view reports on the User Page. All reports that are
visible to a user's permission group, will be displayed on this page. Default reports will be visible to users as
well. If the user is an SAP CPQ administrator, he or she will be able to view/run all default reports. But if the
user is not an SAP CPQ administrator, the user will be able to run only the context reports with associated him
or her.

5.25 Standard Quote Fields

Listed here are the standard quote fields that are present in the quote by default.

Quote Header Standard Fields

Standard Quote Field Description

Status The current status of the quote in the workflow (such as


Open, Preparing, Approved, Rejected, Order Placed, and so
on).

Market The market selected for the currently open quote, with a
defined currency, market factor, and pricebooks.

Pricebook The pricebook selected for the currently open quote, which
contains defined product prices.

Sales Order ID The sales order ID from an external ERP system.

Date Created The date when the currently open quote was created.

Date Modified The last time the currently open quote was modified.

Effective Date The date that determines which prices are displayed for
items in the quote, depending on the period for which the
selected pricebook entries are valid.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 409
Standard Quote Field Description

Revision The active revision of the currently open quote.

Cart Comment The field that allows users to leave comments on the quote.

Quote Item Standard Fields

The fields described in this table are standard quote item, product type, and total fields in the quote.

Standard Item Field Description Formula

Quantity The total number of an item included in NA


a quote.

NRC List Price The price at which the manufacturer NA


recommends that the retailer sells the
product. Also known as recommended
retailer price.

MRC List Price The price at which the manufacturer NA


recommends that the retailer charges
the product on recurring basis.

NRC Discount Percent The percentage discount that is given Item.DiscountPercent = 100 * Item.Dis­
to the list price of the product. countAmount / Item.ListPrice

MRC Discount Percent The percentage discount that is given Item.MrcDiscountPercent = 100
to the MRC list price of the product on * Item.MrcDiscountAmount /
recurring basis. Item.MrcListPrice

NRC Extended Amount Generated by multiplying quantity with Item.ExtendedAmount = Item.NetPrice


net price. * Item.Quantity

MRC Extended Amount Generated by multiplying quantity with Item.MrcExtendedAmount =


MRC net price. Item.MrcNetPrice * Item.Quantity

NRC Cost The value used for producing the prod­ NA


uct.

MRC Cost The value used for producing the prod­ NA


uct on recurring basis.

NRC Extended Cost Generated by multiplying the quantity item.ExtendedCost = item.Cost *


of the product with the cost of the prod­ item.Quantity
uct.

MRC Extended Cost Generated by multiplying the quantity Item.MrcExtendedCost = Item.MrcCost


of the product with the MRC cost of the * Item.Quantity
product.

NRC Extended List Price The list price of a product multiplied Item.ExtendedListPrice = Item.ListPrice
with its quantity. * Item.Quantity

MRC Extended List Price The MRC list price of a product multi­ Item.MrcExtendedListPrice =
plied with its quantity. Item.MrcListPrice * Item.Quantity

SAP CPQ Setup and Administration Guide


410 PUBLIC Quotes Administration
Standard Item Field Description Formula

NRC Discount Amount The amount that is discounted from the Item.DiscountAmount = Item.ListPrice
list price of the product. * Item.Quantity * Item.DiscountPer­
cent / 100

MRC Discount Amount The amount that is discounted from the Item.MrcDiscountAmount =
list price of the product on recurring ba­ Item.MrcListPrice * Item.MrcDiscount­
sis. Percent / 100

NRC Net Price The value that customers pay to the item.NetPrice = item.ListPrice * (1 -
seller after discounts are subtracted item.DiscountPercent / 100)
from the list price.

MRC Net Price The value that customers pay to the Item.MrcNetPrice = Item.MrcListPrice -
seller after all discounts are subtracted Item.MrcDiscountAmount
from the list price on recurring basis.

Description User's description of the product. NA

ItemType Base or optional item types. Optional NA


items aren’t taken into account for the
final price.

NRC Manufactures Gross Margin The net revenue that the seller retains Item.GrossMarginPercent = 100 *
after deducing the costs of producing a (Item.ExtendedAmount - Item.Exten­
product from the product's net price. dedCost) / Item.ExtendedAmount

MRC Manufactures Gross Margin The net revenue that the seller retains Item.MrcGrossMarginPercent = 100
after deducing the costs of producing a * (Item.MrcExtendedAmount -
product from the product's net price on Item.MrcExtendedCost) / MrcExtende­
recurring basis. dAmount

NRC Rolled Up Gross Margin Percent The sum of percentage gross margin of Item.RolledUpGrossMarginPercent =
all child items. 100 * (Item.RolledUpExtendedA­
mount - Item.RolledUpExtendedCost) /
Item.RolledUpExtendedAmount

MRC Rolled Up Gross Margin Percent The sum of percentage gross margin of Item.RolledUpMrcGrossMarginPercent
all child items on recurring basis. = 100 * (Item.RolledUpMrcExtende­
dAmount - Item.RolledUpMrcExten­
dedCost) / Item.RolledUpMrcExtende­
dAmount

NRC Rolled Up Discount Percent The sum of discount percent of all child Item.RolledUpDiscountPercent = 100
items. * Item.RolledUpDiscountAmount /
Item.RolledUpListPrice

NRC Rolled Up List Price The sum of list price of all child items. NA

NRC Rolled Up Extended List Price The sum of extended list price of all Item.RolledUpExtendedListPrice =
child items. Item.RolledUpListPrice * Item.Quantity

NRC Rolled Up Extended Amount The sum of extended amount of all child Item.RolledUpExtendedAmount =
items. Item.RolledUpNetPrice * Item.Quantity

NRC Rolled Up Cost The sum of cost of all child items. NA

NRC Rolled Up Extended Cost The sum of extended cost of all child item.RolledUpExtendedCost =
items. item.RolledUpCost * item.Quantity

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 411
Standard Item Field Description Formula

NRC Rolled Up Discount Amount The sum of discount amount of all child Item.RolledUpDiscountAmount =
items. Item.RolledUpListPrice * Item.Quantity
* Item.RolledUpDiscountPercent / 100

NRC Rolled Up Net Price The sum of net price of all child items. item.RolledUpNetPrice = item.RolledU­
pListPrice * (1 - item.RolledUpDiscount­
Percent / 100)

MRC Rolled Up Discount Percent The sum of discount percent of all child Item.RolledUpMrcDiscountPercent =
items on recurring basis. 100 * Item.RolledUpMrcDiscountA­
mount / Item.RolledUpMrcListPrice

MRC Rolled Up List Price The sum of list price of all child items on NA
recurring basis.

MRC Rolled Up Extended List Price The sum of extended list price of all Item.RolledUpMrcExtendedListPrice
child items on recurring basis. = Item.RolledUpMrcListPrice *
Item.Quantity

MRC Rolled Up Extended Amount The sum of extended amount of all child Item.RolledUpMrcExtendedAmount
items on recurring basis. = Item.RolledUpMrcNetPrice *
Item.Quantity

MRC Rolled Up Cost The sum of cost of all child items on NA


recurring basis.

MRC Rolled Up Extended Cost The sum of extended cost of all child Item.RolledUpMrcExtendedCost =
items on recurring basis. Item.RolledUpMrcCost * Item.Quantity

MRC Rolled Up Discount Amount The sum of discount amount of all child Item.RolledUpMrcDiscountAmount =
items on recurring basis. Item.RolledUpMrcListPrice * Item.Roll­
edUpMrcDiscountPercent / 100

MRC Rolled Up Net Price The sum of net price of all child items Item.RolledUpMrcNetPrice = Item.Roll­
on recurring basis. edUpMrcListPrice - Item.RolledUpMrc­
DiscountAmount

Product Type Standard Fields

Product Type Standard Field Description Formula

Product Type NRC Discount Percent The percentage discount that is given ProductType.DiscountPercent = 100
to the product type and applied to the * ProductType.DiscountAmount / Pro­
list price of each product of the same ductType.ListPrice
type.

Product Type MRC Discount Percent The percentage discount that is given ProductType.MrcDiscountPercent =
to the product type on recurring basis ProductType.MrcDiscountAmount /
and applied to the list price of each ProductType.MrcListPrice
product of the same type.

Product Type NRC Discount Amount The amount that is discounted from the ProductType.DiscountAmount = Pro­
list price of the product type and each ductType.ListPrice - ProductType.Net­
product separately. Price

SAP CPQ Setup and Administration Guide


412 PUBLIC Quotes Administration
Product Type Standard Field Description Formula

Product Type MRC Discount Amount The amount that is discounted from the ProductType.MrcDiscountAmount =
list price of the product type and each ProductType.MrcListPrice - Product­
product separately on recurring basis. Type.MrcNetPrice

Product Type NRC Extended Cost Calculated by summarizing the ex­ NA


tended cost for all products of that
type.

Product Type MRC Extended Cost Calculated by summarizing the MRC NA


extended cost for all products of that
type.

Product Type NRC Extended Amount The total extended amount of all prod­ NA
ucts in that product type.

Product Type MRC Extended Amount The total MRC extended amount of all NA
products in that product type.

Product Type NRC Extended List Price The total extended list price of all prod­ NA
ucts in that product type.

Product Type MRC Extended List Price The total MRC extended list price of all NA
products in that product type.

Product Type NRC Manufactures Gross The total NRC Manufactures Gross ProductType.GrossMarginPercent =
Margin Margin of all products in that product 100 * (ProductType.NetPrice - Product­
type. Type.Cost) / ProductType.NetPrice

Product Type MRC Manufactures Gross The total MRC Manufactures Gross ProductType.MrcGrossMarginPercent
Margin Margin of all products in that product = 100 * (ProductType.MrcNetPrice
type. - ProductType.MrcCost) / Product­
Type.MrcNetPrice

Total Standard Field

Total Standard Field Description Formula

Item Total NRC Extended Amount The total extended amount of all items Totals.Amount = Totals.NetPrice
in the quote.

Item Total MRC Extended Amount The total MRC extended amount of all Totals.MrcAmount = Totals.MrcNet­
items in the quote. Price

Item Total NRC Discount Percent The total discount percent of all items 100 * Total Product Discount Amount /
in the quote. Total List Price

Item Total MRC Discount Percent The total MRC discount percent of all 100 * Total MRC Product Discount
items in the quote. Amount / Total MRC List Price

Item Total NRC Discount Amount The total discount amount of all items Totals.ProductDiscountAmount = To­
in the quote. tals.ListPrice - Totals.NetPrice

Item Total MRC Discount Amount The MRC total discount amount of all Totals.MrcProductDiscountAmount =
items in the quote. Totals.MrcListPrice - Totals.MrcNet­
Price

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 413
Total Standard Field Description Formula

Item Total NRC Extended Cost The total extended cost of all items in NA
the quote.

Item Total MRC Extended Cost The total MRC extended cost of all NA
items in the quote.

Item Total NRC Extended List Price The total extended list price of all items NA
in the quote.

Item Total MRC Extended List Price The total MRC extended list price of all NA
items in the quote.

Item Total NRC Manufactures Gross The total manufactures gross margin of Totals.NrcGrossMarginPercent = 100 *
Margin all items in the quote. (Totals.NrcNetPrice - Totals.NrcCost) /
Totals.NrcNetPrice

Item Total MRC Manufactures Gross The total MRC manufactures gross Totals.MrcGrossMarginPercent = 100 *
Margin margin of all items in the quote. (Totals.MrcNetPrice - Totals.MrcCost) /
Totals.MrcNetPrice

MRC Total Sum of all item MRC extended NA


amounts.

Total Sum of all item extended amounts after NA


deducing VAT and taxes.

5.26 Scheduled Quote Deletion (Soft Delete)

Deleting quotes from the list of quotes only removes them from the user interface (doesn't delete them from
the system) and marks them for a scheduled automatic deletion (soft delete).

The automatic deletion job is scheduled at 00:00 UTC each day, so quotes marked for deletion since the
last scheduled job will be removed from the system during the first following scheduled deletion. The deletion
is scheduled automatically, always at the same time, and it doesn't require any setup nor any action by the
administrator.

Between the time when you removed the quote from the list of quotes and the time when it is deleted from the
system (the automatic deletion is triggered), you can't delete the objects referenced in that quote because the
system considers that they are referenced in a quote that still exists in the system. After the quote is deleted
from the system, you'll be able to delete the related objects.

Errors that occur during the scheduled quote deletion are recorded in the Log.

Related Information

Automatic Data Deletion [page 792]


Quotes Administration [page 150]

SAP CPQ Setup and Administration Guide


414 PUBLIC Quotes Administration
5.27 Parallel Work on Quote 1.0 (Administrator Side)

Quote 1.0 does not support parallel work on quotes. This means that only one user at a time can edit a quote.

Although the system won’t disable editing if there are multiple users, users should avoid making any changes
as that will cause errors and wrong values.

If there are multiple users working on the same quote, you can set up an alert to display on the quote and
inform users of the parallel work. The alert is administered via two application parameters:

• Alert users about simultaneous work on the same quote – defines whether users are informed that there
are other users that have recently opened the same quote. Also, administrators can use this parameter to
define whether the alert displays as a message in the top of the quote or as a pop-up after opening the
quote. By default, there will be an alert displaying in the top of the quote.
• Time out limit for inactive users in simultaneous work – when a user opens a quote in parallel with another
user, after the time period defined in this parameter passes, the system no longer considers that the user
is working on the quote and the user’s name won’t be displayed in the parallel work alert on the quote. This
parameter is applicable only when there are multiple users working on the same quote in parallel.

SAP CPQ Setup and Administration Guide


Quotes Administration PUBLIC 415
6 Workflow-Approvals

The following topics explain the approval workflow in SAP CPQ.

Workflow [page 416]


The following section describes the workflow actions.

Workflow Permissions [page 421]


The Workflow Permissions section is used to control which user groups can perform which actions.

Workflow Actions [page 424]


The following topics describe standard actions in SAP CPQ.

Statuses [page 434]


The Statuses link under Workflow/Approval drop-down provides information about an order or
quotation status to users.

Outbound SAP CPQ Emails [page 435]


Outbound emails are all emails sent from SAP CPQ to clients.

Notifications [page 439]


The following section describes detailed function of notifications.

Email Lists [page 448]


The following section describes detailed function of Email lists.

Approvals [page 450]

Required Fields By Workflow Action [page 475]


The Required Fields by Workflow Action section determines which fields are required before a certain
workflow action can be performed.

Item Actions Workflow [page 477]


The following section describes the Item Actions workflow.

6.1 Workflow

The following section describes the workflow actions.

After defining statuses, the administrator needs to define the actions that will change the quote/order status.
For example, a desired behavior may be to change quote status from Open to Order Placed if a user clicks on
the Place Order button. There are three states in the workflow actions. Each relates to a tab on the load quote
page.

• My Quotes - (available for all users) My Quotes tab displays all quotes that the currently logged in user
created. This will likely be the most robust workflow as it is how each user interacts with their quotes.

SAP CPQ Setup and Administration Guide


416 PUBLIC Workflow-Approvals
• Waiting for approval - (This contains no quotes for most users except for users who are Approval Parents
for other users). These are the quotes of other users that the currently logged-in user is their approval
parent. This could be setup so that the Approval Parent has the option to:
• Approve Quote
• Reject Quote
• or Forward Quote
Forward Quote may be used to forward the quote to another Approval Parent. This would be applicable in a
case where the value of the quote is higher than their allowed approval amount, for example.
• Other Quotes - (this also contains no quotes for most users except for the users given visibility rights) -
These are quotes of other users that the logged-in user is authorized to see through rules set in the Quote
Visibility section under the Quotes admin menu.

 Note

Although some users might be marked as "inactive" in administration, their quotes are still visible, and they
might appear to some users on the "other quotes" tab.

The relationships between statuses and actions are specified through the Workflow Actions section of the
administration. This section is invoked by clicking on the Workflow Actions link under Workflow/Approval admin
menu.

The default view of the Workflow Actions section is the Table View. This displays the workflow in a grid pattern.
The table view is very efficient for defining workflow actions because it offers fewer mouse clicks and a table
that shows all defined actions on one screen. The left side of the table contains Pre-Action (Start) Statuses and
the top of the table contains Post-Action (End) Statuses. The list of actions in each intersecting square specifies
which actions will change the status listed all the way on the left side to the status listed all the way on the top.
For example, if a user clicks on Place Order while the quote is Open, the quote status will be changed to Order
Placed.

Alternatively you can view the workflow in a List View. This lists each start and end status along with the tab,
action name, conditions, pre actions, post actions and notifications. The List View is particularly useful for
viewing which actions have conditions, notifications, pre actions, and/or post actions defined. It also allows
you to quickly copy, delete, edit, and search for a workflow event. In this chapter we will discuss workflow
administration using the Table View.

 Note

Statuses can be added or removed as described in Statuses [page 434].

The status transitions with no actions defined have the sign. The status transitions with actions already
defined have the sign. When actions are already defined, click the sign to view the actions.

You can also click Expand All to view all defined actions, or click the [+] sign in each row or column to show all
defined actions in the row or column respectively.

Status relations can be defined, not only for User's own Quotes (My Quotes), but for Quotes assigned to the
user for approval (Waiting for approval), and for Other Quotes (for the users allowed to see quotes logged
by other users). To switch between My Quotes, Waiting for Approval and Other Quotes areas, select the
corresponding tab at the top left corner of the table. Consequently, status relationships can be defined for any
one or all three from this screen. The active status area has the same background color as the top border of the
table.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 417
Example

The following shows the Workflow Actions table for SMB computer store with the Open (start) row expanded:

On the user side, adding an item to quote creates a quote and sets the status to open (or whatever status is set
as the default). A first set of actions are visible from the quotation tab.

In the My Quotes tab under Existing Quotes on the user side, another set of actions are visible to the customer.

SAP CPQ Setup and Administration Guide


418 PUBLIC Workflow-Approvals
The process of specifying an action is performed by clicking the or button in the intersection between the
Start Status and the End Status.

Editing a workflow event/intersection displays the status administration page where you can add and remove
actions for that workflow event/intersection. At the top of the page the Start Status is given and the End Status
is given.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 419
Next, select the actions that will generate the change.

 Note

For more information on actions, see Action Details [page 429].

Next to the actions are buttons that will allow further tailoring. The following are available for each action:

• Automatic Reconfigure - Automatic configuration determines if the items in the quote use their initial
product rules and pricing (the product rules and prices used when the quote was generated) or if the
items in the quote need to be reconfigured (updated using the current product). Selecting the Automatic
Reconfigure checkbox adds a suffix of R to that action, like Copy-R, or Edit-R which means that the item
would be revised or reconfigured using the current rules and pricing every time the action is used.
Unchecking the Automatic Reconfigure checkbox ensures that the items in the quote keep the original
rules and pricing used at the time the item was added to the quote.
• Perform On - Will either be Cart or Cart Item. Cart Item actions are generally action buttons visible in the
Quotation tab, while Cart actions are generally actions performed on the quote from the load quote page.
• Condition - Allows a check to be performed to determine whether or not the action will be available.
• Notification - Gives the ability to send out email notifications when the action is performed.
• PreAction/PostAction - Custom actions can be done before or after the action is completed. Commonly
this is used for CRM actions such as Create/Update Account or Contact.

 Note

Users will be unable to use the actions defined unless they have been given permission to see the actions.
This is defined in Workflow Permissions [page 421].

Next to option for switching views, there are two more options: to copy workflow (since there are three
workflow tabs sometimes it can be usefull to copy the workflow from one to another) and clear workflow.

SAP CPQ Setup and Administration Guide


420 PUBLIC Workflow-Approvals
Quote actions

The following two actions are available:

• Calculate action, also referred to as Reprice action


Once you add product(s) to the quote, all calculations are complete. When you change something in
the quote (discount percent, price, etc.), then you should click on action calculate to get the updated
information, prices, etc. in the quote
• Reconfigure action
This action reconfigures all items present in the quote. Also this action triggers calculate action at the end
of its execution. This action is more time consuming than calculate action.

Cart Item Actions

Upgrade to New Product Version – when a product has a newer version than the one that is already in a quote,
and something is changed in the quote while this check box is selected, users will be prompted to update
products to newer versions, or products will be upgraded automatically.

When the action is triggered, a popup window with a progress indicator displays and shows how many of the
total number of items have been upgraded.

 Note

To ensure these improvements work properly, the Upgrade to New Product Version action needs to be
enabled for the same quote status in both Workflow and Item Actions Workflow in Setup.

If you’re using Quote 1.0, you can check if a quote has incomplete items by using these CTX tags:

• For checking whether a quote has incomplete items (<*CTX(Quote.HasIncompleteItems)*>)


• For checking whether a specific item has incomplete configuration
(<*CTX(Quote.CurrentItem.HasIncompleteConfiguration)*>)

6.2 Workflow Permissions

The Workflow Permissions section is used to control which user groups can perform which actions.

This administrative section is important because users will be unable to use any of the actions defined in the
Workflow [page 416] administrative section unless they have been given permission to use the action(s) here.

Defining these permissions can be done in two ways, through Actions Permissions or User Group Permissions.
The default is the Actions Permissions. Under Actions Permissions, each individual action is displayed and the
user groups that are allowed to perform each action are displayed in the User Groups column.

Click the or symbol by each item to add/modify the user groups that are allowed to perform that action.
On the next screen, select the user groups that are allowed to perform each action, and uncheck the user
groups that are not allowed to perform the particular action and click Save.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 421
The other way to set Workflow Permissions is through User Group Permissions. User Group Permissions can
be accessed by clicking the by User Group button by List Permissions: at the top of the Workflow Permissions
screen.

Under User Group Permissions, each individual user group is displayed and the actions that the user groups
are allowed to perform are displayed under the User Groups column.

User Groups Permissions

Click the or symbol to add/modify the actions that the particular user group (on the left) is allowed to
perform. On the next screen select all the actions that the particular user group will be allowed to perform and
click Save.

Take a look at a section of the Workflow Permissions (by Actions Permissions) for SMB computer store.

SAP CPQ Setup and Administration Guide


422 PUBLIC Workflow-Approvals
With the following Workflow Actions set:

Consider John Smith in Sales and Jane Smith in Sales Management, without any restraining conditions set,
both John and Jane would have access to the Edit, History actions, John would have access to the New
Revision action and Jane would have access to the Reassign action (based on the Actions Permissions for their
respective user groups).

On the user side, as expected, John sees all the actions his user group (Sales) is allowed to see, but he does not
see the Reassign action.

Jane also sees all the actions her user group (Sales Management) is allowed to see, but she does not see the
New Revision action her group is not set up to see.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 423
So even though Workflow Actions may be customized based on the status of the quote, workflow actions can
still be further customized using Workflow Permissions and conditions.

If in the new quote status, the user doesn’t have the right to either view or edit a quote, they are redirected to
the Load Existing Project/Quotation page.

6.3 Workflow Actions

The following topics describe standard actions in SAP CPQ.

Standard Workflow Actions [page 425]

Action Details [page 429]


The following section describes the detailed function of different actions.

Reprice, Reconfigure, and Conditional Reconfigure - Differences [page 432]


This page describes the Reprice, Reconfigure, and Conditional Reconfigure actions and explains when
each of these should be used.

Approval Reminder Action [page 433]


Action Approval Reminder can be used in both quote engines to remind approvers that there is a quote
waiting for them to approve or reject it.

Auto Quote Expiration [page 433]


This is scheduled action that is executed once a day at midnight (server time) and it will automatically
push all quotes that are due to expire to Quote Expired status (or any other desired status), fire post
actions or trigger notifications for each quote. Since this feature is not enabled by default, there are
certain steps that need to be performed in order to enable it.

Global Condition for Quote Action [page 434]


Administrators have the ability to define conditions for executing pre or post actions.

SAP CPQ Setup and Administration Guide


424 PUBLIC Workflow-Approvals
6.3.1 Standard Workflow Actions

Standard Action Description

Accept Proposal After users access the proposal document from an email
and review it, if no changes are needed, they can accept the
proposal using this action.

Add Comment from CLM Retrieves comments from CLM and posts them in SAP CPQ.
This action isn't visible in the user interface, however, it
needs to be added in the workflow matrix and enabled in
the status in which the quote receives comments.

Add Item Opens the Catalog allowing users to browse through prod­
ucts and add them to quote.

Approval History Opens an overview of the approval history [page 462] of the
quote (status changes, dates, approvers, rules, and so on).

Approval Reminder The purpose of this action is for administrators to attach


email notifications that are sent to approvers who haven't
approved nor rejected a quote yet. This action is available in
both quote engines.

Approve Approves the quote that has been submitted for approval,
allowing the user to break the defined approval rule.

Attach Document To SAP Opportunity Attaches the generated document to the opportunity. This
action is used only in the legacy SAP Cloud for Customer
integration.

Attach Document To SAP Opportunity And Sales Quote Attaches the generated document to the opportunity and
the sales quote. This action is used only in the legacy SAP
Cloud for Customer integration.

Attach Document To SAP Sales Quote Attaches the generated document to the sales quote. This
action is used only in the legacy SAP Cloud for Customer
integration.

Cancel Changes Retracts all the changes made on the quote since the last
time the quote was saved.

Change E-Sign Status This action is automatically triggered when user sends a
document to DocuSign. If document processing is success­
ful, the action is triggered and quote moved to the next sta­
tus. Otherwise, action isn’t triggered and quote status isn’t
changed.

Change Status Enables the dropdown list with statuses on the quote so
users can select the status manually.

Change Status From CLM The action isn’t visible in SAP CPQ user interface. It changes
the status of the contract in CLM, as defined in Status
Mappings.

Change Status In CLM The action changes the status of the contract coming from
CLM, as defined in Status Mappings.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 425
Standard Action Description

Conditional Reconfigure Reloads the products in the quote, just like the Reconfigure
action. [page 432] However, products are reconfigured only
if the product version has been changed after the product
was added to the quote.

Copy Creates a duplicate of the quote.

Create Assets Records the items from the quote in the asset table [page
398].

Create Custom Object From Quote Used in the Salesforce integration for creating custom ob­
jects in Salesforce.

Create Quote In CRM Used in the Salesforce integration for creating quotes in
Salesforce.

Create Update SAP Sales Quote Available in the legacy SAP Cloud for Customer integration.
It either creates a sales quote or updates it, if there’s an
existing sales quote.

Create/Update Custom Object Available in the Salesforce integration. It either creates a


new custom object in Salesforce or updates it, if there is an
existing custom object.

Create/Update objects From Quote Items Available in the Salesforce integration. It either creates ob­
jects in Salesforce from quote items in SAP CPQ, or updates
them, if there are existing objects.

Create/Update Opportunity Creates an opportunity from a quote or updates the oppor­


tunity if there’s an existing one. Used in the integration with
Salesforce.

Delete Deletes the quote.

Detach From Opportunity Detaches the quote from the related opportunity [page 429].
Used in the integration with Salesforce.

Edit Enables the editing mode for the quote.

E-Sign Accepted Triggered by AdobeSign and is not visible in the quote layout.
Triggered when the document is signed.

E-Sign Declined Triggered by AdobeSign and is not visible in the quote layout.
Triggered when the signer refuses to sign the document.

Generate Document For E-Sign Initiates the generation of documents that will be sent for
e-sign to AdobeSign.

Generate Documents Initiates the process of generating documents [page 152]


from the quote, using a predefined template.

History Opens quote history details (performed actions, statuses,


action dates, and so on).

Integration Change Quote Status Changes the status of the quote from Order Confirmation
Pending to Order Created with Errors, and from Order Cre­
ated with Errors to Order Placed. This action should be
used in integration flows for the quote-to-order process in
the integration with SAP S/4HANA.

SAP CPQ Setup and Administration Guide


426 PUBLIC Workflow-Approvals
Standard Action Description

Make Primary When there are multiple quotes assigned to an opportunity,


this action marks one of them as primary. Used in the inte­
gration with SAP Cloud for Customer.

Margin Health Allows users to set the margin health [page 527] on the
quote after which the system recalculates the discount and
eventually all other calculations are triggered according to
the setup in Cart Fields Administration.

New Active Revision Creates a new quote revision [page 396] and sets it as ac­
tive.

New Revision Creates a new quote revision [page 396].

Order Status Update Used in the SAP Cloud for Customer integration solely for
changing the quote status as defined in the Workflow (in the
out-of-the-box scenario, from Order Confirmation Pending to
Order Placed).

Place Order Opens a page with a summary of the quote so users can re­
view it and make any needed changes before actually placing
the order.

Place order to ERP Places an order for a product in SAP ERP.

Post Quote Notes Into Account Chatter Sends quote comment to the account Chatter in Salesforce.
One comment can only be sent either to the account or the
opportunity Chatter.

Post Quote Notes Into Opportunity Chatter Sends quote comment to the opportunity Chatter in Sales­
force. One comment can only be sent either to the account
or the opportunity Chatter.

Preview Opens a read-only preview of the quote.

Propose Changes After users access the proposal document from an email
and review it, they can enter comments into the quote and
propose changes to the document using this action.

Quote Expiration This is a scheduled action that is triggered once a day at


midnight and it automatically pushes all quotes that are due
to expire to the desired status.

Quote Lost Changes the status of the quote to Lost. Available in the list
of quotes and allows easy change of status.

Quote Won Changes the status of the quote to Won. Available in the list
of quotes and allows easy change of status.

ReApply Taxes Refreshes the country/region and the state tax selection.

Reassign Reassigns the quote to another user.

Reconfigure Recalculates all items in the quote [page 432] and consid­
ers all the changes that affect the values on the quote (for
example, if list price is calculated based on an amount in a
custom table, you should trigger the Reconfigure action after
changing the value in the custom table so that the list price
is recalculated in the quote).

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 427
Standard Action Description

Refresh Market and Currency The market and currency selection on the quote are re­
freshed and in case the selection is different from the default
market and currency, those selected on the quote are ap­
plied.

Reject Quote approvers use it to reject the quote sent for approval.

Reject Proposal After users access the proposal document from an email
and review it, if they don't accept the proposal, they can
reject it using this action.

Release Quote And Proposal to SAP Commerce Sends the quote with the generated document to SAP Com­
merce Cloud.

Release Quote To SAP Commerce Sends the quote, without any documents if any are gener­
ated, to SAP Commerce Cloud.

Replace Items If this action is enabled and the item part number is editable,
users can search for other items based on their part number
in the list of items in the quote.

Reprice Recalculates only the items whose values are changed in a


quote [page 432], but only when the changes are made in
the quote (for example, when a user changes the value of a
quote item custom field).

Request Approval When an approval rule is broken on the quote, this action
leads to a new page where all approval rules for that quote
are listed and users can further submit the quote for appro­
val.

Retract Approval Process Once a quote is sent for approval, this action can retract the
quote and no approval is any longer needed.

Save Quote Saves the changes made on the quote since the last time the
quote was saved.

Send Document to CRM Sends the generated document to Salesforce.

Send Email Sends the email [page 429] with information on the gener­
ated document. This action is available only in Quote 1.0.

Send Quote To CLM Displayed on the right side of the email form for sending
the generated document. This action opens the document in
CLM in a new tab.

Send Quote XML Sends quote XML to a URL or an FTP address.

Set Active Sets a quote revision as active.

Submit for Approval Sends the quote for approval when an approval rule is vio­
lated.

Update Opportunity and Create Update SAP Sales Quote Updates the opportunity and create a sales quote. If there’s
already a sales quote, this action updates it. Used in the
legacy SAP Cloud for Customer integration.

Update Quote in CLM Sends all the changes made on a quote in SAP CPQ to the
respective contract in SAP CLM.

Update Sales Quote Updates the related sales quote in SAP Cloud for Customer.

SAP CPQ Setup and Administration Guide


428 PUBLIC Workflow-Approvals
Standard Action Description

Update SAP Opportunity Updates the related opportunity in SAP Cloud for Customer.

Upgrade to New Product Version Upgrades the product to a Create Product Version [page 87].

View Opens the quote in the read-only mode.

View Proposal When this action is enabled, an email with the generated
document is sent to the destination address with the link for
accessing the proposal document in SAP CPQ. This action
allows users to open the proposal.

Void Document Revokes the document that has already been sent to signers
in the DocuSig integration, avoiding the need for signers to
review an obsolete document.

Standard Workflow Action Translations

You can translate each standard action by clicking and selecting the language you wish to translate to in the
Translate to dropdown list.

Related Information

Workflow [page 416]


Statuses [page 434]
Action Details [page 429]
Reprice, Reconfigure, and Conditional Reconfigure - Differences [page 432]

6.3.2 Action Details

The following section describes the detailed function of different actions.

Send Quote XML

The purpose of this functionality is to enable users to send SAP CPQ Quote XML explicitly (by invoking the
appropriate action on the quote), or implicitly (by setting this action to be a pre or post action for some other
quote action).

The action can send Quote XML to:

• URL address (by using Http Post Method)


• FTP address

Workflow Setup - The action Send Quote XML should be set up in the workflow. This means that appropriate
user groups need to have privileges to execute this action, and that this action should be put in workflow. Send
Quote XML can also be defined as a pre or post action to some other action (for example to Place Order).

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 429
Send XML to Http Address - If administrator wants the action to send XML to a Http Address , under Setup
General Application Parameters , on the Shopping Cart and Quote tab there is a parameter: When action
'Send Quote Xml' is executed, send xml to Http Address:. For more information on this
parameter and the following parameters, see Application Parameters [page 637]. This parameter is required
for Http sending, and it should be filled with appropriate Http Address.

Send XML to FTP Address - If the administrator wants the action to send XML to an FTP Address, the following
parameters should be adjusted under Setup General Application Parameters :

• When action 'Send Quote Xml' is executed, send xml to FTP Address: This parameter is
required for FTP sending and it should be filled with the appropriate FTP Address.
• Action 'Send Quote Xml' sends quote xml under the name:This parameter should be
filled with the template for XML document name that will be sent to FTP server. Example: Quote
<*CTX(Quote.CartCompositeNumber)*> will create XML document that will contain the quotation
number in its name (for example – Quote00010024.xml).
• Ftp Path: This parameter should be filled with the local folder path of the FTP server, where the file will be
saved.
• Ftp Username: This parameter should be filled with the FTP server username.
• Ftp Password: This parameter should be filled with the FTP server password.

Action execution - Users can execute the action explicitly by invoking it from the quote, or implicitly by invoking
some other action, that will activate "Send Quote XML" as its pre or post action.

Send BOM XML

The purpose of this functionality is to enable users to send SAP CPQ BOM XML explicitly (by invoking the
appropriate action on the quote), or implicitly (by setting this action to be a pre or post action for some other
quote action).

The action can send BOM XML to:

• URL address (by using Http Post Method)


• FTP address

Workflow Setup - The action Send BOM XML should be set up in the workflow. This means that appropriate
user groups need to have privileges to execute this action, and that this action should be put in workflow. Send
BOM XML can also be defined as a pre or post action to some other action (for example to Place Order).

Send XML to Http Address - If administrator wants the action to send XML to a Http Address , under Setup
General Application Parameters , on the Shopping Cart and Quote tab there is a parameter: When action
'Send BOM Xml' is executed, send xml to Http Address:. This parameter is required for Http
sending, and it should be filled with appropriate Http Address.

Send XML to FTP Address - If the administrator wants the action to send XML to an FTP Address, the following
parameters should be adjusted under Setup General Application Parameters :

• When action 'Send Quote Xml' is executed, send xml to FTP Address: This parameter is
required for FTP sending and it should be filled with the appropriate FTP Address.
• Action 'Send Quote Xml' sends quote xml under the name:This parameter should be
filled with the template for XML document name that will be sent to FTP server. Example: Quote

SAP CPQ Setup and Administration Guide


430 PUBLIC Workflow-Approvals
<*CTX(Quote.CartCompositeNumber)*> will create XML document that will contain the quotation
number in its name (for example – Quote00010024.xml).
• BOM Ftp Path: This parameter should be filled with the local folder path of the FTP server, where the file
will be saved.
• BOM Ftp Username: This parameter should be filled with the FTP server username.
• BOM Ftp Password: This parameter should be filled with the FTP server password.

Action execution - Users can execute the action explicitly by invoking it from the quote, or implicitly by invoking
some other action, that will activate "Send BOM XML" as its pre or post action.

Detach Quote From Opportunity

Action Detach Quote From Opportunity will enable users to break the link in SAP CPQ between CRM
opportunity and SAP CPQ quote. After a user has detached the quote from one opportunity, he will be able to
attach it to another opportunity, or to create a new opportunity from the quote.

If the CRM system is Salesforce, the SAP CPQ quote will be removed from the list of opportunity related quotes
in Salesforce.

Reapply Taxes

Action Reapply Taxes allows users to refresh country/region and state tax. This action does not have a big
impact on the performance unless the formulas for Country/Region Sales Tax (Country/Region Sales Tax [page
530]) or State Sales Tax (State Sales Tax [page 539]) are complex.

Send Email

Action Send Email is tied in with Generate Quote action. When Generate Quote action is completed, user is
presented with a button to create Email and download the document. When a user creates an email and clicks
Send Email, Send Email action will be executed.

Currently Send Email allows for an Activity to be added to Salesforce.com opportunity. To set it up:

• In Setup:
1. In Setup Quotes Email Customers / Quote Acceptance Settings section, set Update
Opportunity activity in Salesforce after sending Email to Customer to TRUE.
2. Make sure that Send Email action in added to the workflow
3. Make sure user groups have permissions set for Send Email action under Workflow Workflow
Permissions .
• On user side:
1. User has to come from Salesforce.com.
2. Generate a quote.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 431
3. Click on Create Email.
4. Send the email.
5. Activity will be added to the opportunity Activity History.

6.3.3 Reprice, Reconfigure, and Conditional Reconfigure -


Differences

This page describes the Reprice, Reconfigure, and Conditional Reconfigure actions and explains when each of
these should be used.

Reprice Action

This action recalculates only the items whose values are changed in a quote, but only when the changes are
made in the quote (for example, when a user changes the value of a quote item custom field). If there are items
whose values are being calculated from external sources (for example, from a custom table), the Reprice action
doesn’t recalculate the values of those items after the external value is changed.

The Reprice action works with a snapshot of product data captured in the moment when the product was
added to the quote. Triggering this action doesn’t reload the product in the quote like the Reconfigure action
does.

Reconfigure Action

This action recalculates all items in a quote and considers all the changes that affect the values on the quote
(for example, if list price is calculated based on an amount in a custom table, you should trigger the Reconfigure
action after changing the value in the custom table so that the list price is recalculated in the quote). With
this action, products are reloaded in the quote, so all changes are applied, unlike with the Reprice action. The
Reconfigure action applies to all item data, not just the List Price.

 Note

The Always Refresh List Price on Reconfigure parameter determines whether the list price is recalculated
every time Reconfigure is triggered or not.

Conditional Reconfigure

With the Conditional Reconfigure action, products are also reloaded in the quote, just like with the Reconfigure
action. However, products are reconfigured only if the product version has been changed after the product was
added to the quote.

SAP CPQ Setup and Administration Guide


432 PUBLIC Workflow-Approvals
Product version can be set in the Product Setup Wizard for each product. If Product Version is empty, products
are always reconfigured. If it's not empty, product version is compared to the one saved in the quote item to
determine if Conditional Reconfigure should reconfigure that item or not.

There’s a flag in the workflow, next to Automatic Reconfigure, called Conditional Reconfigure, called . This is
available in the workflow for all actions where , called Automatic Reconfigure is available. When this flag is set
and action is executed in the workflow, same logic is applied as in action Conditional Reconfigure: iterating
through all quote items, compare product versions and reconfigure item and save current product version if
product versions are different.

Related Information

Workflow Permissions [page 421]


Pricing/Calculations [page 479]

6.3.4 Approval Reminder Action

Action Approval Reminder can be used in both quote engines to remind approvers that there is a quote waiting
for them to approve or reject it.

Once quote is submitted for the approval, and approver does not take any actions, quote owner has no way to
request or remind approver to take action.

When action is executed, the system will verify who are all the approvers for that quote, and will send email
notification (same one as used for approval notification) to ALL approvers who have not take any actions
(approve or reject) for that quote.

Action Approval Reminder will not do anything by itself, it's just a transition in the action workflow where
a user can attach arbitrary notifications. These notifications should be addressed to the email lists with
"WaitingApprovers".

Email list with special tag "WaitingApprovers" will address all approvers of a quote that have not been approved
or rejected.

User can put any notification body to these approval reminders. They could be the same as initial submit for
approval notification, or you can make a new one specific for reminder purposes.

6.3.5 Auto Quote Expiration

This is scheduled action that is executed once a day at midnight (server time) and it will automatically push all
quotes that are due to expire to Quote Expired status (or any other desired status), fire post actions or trigger
notifications for each quote. Since this feature is not enabled by default, there are certain steps that need to be
performed in order to enable it.

By default, quotes will expire 30 days after they have been created. This time period is controlled with the
custom field Quote Expiration Date ( Setup Quote Custom Fields ).

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 433
Quote Expiration Date is a standard custom field" which means that its Name and Type cannot be changed nor
it can be deleted. Everything else is configurable.

In the Quote Expiration Date window, you can see the Formula column is set to
<*CTX(Date.AddDays(30))*>, and Calculation Type to Once, when quote is created and there is
no selection for Tab (so it won't be visible to users).

After adjusting these settings, user will need to set up the Workflow ( Setup Workflow/Approval
Workflow ). Select Other Quotes tab and add Quote Expiration action for desired Start and End status
combination (For example: Start Status: Open; End Status: Quote Expired).

 Note

Ensure to select the Other Quotes.

6.3.6 Global Condition for Quote Action


Administrators have the ability to define conditions for executing pre or post actions.

When admin edits an action from the Workflow/Approval Actions list, he or she is able to see the
following fields:

• Name
• Global Condition
This is visible for all actions; defines global condition for executing action.
• Pre Action Condition
This is displayed only if action can be set up as pre action in the workflow.
• Post Action Condition
This is displayed only if action can be set up as post action in the workflow.

When action is executed as pre or post action, SAP CPQ evaluates appropriate condition defined for this action.

If condition is empty or it is set to 1, action is being executed.

 Note

If you’re not sure which action can be set as pre or post action, the best way to check this is to see what
actions can be found in the list for pre or post action in the workflow.

6.4 Statuses
The Statuses link under Workflow/Approval drop-down provides information about an order or quotation status
to users.

Examples of common statuses are Open, Order Placed and Shipped.

Additional Status Definitions can be added. For quotation tracking, Open Quoted, Closed Quote, Converted to
Order, could be added. For orders In Engineering, On Hold or at Assembly Floor, could also be used.

SAP CPQ Setup and Administration Guide


434 PUBLIC Workflow-Approvals
The above figure shows the Status Definition Screen. From here, new order status terms can be added or

existing ones edited. Select Add New to add a new status or click the button next to the status name to edit
a status.

To delete a status, select the button corresponding to the status and click OK to confirm you want to delete
the item.

To make a status the default status, edit the status by clicking the button next to it and changing the
selection in the Default drop down to Yes.

If another status is already set as the default, user will receive a confirmation informing him that a status is
currently set as the default. Clicking OK will make the current status the default or Cancel will keep the current
default status intact.

Note that there cannot be two default statuses and that there has to be a status set as the default status at any
point in time. Therefore, editing a default status and changing the selection in the Default drop down from Yes
to No bring up a message saying that the only way to change the default status is setting another status as the
default.

A quote can be locked when in a certain status. When a quote is locked, it is in a read-only state and cannot be
edited. To set a status that will lock a quote, user will edit the status, change the selection in the Locked drop
down to Yes and click Save.

6.5 Outbound SAP CPQ Emails

Outbound emails are all emails sent from SAP CPQ to clients.

 Note

If you've been registered in SAP CPQ before the deployment of the 2005 release occurred, you need to
contact the SAP CPQ Support team who will assist you in implementing the listed email-related behaviors.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 435
You can define Sender and From email address that display in outbound SAP CPQ emails by editing application
parameters Sender Email Name, Sender Email Address, and From Email Address.

 Note

If you're encountering any problems with receiving emails, you may need to whitelist the SAP CPQ SMTP
server IP address. The IP addresses of the SMTP server are:

• 23.253.197.137/32 for US SAP CPQ


• 195.50.76.237/32 for FRA SAP CPQ
• 58.65.13.18 for Singapore SAP CPQ

These are the scenarios in which outbound emails are sent:

User management emails

Example: Emails sent after user creation

• In the From Email Address application parameter enter the email that will be displayed in the From field of
the received email.
• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

Emails sent after an action is triggered

Example: Approvals sent to approvers

• In the From Email Address application parameter enter the email which will be displayed in the From field of
the received email.
• The name displayed in the From field of the received email is the full name of the user who triggered the
action.
• The reply-to address should be the email of the user who triggered the action.
• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

SAP CPQ Setup and Administration Guide


436 PUBLIC Workflow-Approvals
Emails sent when bulk import/export is finished

• In the From Email Address application parameter enter the email which will be displayed in the From field of
the received email.

 Note

If you haven’t added an email to the From Email Address parameter, the email won’t be sent.

• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

Emails sent if the knowledgebase synchronization is unsuccessful (for


Variant Configuration integration)

• In the From Email Address application parameter enter the email which will be displayed in the From field of
the received email.

 Note

If you haven’t added an email to the From Email Address parameter, the email won’t be sent.

• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

Automatic reminders sent to approvers if they do not take action on quote


approval requests

• In the From Email Address application parameter enter the email which will be displayed in the From field of
the received email.

 Note

If you haven’t added an email to the From Email Address parameter, the email won’t be sent.

• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 437
 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

Place order checkout

• In the Place Order “From” Email Address application parameter, enter the email which will be displayed in
the From field of the received email.

 Note

If no email is added to the parameter, the From field will be populated with the email address of the
currently logged-in user.

• The Sender address is taken from the Sender Email Address application parameter.

 Note

If the Sender Email Address isn’t defined in the parameter, the email address of the currently logged-in
user will be used.

Emails which are sent through the document generation email form (in the
last step of document generation process)

• In the From Email Address application parameter enter the email which will be displayed in the From field of
the received email.

 Note

If an email isn’t added to the application parameter, the From field will be populated with the email
address of the currently logged-in user.

• The name displayed in the From field of the received email is the name used in the Name field in the
document generation email form.
• The Sender address is taken from the Sender Email Address application parameter.
• Sender name is defined in the Sender Email Name application parameter.

 Note

If there's no Sender Email Address, it remains empty and there's no Sender Email Name either.

The selected value on the Hide "From" Email Address and "Name" from the Generated Document Email
Form [page 637] application parameter determines whether the From and Name fields are visible in the
document generation form.

SAP CPQ Setup and Administration Guide


438 PUBLIC Workflow-Approvals
6.6 Notifications

The following section describes detailed function of notifications.

If email lists can be compared to the email recipients, notifications would be the rest of the email. Notifications
define the subject of the email and the body. Notifications can contain any number of messages, and each
message can have different content and email lists. Notifications can then be attached to any workflow action.
This makes it quick and easy to notify the necessary people of users’ actions. Once email lists have been
created, notifications can then be made to include them. To manage notifications, follow the steps below:

1. click the Notifications link under the Workflow/Approval drop down menu. All existing notifications are
listed.
2. To create a new notification, click Add New.
3. Enter an appropriate Notification Name and click Save. The option to add messages is then displayed.
4. All that is required when creating a notification is the name. This name is then used when assigning
the notification to a workflow action. Click Save to save the name. Once the name has been saved, the
message administration for that notification becomes available. Click Add New Message to add a new
message to the current notification.

 Note

Clicking Go Back will only cancel the notification add or edit. This will not undo any message adds or
alterations.

Companies who have SSO users [page 126] to whom they wish to send email notifications attached to
actions (for example, notifications for quote approval or quote rejection) need to update the SAP CPQ URL
which will be sent as a part of the emails. For example, if the URL was http://tenantID.webcomcpq.com/
Login.aspx, it should now consist of the user's IdP like this: https://tenantID.webcomcpq.com/fed/
domainName/Login.aspx?quote=CFCECFCACFCFC7CA.

Creating a message is much like creating an email. The Subject, To addressee, and Text must all be entered to
create the message. The To addressee in this case, though, is an email list, or email lists. Users included in the
selected email list(s) will receive the message.

The email can be sent as HTML or plain text. Sending emails in HTML allows you to create a better looking and
more interesting emails. Two pictures below show an example of HTML notification formatting in SAP CPQ and
rendering in mail client.

Dynamic text can be entered in the subject, message text, and condition sections through tags using the syntax

builder. The syntax builder for the sections can be accessed through the symbol next to each section.

A condition can also be entered in the Condition section that has to be met to in order to send the notification.
Enter 1 in the Condition section to always send the notification.

Common tags that can be used to create dynamic texts include:

• <* SYSTEMQUOTATIONNUMBER *> - The quote number of the quote


• <* QUOTELINK *> - A URL that links directly to the quote
• <* TOTALLISTPRICE *> - The total price of the quote before discounts
• <* TOTALNETPRICE *> - The final price of the quote

The full list of the available tags can be accessed by clicking the Syntax builder for the "Message Text".

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 439
Some tags are used with parameters like:

• <* CO_INFO(NAME) *> - The name of the Cart Owner


• <* BT_INFO (CUSTOMER_FIRST_NAME) *> - The first name of the Bill To Customer
• <* CO_STINFO(SHIP_ZIP_CODE) *> - Zip Code of the Ship To Customer
• <* CU_INFO(USERNAME)*> - The username of the current user

These tags with parameters have a list of available parameters, and a parameter must be chosen to use the
tag.

For example, assuming a notification is set up as follows:

When a quote requires approval, an email notification is sent to the approver that looks like this:

Attachments can also be included with the email message. Only DOCX, DOC, XLS, XLSX, and TXT files can
be used as attachments. Existing attachments can be managed by selecting the file from the list and clicking
Delete or Download. New files can be uploaded into the system by clicking the Upload button.

SAP CPQ Setup and Administration Guide


440 PUBLIC Workflow-Approvals
To add an attachment to the message, transfer the file from the Available Attachments box to either the
Non-Parsable Attachments box or the Parsable Attachments box. Which box an attachment is transferred to
determines how that file is handled when the email message is sent.

Files added to the Parsable box will be compiled by SAP CPQ when the email is sent. This means that any Word
Quote tag used in the file to include Quote, Customer, or User information will be replaced by the information
of the quote that initiated the notification. Any files added to the Non-Parsable box will not be compiled by SAP
CPQ.

 Note

For more information on word quote tags and creating documents that contain them, see Create Document
Generation Template [page 179].

When finished entering the information for the message, click the Save button to add the message to the
notification

 Note

You can track the status of email notifications in the log. Every sent email notification is logged in a record
with the title Email Notification. The log contains the following data: Notification name, Notification Content
ID, Timestamp, Cart ID, Owner ID, Notification subject, Notifier name, Notifier email and a record indicating
that the notification is successfully sent.

Email notifications that are not sent are also logged in a record with the title Email Notification. In this case,
the log states that the notification condition is not fulfilled and contains the following data: Notification
name, Notification Content ID, Timestamp, Cart ID, Owner ID and Notification subject.

You can enable email notification logging via General Application Parameters Shopping Cart and
Quotes Use Additional Logging For Email Notification .

6.6.1 Notification Implementation

Once a notification and message have been created, it can be associated with a workflow action.

This is done in the Workflow Actions administration section. For any workflow event/intersection, click the
button to open the Status Administration page.

On this page, click the Edit button under the Notifications column of the appropriate action (make sure it’s
selected).

 Note

For more information on the Workflow, see the chapter Action page in Workflow [page 416].

In the resulting pop-up window, all notifications are listed. Click the checkbox of each notification that will
be associated with that action. Click Update to save the selection(s) and Close to cancel the selection. Click
Save on the status administration page. When a user initiates this action, the notification is triggered and any
messages added will be sent. The information from the quote that the user performed this action on will be
used for any attachments using word quote tags. Email messages will include all information included on the
message definition page (as discussed earlier).

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 441
You can choose the email address to be displayed in the From field of emails received from SAP CPQ. This can
be done by entering the desired email as the value of the following application parameters.

From Email Address for the following types of notifications:

• user management notifications (user creation, password reset, password update, and so on)
• notifications attached to actions, sent in emails when actions are triggered
• notifications sent after bulk import is performed
• notifications sent if the knowledgebase synchronization is unsuccessful
• automatic reminders sent to approvers if they do not take action on quote approval requests
• email form in the last step of document generation process

Place Order “From” Email Address for this notification:

• place order checkout

Place Order Notification

SAP CPQ default "Place Order" Email is sent when user clicks on Place Order. In order to control the From
Address of this Email, we can use application parameter Place order “From” email address found in
SAP CPQ Setup General Application Parameters Shopping Cart and Quotes . If this app parameter is
not defined, user's Email is used as the From address.

Selecting Place Order on a complete quote that does not require approval. The Order Confirmation screen
displays.

Additional email addresses can be entered in the additional e-mails textbox. Clicking Confirm/Send Order
confirms that the Order has been placed and notifications are sent to the Bill To or Ship To email address if
checked and any other additional e-mail addresses entered. Although this is a hardcoded notification, it can be
changed by changing the visual style for Place Order page. For more information on Visual Styles, see Users
[page 126].

Approval Notifications

Your SAP CPQ installation comes with 3 predefined notifications for Approval Process:

• Approval Request Notification


• Quote Approved Notification
• Quote Rejection Notification

Adjustments for these 3 notifications can be made easily with edit action.

SAP CPQ Setup and Administration Guide


442 PUBLIC Workflow-Approvals
6.6.2 Approval via PDA

The following section describes the approval via PDA.

The tag (<* PDAAPPROVAL *>) is used for notifications. Approval Email will contain both links, standard
QUOTELINK, and new PDAAPPROVAL. This PDA link will automatically log in user and redirect him to separate
page for approval via PDA. Here, he’ll be able to approve or reject quote and see cart summary info. For
security reasons, only ApprovalPDA.aspx will be accessible via PDA link. After the quote has been approved
or rejected, no other action will be available.

6.6.3 One-click Approval HTML Email Template

The one-click approval HTML email template helps you set up the approval request email Approvers receive
when Quotes are submitted for approval.

The email contains the Quote number, the description of the violated rules and customer information. By
using the HTML email template and following the steps outlined in Approving Quotes in One Click [page 473],
Approvers are able to accept or reject Quotes directly from the email, without logging into SAP CPQ.

You can modify CSS properties as needed.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
padding: 0px;
overflow-x: hidden !important;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #636466;
background-color: #fff;
margin: 0;
text-align: center;
}
a {
text-decoration: none;
}
a,a:hover {
color: #00ABE3;
}
h2 {
color: #636466;
font-weight: 500;
}
.cald_header_bar {
background-color: #fff;
color: #636466;
height: 64px;
margin: 0;
text-align: center;
vertical-align: middle;
width: 100%;
}
.cald_logo {
margin: 10px;

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 443
height: 40px;
background: url('https://c3.webcomcpq.com/mt/DEFAULT/images/logo_left.gif') no-
repeat center center;
background-size: contain;
}
.rainbow {
height: 5px;
width: 100%;
background-image: linear-gradient( 90deg, #fab423 0%, #94c84a 25%, #00a7e0 50%,
#00ABE3 60%, #364CA0 80%, #904D9E 90%, #a96dae 100%);
background-repeat: no-repeat;
background-size: contain;
min-height: 5px;
max-height: 5px;
height: 5px;
width: 100%;
display: table;
content: " ";
}
.content-wrapper {
display: block;
margin: 0 auto;
padding: 0 15px;
}
.section-content {
text-align:left;
border-top: 1px solid #d7d7d7;
border-bottom: 1px solid #d7d7d7;
padding: 15px 0px;
overflow: auto;
}.section {
display: inline-block;
width:30%;
margin-right: 20px;
float: left;
}
.button-container {
padding-top: 20px;
text-align: center;
}
.dynamic {
text-align:left;
font-weight: 600;
word-break: break-word;
}
.blue {
-webkit-border-radius: 8;
-moz-border-radius: 8;
border-radius: 8px;
color: #ffffff;
font-size: 18px;
background: #337ab7;
padding: 10px 30px 10px 30px;
text-decoration: none;
border: none;
margin-left: 30px;
float: left;
}
.blue:hover {
background: #2980b9;
text-decoration: none;
cursor: pointer;
color: #ffffff;
}
.red {
-webkit-border-radius: 8;
-moz-border-radius: 8;
border-radius: 8px;

SAP CPQ Setup and Administration Guide


444 PUBLIC Workflow-Approvals
color: #ffffff;
font-size: 18px;
background: #ad3a3a;
padding: 10px 30px 10px 30px;
text-decoration: none;
border: none;
float: right;
margin-right: 30px;
}
.red:hover {
background: #903D3D;
text-decoration: none;
cursor: pointer;
color: #ffffff;
}
@media only screen and (max-width: 767px) {
.section {
display: block;
width: 100%;
margin-right: 0px;
}
.static,.dynamic {
display: block;
float: left;
}
.info {
max-width: 100vw;
}
.content-wrapper {
display: block;
}
.quote-details{
margin:0;
}
.blue, .red {
display: block;
width: 80%;
margin: 0 auto;
float: none;
}
}
@media only screen and (min-width: 1560px) {
.button-container{
width:30%;
margin: 0 auto;
}
}
@media only screen and (min-width: 1200px) {
.button-container{
width:50%;
margin: 0 auto;
}
}
</style>
</head>

<body>
<div class="cald_header_bar">
<table class="cald_logo" width="181px" border="0"
cellspacing="0" cellpadding="20" background="https://c3.webcomcpq.com/mt/DEFAULT/
images/logo_left.gif" background-repeat = "no-repeat" style="height:
58px;background-repeat: no-repeat;background-position: center; margin:0 auto;
margin-bottom:5px;">
<tr><td></td></tr>
</table>
<table class="rainbow" width="100%" border="0" cellspacing="0" cellpadding="20"
background="linear-gradient( 90deg, #fab423 0%, #94c84a 25%, #00a7e0 50%,
#00ABE3 60%, #364CA0 80%, #904D9E 90%, #a96dae 100%)" style="height: 5px;

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 445
width: 100%;
background-image: linear-gradient( 90deg, #fab423 0%, #94c84a 25%, #00a7e0 50%,
#00ABE3 60%, #364CA0 80%, #904D9E 90%, #a96dae 100%);
background-repeat: no-repeat;
background-size: contain;
min-height: 5px;
max-height: 5px;
height: 5px;
width: 100%;
display: table;
content: ' ';">
</table>
</div>
<div class="content-wrapper">
<h2 style="text-align:left;">Approval Request for Quote
<* SYSTEMQUOTATIONNUMBER *>
</h2>
<div class="info">
</div>
<pstyle="text-align:left;>
<strong>
<* CO_INFO(NAME) *>
</strong>
<span> has submitted </span>
<a href='<*CTX( Quote.Link.Crypted )*>' target="_blank"> Quote </a>
<span>for your approval</span>
</p>
<div class="section-content">
<div class="section">
<div class="static">
Violated Rule(s):
</div>
<div class="dynamic">
<div style="text-align:justify;">
[IF]([EQ](<*CTX( Quote.Approvals.ApprovalRule(Exceeded
Discount).IsViolated )*>,True)){
<p class="rule-validation"><*CTX( Quote.Approvals.ApprovalRule(Exceeded
Discount).Description )*></p>
}{}[ENDIF]
</div>
</div>
</div>
<div class="section">
<table><tr>
<td class="static" style="text-align:left;">
Customer:
</td>
<td class="dynamic">
<p class="quote-details">
<*CTX( Quote.Customer(BillTo).Company )*>
</p>
</td>
</tr>
<tr>
<td class="static" style="text-align:left;">
Country:
</td>
<td class="dynamic">
<p class="quote-details">
<*CTX( Quote.Customer(BillTo).Country )*>
</p>
</td>
</tr>
<tr>
<td class="static" style="text-align:left;">
Email:
</td>
<td class="dynamic">

SAP CPQ Setup and Administration Guide


446 PUBLIC Workflow-Approvals
<p class="quote-details">
<*CTX( Quote.Customer(BillTo).Email )*>
</p>
</td>
</tr></table>
</div>
<!--[if gte mso 9]>
<p></p>
<![endif]-->
<div class="section">
<table>
<tr>
<td class="static" style="text-align:left;">
Total Amount:
</td>
<td class="dynamic">
<p class="quote-details">
<*CTX( Quote.Total.TotalAmount.MarketDisplay )*>
</p>
</td>
</tr>
<tr>
<td class="static" style="text-align:left;">
Average Discount Percent
</td>
<td class="dynamic">
<p class="quote-details">
<* Eval(FormatNumber(<* AverageDiscountPercent *>,2)) *>
</p>
</td>
</tr>
<tr>
<td class="static" style="text-align:left;">
Gross Margin:
</td>
<td class="dynamic">
<p class="quote-details">
<*CTX( Quote.Total.GrossMarginPercent.MarketDisplay )*>
</p>
</td>
</tr></table>
</div>
</div>
<div class="button-container" style="max-width:850px; margin:0 auto;">
<!--[if gte mso 9]>
<br></br><div style="width:50%">
<table width="30%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#337ab7" style="padding: 12px 18px 12px
18px; -webkit-border-radius:3px; border-radius:3px" align="center"><a
href="<*CTX( Quote.Approvals.ApproveQuoteLink )*>" target="_blank" style="font-
size: 16px; font-family: Helvetica, Arial, sans-serif; font-weight: normal;
color: #ffffff; text-decoration: none; display: inline-block; borer-radius:8px;
background-clip: padding-box">Accept</a></td>
<td style="width:200px;"></td>
<td bgcolor="#ad3a3a" style="padding: 12px 18px 12px
18px; -webkit-border-radius:3px; border-radius:3px" align="center"><a
href="<*CTX( Quote.Approvals.RejectQuoteLink )*>" target="_blank" style="font-
size: 16px; font-family: Helvetica, Arial, sans-serif; font-weight: normal;
color: #ffffff; text-decoration: none; display: inline-block; borer-radius:8px;
background-clip: padding-box">Reject</a></td>
</tr>
</table>
</td>
</tr>

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 447
</table>
<![endif]-->
<a href="<*CTX( Quote.Approvals.ApproveQuoteLink )*>" target="_blank"
class="blue" style="mso-hide:all;">Accept</a>
<a href="<*CTX( Quote.Approvals.RejectQuoteLink )*>" target="_blank" class="red"
style="mso-hide:all;">Reject</a>
</div>
</div>
</div>
</body>
</html>

6.7 Email Lists

The following section describes detailed function of Email lists.

Creating an email list is the first step in creating notifications (Notifications [page 439]). Notifications allow
custom emails to be sent to any user with the option of an attachment included. Email lists determine which
users receive the email notifications. Email list administration can be accessed by clicking the link under the
Workflow/Approval drop down menu.

Here all existing email lists are listed. User can create a new email list by clicking Add New. Specific users
are added to email lists. All users an email list receive the notification sent with that email list. Email lists are
well integrated with SAP CPQ and provide a high level of customization. All users and user groups added to
the SAP CPQ database can be included in an email list. Custom emails not in the SAP CPQ database can
also be entered. Dynamic tags can also be used to determine who gets a notification. Tags provide a way
to send emails to users performing certain roles rather than specific predetermined users. Tags can be very
useful for sending notifications for approval rule violations, supervision, and general updates. The tags are self
explanatory and the user(s) fitting the selected tag gets the notification.

SAP CPQ Setup and Administration Guide


448 PUBLIC Workflow-Approvals
Four parameters are available to add email address to the email list: Users, User Groups, Emails, and Tags.
All available parameters are displayed on the list boxes on the right, and the selected user/user groups/tags
that would receive the email are displayed in the list boxes on the left. To move the appropriate item from the
unselected section to the appropriate selected section, select the item and use the left-pointing navigation
button to move it to the selected section on the left. It is possible to use the right-pointing navigation button to
remove an item from the selected sections.

The Emails section allows entering a custom name and email. The name is optional, but a valid email address is
required.

Note that moving an email address from the selected section to the unselected section in the Emails lists
section deletes the email address.

The Tags area provides users with a dynamic method of sending emails. Selecting the appropriate tag
determines which user will receive the email:

• Cart Owner - The user that created the quote


• User viewing the cart – The user that invokes the action requiring the email notification. This could be
through the Other Quotes or Waiting for Approval tabs.
• Responsible approvers – The user(s) assigned as the approver for the particular violation under Approval
Rules [page 450].

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 449
• Waiting approvers – The user(s) assigned as the approver for the particular violation under Approval Rules
[page 450], who did not take any action yet - neither approve nor reject.
• Approve Parent – The user assigned as the current user’s Approval Parent under Users.
• Managing Parent – The user assigned as the current user’s Managing Parent under Users.
• Ordering Parent – The user assigned as the current user’s Ordering Parent under Users.

Once all the users that should receive an email notification are entered or selected, clicking Save will save the
email list. Now notification of that email list can be created.

When you use Responsible Approvers tag in email lists, there is an application parameter that will control if the
approver is going to receive a notification per each violated rule or only one notification for all violated rules.
The parameter name is Remove duplicate approvers and can be found under Setup General Application
Parameters , tab Shopping Cart and Quotes. If this parameter is set to yes, only one email will be sent to the
approver per notification.

 Note

If dynamic tags are used to define recipients (for example, “Approve parent”) it is important to know that
this user (for example, Approve parent) will get a notification only if they are marked as "active" in the
administration.

6.8 Approvals

Approval Rules [page 450]


The following section describes detailed function of approval rules.

Likelihood of Approval [page 470]


This functionality allows extending approval rules.

Approval Auto-Reminder [page 471]


The Approval Auto-Reminder feature enables you to schedule automatic reminder emails that are sent
to approvers if they do not take action on quote approval requests for a predefined number of days. As
a result, the number of quotes awaiting approval is reduced and the approval process is streamlined.

Out of Office for Approvers [page 472]


The Out-of-Office feature for SAP CPQ approvals enables Approvers on leave to delegate their Approval
requests to substitute Approvers.

Approving Quotes in One Click [page 473]


The One-click Approval feature streamlines the approval process by enabling Approvers to accept or
reject Quotes directly from the email, without logging into SAP CPQ.

6.8.1 Approval Rules


The following section describes detailed function of approval rules.

Approval process is a SAP CPQ functionality that enables administrator to force users to obey a set of rules
when operating with theirs quotes. For instance, administrator can model the approval process so that he

SAP CPQ Setup and Administration Guide


450 PUBLIC Workflow-Approvals
doesn't allow users to put the discount on the quote amount in excess of 10%. This menu section uses to
set up approval process, as well as quote workflow. Approvals and workflow are two things that are quite
connected and that depend on each other.

To fully understand the approval process described in this manual, one should first get familiar with following
terms:

• Approver
• Submitter
• Approval Rule (condition)

To set up an approval process, follow these steps:

1. Set up individual users' Managing/ Ordering/ Approving parents on user administration page (not
required).
2. Set up any additional things that you might need in approval process (For example, set discounting rules if
you wish to treat discounts in approval rules) (not required).
3. Set up one or more Approval Rules.
4. Set up Workflow to treat Approval Rules.

You can find more details on the approval process terms below:

• Approver
Approver is a SAP CPQ user that is selected to be responsible for managing the approval status for
a particular quote in approval process. Therefore, the approver usually gets to view or edit submitters'
quotes. Think of the approver as of a manager whose job is to decide if a quote is valid or invalid in some
way. The approver is the person that needs to review a quote submitted to him and to decide what to do
with it. By workflow, it usually means that he can either Approve or Reject a quote, or in some cases, submit
it for further approval – if he himself also violates some rules and therefore has not enough authority to
resolve the approval. In that case, this approver also becomes a submitter to his approver. This multilevel
approval process will be described later in this chapter in more details.
One approval rule must have at least one approver, but it's not limited to that one only. It can have as
many as needed. Since approvers are ordinary SAP CPQ users (with some more rights), it is important
to select only active users as approvers. If an inactive user is set to be an approver to someone, quotes
submitted for approval will be assigned to him(who can't log in) and sent quote will get stuck. This behavior
is by design. It is possible to have an approval rule that defines user (For example "John Smith") to be
the approver. Now, when that user is deactivated , the approval rule must still apply, because users could
violate rules and avoid approval process. If quotes are stuck in 'waiting for approval' status, please consult
approval history and double check that you don't have an inactive user set as approver to some rule
• Submitter
Submitter is a SAP CPQ user that some particular approval rule applies to at that moment. If the approval
rule is evaluated to "true" than this user can submit a quote for approval process, if that action is available
in the workflow. The submitter is usually the quote owner, or a user that is currently operating on a
particular quote, although, it is not always the case. In multilevel approval process, one user's approver can
also be submitter if he violates some approve conditions himself. More details will be explained later in this
chapter.
• Approval Rule (condition)
Approval Rule can be considered as condition that needs to be evaluated as "true" in order to get the
approval process going. Rules administration is found under Workflow/Approval Approval Rules
menu item in administration. The page contains a table that is displaying a list of approval rules in system.
Here user can edit or delete or add a new approval rule. It is important to know that every time a quote is
loaded or reconfigured, or when quote prices are refreshed, all these rules get re-evaluated and checked

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 451
if there are some of them that will have to be evaluated to TRUE. When this happens, the quote can go
through approval process, if it is defined by workflow, which will be explained later in this chapter. The
following is the detailed procedure for editing an existing approval rule.
Clicking on the edit button to the left of the approval rule in the rules table will lead you to the
Approval Conditions Administration editing page. Users have to define first a name for this approval rule
(condition), and intuitive description for it. Next step is defining which users are affected by this rule. It is
possible to choose particular user (employee), user group or user company. Of course, it is allow making a
combination of these. Users selected here will be the actual submitters in the approval process.
1. User (if an approval rule exists for one user then only he can see these rules, all other rules are invalid
for him)
2. User Group (if an approval rule exists for a user group then all users within the user group are
subjected to the rule provided; those users do not have a direct rule associated with them)
3. Company (if an approval rule exists for a Company then all users within the Company are subjected to
the rule provided; those users do not have a direct rule associated with them through user group or
user)
If more than one approval rule applies for the same user, they are triggered in the following hierarchy:
• a rule chosen for a specific user
• user type
• company
If there is a match for any of those three, lower-priority selections are ignored. Approval rules with the
lowest priority are those that apply to all (have no user, user type or company specified). Those rules are
only triggered when no higher-priority rules apply for that user.
After defining users who will be affected by this rule, second step is setting up the Condition that will be
evaluated by the system. This is the core thing in the approval process – condition can be very simple
like (1 or 0) or a complex SAP CPQ formula that will be evaluated to either 1 (true) or 0 (false). Condition
field accepts all standard SAP CPQ parseable formulas, so this gives administrators great flexibility when
creating approval rules. If the entered condition is "<*GI(EXCEEDEDISCOUNT)*>", it means that this rule
checks the content of the "EXCEEDEDISCOUNT" global information variable and returns 1 or 0 accordingly.
After setting up to whom this rule will apply, and condition that has to be met, consequently next thing to
define is approve logic and approvers for this rule:
When the system starts evaluating the conditions in approval rules, it first evaluates and triggers those that
are the most specific for a user type or a company. If there aren’t any specific rules, it continues evaluating
the more general approval rules.
Example
If there is an approval rule set up specifically for Sales/ABCompany and a more general approval rule set
up for Sales/All Companies, once the system starts checking the rules, it will first evaluate the condition
in the rule Sales/ABCompany. Regardless of the result of the condition (true or false), the system won’t
check the result of the condition for ABCompany in the general rule Sales/All Companies.
Consequently, if you have a specific approval rule with a condition resulting to false and a general approval
rule resulting to true, the approval rule won’t be triggered because the condition defined specifically for
that user type/company results to false.
If there are no specific rules defined for a user type, the general rule (Sales/All Companies) will be applied
based on the result of the condition.

 Note

To ensure that the approval rules are triggered for the right user type or company, you may avoid
defining specific approval rules and set up all rules for All User Types/All Companies. However, have in
mind that this may slow down the system and lead to performance issues.

SAP CPQ Setup and Administration Guide


452 PUBLIC Workflow-Approvals
Approvers are being selected from the list of users labeled "Approvers:" on the page, as seen on the picture
below: All users from the system can be selected as approvers. One or more users can be flagged as
approvers for the rule currently being edited.
Regardless of users in the system, the approvers list always offers three items that are not actual SAP
CPQusers – the Managing parent, the Ordering parent and the Approving parent. These can be thought
as some kind of context sensitive shortcuts: every SAP CPQ user can be assigned these three parents
through standard user administration. Therefore, when selecting "Managing parent" as an approver when
editing an approval rule, approver will be different according to the user this rule applies to at the particular
moment. For example, if "Mike" and "Joe" are selected users to whom this rule applies to, and as approvers
are selected "Managing/Ordering/Approving parent", the quote won't necessarily go to the same approver
regardless of who submitted it for approval. In other words, if "Mike" and "Joe "have different Managing
parent, than the quote will end up with different approving user, in regard of who submitted it. As with the
Managing parent this also applies for Ordering parent and Approving parent.
So, every user selected from the list will be the approver for the particular rule, and will receive the quote to
review it and decide how they will respond.
Approve logic is set up by choosing desired value from the approval requirements drop-down list.
Approve logic can be best explained through example: If there is a rule that defines more than one approver
quote will end up being reviewed by more than one approver. Although every approver can Reject a quote,
all the approvers must agree to Approve it in order for that quote to be returned to the owner as Approved.
This is the default behavior, and it is an example of AND logic. To put it differently, one approver is enough
to reject the quote, but all are required to approve it.
However the OR logic is somewhat different. The rejecting policy is the same: it is enough that one
approver rejects the quote to have it returned to submitter as "Rejected", but also, a single approver
is enough to "Approve" the quote to have it returned as "Approved" to submitter, no matter how many
approvers didn't respond to approval process on that quote. The OR logic is a good solution for handling
employee vacations - having multiple approvers, among which anyone can approve a quote; so it is not
stuck waiting for one of the approvers to approve it when all the others already did. Clearly, than the AND
logic is more restrictive than OR logic is.
After setting up all the above mentioned terms, approval rule has been successfully set up.

Custom Approver Selection Logic (Dynamic Approver)

You have an option to define a Custom Approver Selection Logic. This Logic is also referred as a Dynamic
Approver in SAP CPQ. Custom Approver Selection Logic will determine an approver at the time a particular
approval rule is violated. Approver is determined depending on the expression that you defined through SAP
CPQ Workflow/Approval setup.

This expression can take into account a various elements regarding users, customers, quote calculations and
so on. For example, you can write a formula that will determine an approver based on the country/region the
customer is located in, or based on the total amount of the quote.

Follow these steps to define a Custom Approver Selection Logic:

1. Log into SAP CPQ and go to Setup.


2. Click on Approval Rules under Workflow/Approval menu item.
3. Click on Add New button to define a new Approval Rule.
A page where you can define Aproval Rules, Conditions and Dynamic Approver is displayed. At the bottom
of the page you will find a part where you can define all elements to properly set a Custom Approver
Selection Logic.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 453
4. Click on Add New button to define a new custom approver selection logic. Enter a name and expression
in the respective fields and select an appropriate value of the radio button. All fields are required and
explained below.
Fields that should be entered are:
• Name - You decide which name fits the best. Use descriptive name that explains what criteria is used in
the expression to define an approver.
• Expression - A result of evaluating the Expression that you input in this field should be Name, Email or
Username of SAP CPQ user that could be slected as dynamic approver. You can find a Name in the list
of users under Setup Users item menu.
• Result returned by expression -This radio button is used to define what information, the previously
entered expression should return after being evaluated. If you want your expression to return Name of
the user, you must pick a name option under this radio button. Similar applies for the other two options
(Email and Username).

When you save a newly created Custom Approver Selection Logic, it is automatically added to the list of
selected Approvers.

Example
In this example we will create an dynamic approver named Regional Approver.

Expression [IF]([EQ](<* CustomerTerritory *>,USA)){[email protected]}


{[email protected]}[ENDIF] is used to determine the email of the approver based on the Customer
Territory. Once the expression returns an email of the approver, SAP CPQ will locate a user with that email and
define it as a approver for the particular rule you violated in your quote.

In this example, if you work on your quote, and you choose a customer that has territory set to "USA", your
approver will be a user with the email [email protected]. You will find the name of this user in the list
of Approval Rules below your quote.

You are able to edit a Custom Approver Selection Logic. Whatever changes you make will be valid for all approval
rules that use this dynamic approver. You can also use any Custom Approver Selection Logic defined by other
users.

You are able to delete a Custom Approver Selection Logic, but only if it isn’t part of some other rules. If you try
to delete Custom Approver Selection Logic that is in use, you will be informed with the error message and the
list of rules where this Custom Approver Selection Logic is used.

When you are working on the quote and a rule is triggered, you will be informed that the quote must be
approved by the approver that was selected based on the expression you entered while defining a Custom
Approver Selection Logic.

If for some reason SAP CPQ was not able to locate the user that you were referencing in your expression, then
the error Approver couldn't be identified. Please contact your SAP CPQ Administrator will be displayed in the
quote. SAP CPQ will not be able to locate the user if you typed a wrong identification field value (invalid email,
invalid name or invalid username).

Delegation of approvals

Delegation of approval is designed for cases when a quote is sent to the SAP CPQ user for approval, but
that user is absent or is not able to approve of reject the quote. If delegation of approval is enabled then any
member of the team can review, approve or reject that quote as a delegated approver.

SAP CPQ Setup and Administration Guide


454 PUBLIC Workflow-Approvals
Delegation of approval can be enabled or disabled by selecting approval permissions for any or all of the
following three relations:

• Managing Parent
The Managing Parent, with the appropriate rights, can edit or delete their child users. They can also
reassign quotes between their child users.
• Ordering Parent
The Ordering Parent receives all orders placed by their child users for confirmation.
• Approve Parent
The Approve Parent receives quotes from the user that have been submitted for approval. Whether or not
a user’s Approve Parent receives a quote, though, depends on how the rules are set up in Approval Rule
administration. Each approval rule determines which user(s) will receive the quote for approval. The user’s
ApprovalParent is one of these options.

Assigning approval permissions to any of these three relations means that you define a delegated approver.
Delegated approver is allowed to approve quotes that are assigned to its' approval team.

The Approval team is comprised of SAP CPQ users that are the first level descendants of the delegated
approver in approval hierarchy. Approval team members are also approvers for other SAP CPQ users. Follow
these steps in order to enable delegation of approval:

1. Log into SAP CPQ and go to Setup.


2. Click on Approval Rules under Workflow/Approval menu item.

The Delegation of approvals table is used to define a delegated approver and control permissions for it. This
table contains three different SAP CPQ user approval relations.

You can delegate approve/reject permissions for any of the relation that it is approving or rejecting quotes. In
this example, approve parent has a permission to approve and reject quotes for its' approval team.

To summarize - when a user A request approval from its' approval parent B, then the user C which is set as
approval parent for user B and it is defined as a delegated approver can approve quotes that are in "Waiting For
Approval" queue of the user B.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 455
Example
Let’s assume that we have 5 users with their approval relations as depicted in the following figure:

User Kyle creates a quote which violates a previously defined approval rule. User Kate is defined as approval
parent for Kyle. Kyle requests approval from Kate and now Kate has a Kyle’s quote in approval queue.

If Kate is on vacation or for some reason is not able to log into SAP CPQ and approve the quote, then Mike can
complete the approval. Mike is selected as approval parent for Kate and approval parent relation is selected to
allow delegation of approval.

Once Kyle has sent the quote for approval, he is able to see the list of alternative approvers by selecting
approval history from the dropdown in the list of quotes.

Clicking Approval History in the quote actions opens a page with an overview of the quotes included in the
approval process. The table displays the quote status (approved, submitted for approval, etc.), names of users
who submitted the quote for approval and who performed the approval, related comments, and descriptions.
Also, the Resolving date column shows when an action was performed on the quote (approved, rejected, etc.).

Clicking on the button View alternative approvers, a list will be displayed as pop up.

SAP CPQ Setup and Administration Guide


456 PUBLIC Workflow-Approvals
Now, under the tab Waiting for approval, Mike sees a list of quotes that are directly sent to him for approval and
list of quotes that his team can approve. Note that Mike is approval parent for Kate and Jsmith as well, so he will
see quotes that are assigned for approval to Kate and Jsmith (column Responsible Approver).

Mike clicks on Approvals action for the particular quote. Approvals page is displayed and Mike is able to
approve or reject the quote.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 457
6.8.1.1 Parallel Approval

Parallel Approval, or Branching, allows you to split the approval process into several components independent
of one another. If you don’t use the Branching feature one approver can reject all components of your quote
which will induce SAP CPQ to send the entire quote for approval all over again. This may take more time than
you can afford to lose, and cause unnecessary delays.

How Parallel Approval Differs from Standard Approval

The standard approval process has three or four rules and the moment you decide to reject one rule only
the whole quote is rejected regardless of the fact that two unrelated rules have been approved. This means
you must repeat the process all over again and send the quote to your manager who then has to send it
over again to someone else. This can end up taking too much time. With the Parallel Approval process you
can simultaneously approve several rules which are independent of one another. Once you are done with one
branch you don’t care about the status of other branches. You have ensured independence of various different
rules, which are part of the same quote.

To show you what we mean, let’s say you are a regional dairy manufacturer that wants to expand by closing a
deal with a major food retailer outside your core market. This deal would not only give you access to a large
market, but might also lead to a possible expansion to neighboring markets. Before you are able to decide if
you can go ahead, you need to get the green light from your production department that first has to ensure you
have enough capacity for this kind of strategy. Then, you need to get the approval from the finance department
that must decide if the risk is justified. And, you need to get the thumbs up from the logistics department
that has to make sure your distribution network is able to partner up with the distributors in the new market.
This is where Parallel Approval comes in – it allows your company to segment your approval process so that
departments unrelated to one another can approve rules relating only to their own authority. Now, let’s say
the production department says boosting existing capacity won’t be a problem, but the finance department
says the pricing for the cheese assortment of products will have to be readjusted. With Parallel Approval, the
approval process will not have to go through the production channel again because pricing is the only property
that needs to be changed. Instead, it will be resubmitted along the finance branch only.

When you use Parallel Approval, you benefit in a number of ways:

• Fewer emails sent back and forth for approval request


• Better overall user experience
• Deals are closed faster

Using This Feature

It helps to think of each rule as part of a branch. For the initial user, all three rules have been violated. This
means that, for all three rules, the condition has been set as true. And as the approval process is being carried
out, users approve the green rule in its entirety first, meaning they approve the first branch.

To start, type in the name of the Branching component in the Branch Name text-entry box in Step 2 of Approval
Rules. Check the following figure to see what this field looks like in SAP CPQ.

SAP CPQ Setup and Administration Guide


458 PUBLIC Workflow-Approvals
The first thing that you should know about Branching is that it is a multi-layered feature. For the purpose of
Help, we would like you to think of the Approval process as divided into three segments, blue, orange and green.
The following figure deconstructs the process so you have a better idea of how it works. In the figure, you can
see that a number of rules have been defined, with a defined rule per each user. All rules share the same branch
name meaning that these rules are connected in one chain-like sequence. You must define a rule for each user
– not everyone is required to approve the same item but they must all be part of the same chain sequence. And
they are all unified by the same branch name. We have created a mock-up scenario meant to act as a road map
that takes you along the Branching process from start to finish. Read the text below the diagram to understand
the step-by-step Branching process.

 Note

Keep in mind that different approvers can approve rules within their branches without interfering in the
process of approval taking place within other branches. This is why we refer to Branching as the Parallel
Approval Process. In the mock-up example below, we are demonstrating only one approval scenario.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 459
Mock-up Example

1. For the purpose of this demo process, imagine you have defined the rule as a general user. That said,
before you send the approval request to the first approver in the hierarchy, you must first violate the Green
Approval rule, followed by the Blue and Orange Approval Rules. Once you have completed this, you can
submit the three approval rules to Approver No. 1.
2. The approval rule process starts to branch at this point. The three approval rules will go to three different
designated approval parties: Approver No. 1, Approver No. 2, Approver No. 3 and Approver No. 5.
3. The Green Approval rule is the first in line that will get approved, that is Approver No. 1 must approve the
Green rule. Then Approver No. 5 must approve the rule and submit it for approval to Approver No. 6, the
last one in the trajectory of approvers.
4. Once Approver No. 6 approves the rule, the Green Rule approval process is considered complete.
5. Now that the Green Rule has been completed, the Blue Rule is next in line to be approved. To illustrate the
benefit of Branching we will create a scenario in which Approver No. 2 changes the container configuration.
Let’s say Approver No. 2 changes the value of discounted price and updates the quote. SAP CPQ will
update the script with a new configuration. In other words, the value entered, means that the rule has
been approved. Then someone opens up the cart and changes the value of that container, meaning that
although this value has been approved now this is a new value and it would have to be approved again.
Because the Green rule follows the configuration of the container, its existing value, but because the
value has changed the rule is being evaluated again, the condition has been violated again, the approval
calculation has been violated again, so the system again asks the user to again enable the rule. Without
the ability to use Branching, the Green Rule would have to be sent back to Approver No. 1 all over again.
But Parallel Approval allows the Green Rule to move along the hierarchy as initially planned, that is to be
submitted to Approver No. 4.
6. To demonstrate the benefit of Branching further, let’s say Approver No. 3, who must approve the Orange
rule, rejects the rule. Even so, the only rule that has to be resubmitted is Orange, while others continue
along the approval process without having to be resubmitted.
7. At this point, the original user must resubmit the Orange rule again because it was the only one that was
rejected (without branching, the approval process would have to be taken back to Blue).
8. Approver 1 has to resubmit the rule to Approver 3. Let’s say this has not yet been completed – parallel to
this approval, Approver 4 can approve the other two rules (Blue and Green) waiting to be approved.
9. Lastly, Approver 3 should log in to approve the last remaining rule, that is Orange.
10. Finally, if you log in as the original user you will see that the quote has been approved and is no longer in the
Waiting for Approval status.

Use Case: Retract of Expired Approval Rules

The action Retract Approval Prrocess should be set up in Workflow to allow users to retract expired approval
rules. This action should be set up in Workflow to be available with the Change Status action (for example, it
should lead from Rejected to Awaiting for approval).

In this Use Case, there is a quote that violates two approval rules. Owner requests for approval. Approver
rejects it because one of the violated rules must be neutralized by the owner. Owner fixes quote and request
for approval again. Now, approver must retract the expired approval rule, and then actions approve and reject
become available for the approver. The example is as follows.

SAP CPQ Setup and Administration Guide


460 PUBLIC Workflow-Approvals
Assume that there are two SAP CPQ users:

• CPQ user 1
• CPQ user 2

CPQ user 2 is approver for the CPQ user 1.

Two approval rules are already defined as follows:

• Rule 1
• User: CPQ user 1
• Approval condition:

[IF]([EQ]
(<*Eval(<*CTX( Quote.Total.AverageProductDiscountPercent.DefaultDecimal )
*> > 30 )*>,True)){1}{0}[ENDIF]

• Approval calculation: 1
• Branch name: branch1
• Approver: CPQ user 2
• Rule 2
• User: CPQ user 1
• Approval condition: 1
• Approval calculation: 1
• Branch name: branch2
• Approver: CPQ user 2

CPQ user 1 creates a quote. Rule 2 is violated (since condition is set to 1).

CPQ user 1 inputs discount percent of 35. Rule 1 is violated too. (See the following figure).

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 461
CPQ user 1 requests for approval and CPQ user 2 rejects it. Then, CPQ user 1 fixes discount percent and inputs
30 instead of 35. Rule 1 is not violated anymore. CPQ user 1 must click on Retract expired approval rules in order
to be able to requests for approval again.

CPQ user 2 opens quote and approves it. Now the quote is in approved status.

Note that the Blue Rule remembers the value of some custom field if the value of some custom field has
been changed in the approval calculation; the Orange Rule follows the value of another custom field, and the
last Green Rule follows the value in the container in the configuration. If something in this process has been
changed the rule is being re-evaluated again; even though this rule has been approved the system asks you to
go into the approval process and to approve that branch. This multilayered system of approval was introduced
to prevent any tempering by different users of your quote. If some custom field value has been selected, that
is, the value box is not vacant and a value has been entered in the custom field, and if the user isn’t among
specific users, the rules are limited. This means the rules are not triggered for a number of specific users and
follow the approval process only with certain users in mind. The calculation formula which is evaluated each
time the user logs in checks the value of that custom field. When, as a user, you approve the rule in a certain
cart status the value of that custom field is being saved. Each time the system checks that the saved value is
equal to the existing value of the custom field. This is all carried out according to the formula entered in the
Approval Calculation.

6.8.1.2 Approval Process Administration

The following section describes detailed approval process.

Approval Rule by itself doesn't do any work – Workflow must be set up in order to have working Approval
Process. Approval rule is just here to serve as a flag in workflow that will allow some actions to happen that will
move the quote throughout the approval process.

Typical approval workflow is explained below:

Owner edits his quote, and violates one of the approval rules (For example, exceeds discount). After clicking
on Approvals button, he is taken to the page where he can leave a comment, see who are approvers, and what
rules he violated. We can see that this rule defines two responsible approvers.

After submitting the quote for approval, his approver will have it on Waiting for approval tab on load quote page.
There, approver can edit the quote, view what triggered approval rule, and after clicking on Approvals button,
he can perform an action on that quote:

Approver can here either approve or reject the quote. Now, what about the second approver? Even though one
approver has accepted the quote, on the user side in My Quotes tab, quote is still pending approval.

Clearly, the quote is still pending approval, so other approver needs to approve it also. (Remember the
"AND" /"OR" types of approve logic – this rule is definitively an "AND" logic type, since the first approver
did approve and the quote still waits the other approver to either approve/reject. Now the second approver
decides what to do with the quote.

As can be seen on the picture, the approval history section clearly displays that the first approver approved
the quote, and can see all the comments enterred, etc. Whatever action does this approver choose to perform,
the approval process will end because there are no additional approvers for which this quote is still pending for
approval.

SAP CPQ Setup and Administration Guide


462 PUBLIC Workflow-Approvals
The following describes how to administer this typical approval workflow:

First of all, discounting rules have to be defined, that will limit quote owner when setting discount, so that 50
will trigger an exceeded discount flag. This section is described in Discounts/Multipliers [page 521] section of
this manual, so refer there for more details about this simple step. Once the discounting rule is defined, we can
add an approval rule that will treat discounting.

We choose "Workflow/approval", then "Approval rules" menu items to the left. Next we add new approval rule,
and we call it "Discount Exceeded" (enter something user friendly here – both users and approvers should be
able to know what this rule applies to by its descriptive name). Next we select one user to be the user that this
rule applies to. (We can also select a particular user group, company, or combination of these). Then, in the
condition box, we enter: „<*GI(EXCEEDEDISCOUNT)*>” . This formula will check the "EXCEEDEDISCOUNT"
global information variable flag, which will be set if discounting rules are violated. This condition ensures that
discounting rules are being treated in this approval rule.

Next, we setup approval requirements (approve logic) – Set it to "AND" type.

From the Approvers list, we select two users that will be responsible for this rule.

Setting up the Workflow

After saving, we are done with creating approval rules. Now we need to take care of workflow, in order to
complete approvals setup. First of all, let's define what actions are used during approval process:

• Approvals
• Submit for approval
• Approve
• Reject

In the administration, we select Workflow/Approval then Workflow actions in the menu to the left, so that we
are now on the page that is used to set up workflow on "My Quotes" user tab.

There, we set up the following actions: From status open to status open, check the action "Approvals" and add a
condition to it: <*APPROVALREQUIRED*>. This will ensure that we have "Approvals" action only when we need
to submit the quote for approval.

Submit for approval action: we need to do just the same as for "Approvals" action, except from the
fact that "Submit for Approval" should change quote status, so we will place it to flow from "Open"
to "Waiting for Approval" rather than from "Open" to "Open". Also, we need to add condition formula
<*APPROVALREQUIRED*>. This will prevent users to submit for approval quotes that are not violating any
approval rules. User can also attach notifications to this action, so that for example Approvers can get email
when someone submitted a quote for approval to them.

That concludes workflow for "My quotes" tab, which is important to owner/submitter. Now on the admin menu
to the left click "Workflow/approval" then "Workflow" and on that page, click on "Waiting for approval" tab.:

This will open the similar workflow page, only that this one defines workflow for approvers, who use "waiting for
approval" tab rather than "my quotes".

In this tab, we need to have 3 approval actions: "Approve quote", "Reject quote", "Approvals" and "Submit for
approval".

"Approvals" action doesn't change status, so we will put it to flow from "Pending Approval" status to "Pending
Approval" status.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 463
Also, on this screen, we need to check "Submit for approval" action – in case that the approver himself also
violates some approval rules, so that he can submit it for further approval.

We need to add a condition: Approver can only submit for further approval if he is violating some rules.
Therefore, we add a condition to this action.

So we entered <*APPROVALREQUIRED*> tag, which evaluates to "TRUE" when user is violating approval rules.
The "Submit for Approval" action is useful when setting up multilevel approvals: For example, one approver
can have right to handle discounting up to 10, but for anything more, he cannot approve himself: he must also
submit for approval to the next approver, who can approve up to 20, and needs to further submit for more
discounting, and so on.

We place "Approve quote" action to flow from "Pending approval" to "Approved" status.

Also condition for this action has to be set up, so that we prevent approving quotes by approvers that should
not be able to approve (because they violate some approval rules themselves), so click on condition button and
enter [NOT](<*APPROVALREQUIRED*>) into condition field.

By clicking Update and Save, workflow changes will be completed. Finally, we need to set up Reject action on
Waiting for Approval tab. We will place it from "Waiting from Approval" status to "Rejected" status.

This rule can also be added an condition, if we need it. By default, Any approver can reject a quote if he wants
to. But we can also limit approvers to be able to reject a quote only if they don't violate any rules themselves.
For example, if an Approver needs to submit a quote for further approval, we already forbid him to approve it,
and we can forbid him to reject it, too. In that case, we need a condition on "Reject quote" action, so we click on
condition button and set up the following formula in condition field: "[NOT](<*APPROVALREQUIRED*>)".

After this has been set up, current workflow has to be saved and approval process has been successfully set up.

6.8.1.3 Approval Rules

The following section describes detailed function of approval rules.

Getting Started

Approval Rules is an SAP CPQ feature in the Workflow submenu that enables you to enforce rules for users
operating with quotes. Let’s say you want to limit the number of users (or identify specific users) who are
permitted to apply a discount of 10% or more on a product. Or, you want the quote to comprise computers with
a hard drive capacity of up to 100 GB only. You can enforce these rules by assigning an approver, or a hierarchy
of approvers, designated with consenting or rejecting the discount.

Glossary of Terms

To understand the Approval Rules process, we recommend you familiarize yourself with the following terms:
Approver, Submitter and Approval Rule.

SAP CPQ Setup and Administration Guide


464 PUBLIC Workflow-Approvals
• Submitter is an SAP CPQ user who submits a quote for approval. The submitter can be the quote owner
or a user currently operating a particular quote. In a multilevel process users’ approvers can also be
submitters if approvers themselves violate approving rules.
• Approver is an SAP CPQ user managing the approval status for a particular quote. The approver does this
by first reviewing a quote submitted by the submitter, and then deciding if the quote is valid or not. The
designated approver can submit the quote for further approval if he or she lacks authority (violates rule)
to complete the approval process. In this case, an approver becomes a submitter. You must assign at least
one approver to an Approval Rule but you can also assign as many as required. In other words, you can
assign several approvers to validate the decision of other approvers. Make sure that you select only active
users as approvers. If you assign an inactive user as the approver, the quote will get stuck in the Waiting for
Approval status. If this happens, check approval history and make sure that you don’t have an inactive user
assigned as approver to the rule.
• Approval Rule is triggered when the condition for that rule is rendered "true". If it is not rendered true, the
approval process will not be triggered. Approval rules are listed in a table that allows you to edit, delete or
add a new approval rule. Each time anyone enters the quote, SAP CPQ automatically re-assesses the quote
and checks if any approval rule has been violated. If any of the rules are violated, SAP CPQ will alert you
that the rule has been violated and ask you to send the quote for approval.

Using This Feature

Approval Rules comprises two main sections: Creating a new approval rule and Delegation of Approval.

Creating a New Approval Rule


Follow these steps to create a new Approval Rule. Learning how to create a new Approval Rule is the best way to
understand the table on the Approval Rules submenu page. Note that the fields marked with an asterisk (*) are
required:

• Click Add New and enter the name of the rule in the Approval Name text-entry box.
• Describe the Approval Rule in the Description box or click the icon to enter an expression in the formula
builder. The description informs you about the restrictions defined by the rule that users can violate. Let’s
say you are authorized to apply a discount of 30% but you applied a discount of 40%. Going forward, you
must decide if you will stick with this decision or if you will send the quote up for further approval along the
approval hierarchy. In other words, you can modify the quote so that you no longer violate that rule or ask
for additional approval. First, make sure that the rule has been defined in the workflow, and perform the
steps below.

1. • Select a user/user type/company (or all three) for whom the approval rule will apply.
• Select the company users belong to from the Company drop-down menu.
2. • Enter a condition in the Condition text-entry box that will trigger the approval process (the condition
must be rendered "true"). The condition is the core of the approval process and defines an
expression on which the Approval Rule will be based. The condition text-entry box accepts all
standard SAP CPQ formulas which give administrators greater flexibility when creating approval
rules. Let’s say you want to limit the currency amount of your quote to 5,000. If the expression
is evaluated to 1 (true) the rule is violated which triggers the approval process: [GT](<*CTX
Quote.Total.TotalNetPrice.DefaultDecimal )*>, 5000).
• The Parallel Approval section of Approval Rules is explained in a separate document. See Parallel
Approval [page 458] for more details.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 465
3. In Approval Requirements select:
• AND logic (approved if all approvers from the list approve) if you want all approvers on the list to be
required to approve the quote and only one to reject it. Note that choosing this option is restrictive and
that you may be stuck waiting for that one approver to approve your rule.
• OR logic (approved if any approver from the list approves) if you want only one approver form the list to
approve the quote. The "OR" logic is less restrictive and gives you more options. It is a great solution
when employees are away on vacation and you may lose time being stuck waiting for one approver to
approve your quote.
• Now click Select Users to select Approver(s) from a list of all Users currently defined in Setup.
• Click Save and Exit Setup.

Check out the following figure and the text below to learn about Based on Hierarchy and Custom Approver
Selection Logic:

Based on Hierarchy list allows you to select the submitter’s managing, ordering and/or approving parent as an
additional approver or approvers. Click the arrow pointing left. To cancel your selection, click your selection in
the Selected Approvers box and click the arrow pointing right.

Custom Approver Selection Logic allows you to select a user based on the user’s characteristics related to
the quote, opportunity, customer or territory, rather than the person’s name. The purpose of this feature is to
enable you to select the approver on the fly when you are pressed for time and need to make a quick decision.

Follow the steps below to select a user based on the Custom Approver Selection Logic:

• Click Add New to make your user selection.


• Instead of entering the user’s name in the text-entry Name box, enter the user characteristics you wish to
act as the criteria in selecting the approver.

SAP CPQ Setup and Administration Guide


466 PUBLIC Workflow-Approvals
• The expression-entry box Approver will be the users whose Name is equal to expression allows you to create
an expression that will define a dynamic approver, that is an approver who depends on the user's selection.
The expression will be based on the user’s property or selection previously defined in the cart. These may
include geographical market, pricing, customers on customer info tab, among other examples. SAP CPQ
will use the expression to check if users with those properties exist in the system.

 Note

Remember that the expression must be formulated so that its result always takes the form of the user’s
name, username or email.

• In the Result returned by expression, select the format of the generated approver you want to receive and
click Save.

Take a look at the following image to see what an expression in Custom Approver Selection Logic looks like.
Then take a look at the proceeding image too see SAP CPQ use of custom tables in forming that expression.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 467
 Note

You have now defined Approval Rules. The submitter takes over the process at this stage. Follow the steps
outlined below if you are a submitter creating a new quote subjected to the defined Approval Rules.

• Click New Project/Quotation and select the product you want by ticking the Add to Quote check box.
• Click Add to Quote at the top right corner of the page. Then trigger the rule and click Request Approval once
the Quotation page opens up.
• Click Submit for Approval.

Delegation of Approval
The Delegation of approvals table allows you to select alternate approvers if existing approvers are away or
unable to approve the rules. The purpose of this feature is to prevent situations in which the quote gets stuck
in the user’s approval queue where no one can approve or reject it. In other words, when quotes are sent for
approval to an approver, and that approver is absent, there is no way for other users to pull them out of the
approver’s queue, unless you use the Delegation of approvals. If you want to delegate approval to the Managing
parent, Approve parent or Ordering parent, you must set your choice to True. Check the following figure to see
what it looks like in the Approval Rules submenu of SAP CPQ Setup.

When you delegate approval to someone else, this change will be visible in two tables for approving quotes:
Quotes that I need to approve and Quotes that my team needs to approve in the New Project or Existing Project
Quotation.

• Quotes that I need to approve refers to a list of quotes sent to you for your approval.
• Quotes that my team needs to approve comprises you as well as all alternative approvers. This group refers
to a list of quotes displayed if the administrator selects that only one of the following roles can approve or
reject quotes: Approving Parent, Managing Parent and Ordering Parent. The list also includes the current
user if that user is set as one of selected roles for at least one active user in the system. The list contains
all quotes found in the user team’s approval queue. Let’s say user A and user B have user C set as their
approving parent. In this case, the administrator has set up that the approving parent can approve or reject
quotes instead of the approval owner. This means user C can see all quotes found in the approval queue for
user A and user B. The same rule applies to the managing and ordering parent. Now, let's say user A has
user B as approval parent (or managing or ordering) and this role can approve/reject quotes (according to
what the administrator defined in Setup). In this case, user B will always have action Approvals (this will be
the only action) available over quotes that user A needs to approve under Quotes that my team needs to
approve. Take a look at the following figure for more details.

SAP CPQ Setup and Administration Guide


468 PUBLIC Workflow-Approvals
When you click Request Approval from the Actions drop-down menu you will be able to see all the rules that are
waiting for your response. Refer to the following figure:

But when you click Approval History you will be able to see the approval history of your quote, including
the names of users who performed each action in the Performed By column. The column includes name of
approvers and alternative approvers which you can check by clicking the View alternative approvers. Refer to
the figure below. If the administrator hasn’t set up either of these roles, or if there are no rules that haven’t
been approved or rejected, this button will not be displayed.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 469
6.8.1.4 Submit Upstream
Sometimes the approver is not allowed to approve a quote because the discount level is above what he/she
can approve. However, this does not happen often and when it does, the approver gets confused. This is
because it is simply not explained to the user what happened.

User Side

When approver is approving a quote and the approval rules are taking away the submit action we need to make
it very clear, both visually and textually, what happened.

Instead of just not showing the approve action, the following message displays: This approval request is above
your authorized approval level. You can either reject a quote, or submit it upstream for approval.

If the approver does not have an Approve Quote button, because based on modeling it was not intended for this
button to be shown to the approver, this messages will not show up and the Approve Quote button, since it was
not supposed to be there, will not show up at all.

This feature is enabled for mobile and PDA.

6.8.2 Likelihood of Approval


This functionality allows extending approval rules.

User can define slider definition and attach the definition to approval rules. Sliders allow users to see the
probability of the current quote to be approved. One slider definition can be attached to more than one rule, but
one rule can have only one slider definition. Slider definitions are listed in a standard table, with actions copy,
delete and edit.

Clicking Add New opens a page for adding/editing a slider definition. The first step is to choose which field is
related with this slider. For this slider field user must add an editable field and set corresponding maths (see
Cart Fields Administration [page 480]). The second step is to enter slider boundaries and finally, the third step
is to select the rules to which this slider will be applied.

On the user side, for every rule that has a slider definition, a user has the information about likelihood of
approval based on the color and/or image. The color and image is the same as for margin health and can be
defined in Margin Health Design and Visibility [page 530].

The user can change this probability by clicking the Adjust button.

When a user moves a slider, SAP CPQ will calculate the value of the slider based on the min and max value
and on the slider's current position. (ex: min=20, max=30, current position = 30, slider value = 20 + (30 -
20)***30 = 23). After calculating the slider value, SAP CPQ will find the field, which is defined in the second
step and meets the criteria from the third step, then applies the value of the slider to that field, then finds the
editable group which contains this field and executes maths for this editable group. So, for this functionality to
work properly the user needs to adjust cart editable fields (see Cart Fields Administration [page 480]) Ex: If
the administrator on the second step chooses Product Type Discount Percent , also administrator must
specified Editable group field where Product Type - Discount Percent will be editable with the corresponding
math.

SAP CPQ Setup and Administration Guide


470 PUBLIC Workflow-Approvals
6.8.3 Approval Auto-Reminder

The Approval Auto-Reminder feature enables you to schedule automatic reminder emails that are sent to
approvers if they do not take action on quote approval requests for a predefined number of days. As a result,
the number of quotes awaiting approval is reduced and the approval process is streamlined.

Example

Sales representatives are often on the road and have no time to log in to SAP CPQ to check which quotes are
not yet approved. To prevent quotes from getting stuck in the Waiting for Approval status for too long, you can
set an approval auto-reminder that notifies designated approvers to act on quote approval requests.

Set an Approval Auto-Reminder

The feature can be accessed in Setup Workflow/Approval Approval Auto-Reminder .

To set an approval auto-reminder, take the following steps:

1. In Name (Required), enter a name for the approval reminder.


2. Turn on the Active toggle switch to enable the reminder.
3. Select your time zone from the Time zone drop-down list.
4. Select when the reminder is sent:
• Starts:
• Instantly: the reminder immediately starts the countdown to the days/time period defined in
Approval reminder will be sent.
• Specific date: the reminder starts from the selected date.
• Stops:
• Never: the reminder is sent until disabled or until a specific end date is determined.
• Specific date: the last reminder is sent on the selected date.
5. Under Approval reminder will be sent if, define the conditions under which the reminder is sent:
• when the number of quotes awaiting approval is greater than the number you enter;
• when quotes are awaiting approval for more than the number of days you enter;
Please note that in order to choose between the And/Or options, you first need to select both conditions.
6. Define the reminder frequency under Approval reminder will be sent:
• every day
• on specific days
• periodically on the defined number of days
Please note that a change in frequency options affects how a time interval is calculated. For example, if
the selected time period is initially set to five days but gets changed to seven after some time, the logic
assumes seven days from the day the change was made.
7. Choose the exact time when the reminder will be sent.
8. (Optional) Select Include backup approvers.
The reminder will be triggered for backup approvers in the same way it is triggered for the original
approver.
9. Click Save.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 471
Once the approval auto-reminder is set, the system searches through all quotes in the Waiting for Approval
status that fulfil the previously defined conditions and triggers the execution of the reminder after the specified
time period. Designated approvers receive an email reminding them that certain quotes are awaiting approval.

The email displays the following information in a table-like format:

• quotes that are waiting for approval


• the total amount of each quote
• the total discount for each quote
• the name of the account each quote is linked to
• the number of days each quote has been waiting for approval

To go to a specific quote from the email, approvers need to click on the quote in question. When logged in to
SAP CPQ, approvers are taken straight to the quote. However, if approvers are not logged in to SAP CPQ, or if
the session expires, approvers are redirected to the login page.

6.8.4 Out of Office for Approvers

The Out-of-Office feature for SAP CPQ approvals enables Approvers on leave to delegate their Approval
requests to substitute Approvers.

With this function, the requests are not held up during the original Approvers’ absence. The backup Approvers
can approve, reject or submit Quotes for further approval on behalf of the original Approver.

Example

You are in charge of Quote Approvals in your company. However, you plan to go on vacation, which means you
will be unable to respond to Approval requests during your time off. To ensure all Approval requests are dealt
with while you are away, you should make use of the Out-of-Office feature and choose one or multiple backup
Approvers to approve or reject Quotes on your behalf. The backup Approvers will receive a notification and
a copy of the approval requests addressed to you. They will be able to approve or reject Quotes, ensuring a
successful approval process while you are out of office.

Enable the Out-of-Office Feature

To turn on the out-of-office mode and start assigning backup approvers, take the following steps:

1. Go to User Page User details .


2. Turn on the Out of office toggle switch.
The fields for start and end dates and for choosing backup approvers display.
3. Define the dates.
4. Enter the first name, last name, full name, or the email of your backup approver in the Choose Backup
Approver field.
A dropdown list appears, displaying all results which contain the characters you entered. These results
include the backup approvers’ full name, email and country/region. If a backup approver is out of office at
the time of your search, the search results display their absence dates in your time zone.
5. Select backup approvers.

SAP CPQ Setup and Administration Guide


472 PUBLIC Workflow-Approvals
6. Click Save.

 Note

When searching for backup approvers, SAP CPQ filters active users who belong to the same company as
the original approver.

Out-of-Office Approval Authority

When a Quote is submitted, both the original and backup Approvers receive the Quote in their queue. Any
of the backup Approvers can approve/reject the Quote or submit it for further approval. If there are multiple
backup Approvers, a single backup Approver is enough to approve/reject the Quote.

When searching for available Approvers, SAP CPQ only looks into the first-level backup Approvers.

When the original Approver’s backup Approver is out of office (A→B), the Quote remains in the queue until
either A or B turns off the Out of office toggle switch.

In addition, if the original Approver has multiple backup Approvers (A→B, C, D, E, etc.), and they are at the
same level, SAP CPQ searches for the first available backup Approver. If all first-level backup Approvers are
unavailable, SAP CPQ stops searching for the next-level backup Approvers.

If the original Approver has Quotes awaiting approval, a warning message containing a link to the Waiting
for Approval tab displays when the Approver turns on the Out of office toggle switch. The Approver does
not have to clear the queue in order to set the out-of-office mode. However, the queued up Quotes are not
assigned to the selected backup Approvers. The backup Approvers receive Quotes that are submitted after the
out-of-office mode is turned on.

Reevaluating Backup Approvers

The backup Approver is determined when a User submits the Quote. If the Quote is already approved and then
resubmitted for a new approval, SAP CPQ reevaluates backup Approvers. For example, if the original Approver
disables the out-of-office mode or changes the list of backup Approvers, previous backup Approvers might not
be added.

6.8.5 Approving Quotes in One Click

The One-click Approval feature streamlines the approval process by enabling Approvers to accept or reject
Quotes directly from the email, without logging into SAP CPQ.

When Quotes are submitted for approval, they can be approved/rejected by one or multiple Approvers, as
previously defined in the chapter on Approval Rules. If a User violates certain rules, Approvers receive an
approval request email. The email contains all the information the Approvers asked for. Typically, the email
includes the Quote number, the description of the violated rule(s) and customer information. Approvers can
approve or reject Quotes directly from the email by clicking the Accept or Reject buttons.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 473
Example

Once a product is configured and added to Quote, a User can modify the discount. If the resulting discount
exceeds the defined discount limit, the Quote is submitted for approval and an approval request email is sent to
the Approver(s).

You can use a SAP CPQ-provided One-click Approval HTML Email Template [page 443] to create your own
One-click Approval template.

 Note

Administrators can modify CSS properties to suit their needs.

Alternatively, you can set up the fields you want to display in the approval request email by following the
steps outlined below.

Create a One-click Approval Template

The following procedure illustrates how to create an example template for One-click Approvals.

Prerequisites:

• Define Approval Rules. For details, see Approval Rules [page 450].
• Create Email Lists. For details, see Email Lists [page 448].
• Set up the Workflow. For details, see
Approval Process Administration [page 462].

1. Go to Setup Workflow/Approval Notifications .


2. Click Add New to create a notification.
3. Enter the notification name (Notification to Approver).
4. Click Save. Once the name is successfully saved, an additional window designated for the notification
message appears.
5. Click Add New to create your accompanying message.

6. Click to create the subject line (Approval Request for <* SYSTEMQUOTATIONNUMBER *>).
7. Add your previously created email list to the notification.
8. Paste the SAP CPQ-provided One-click Approval HTML Email Template [page 443] into the Message Text
box. Alternatively, if you do not want to use the ready-made HTML template, you can create one. To add

CTX tags and formulas you want to apply to your email template, click next to the message box. The
most frequently used tags are outlined in the Email Template Tags section below.
9. Select HTML as email type to ensure your email is rendered properly. Alternatively, if you have decided not
to use HTML for formatting, choose Plain text.
10. If applicable, enter a condition and add attachments.
11. Click Save.

When a User changes the field value affected by a predefined rule, the designated tags check whether Approval
Rules are violated. If one or more rules are violated, the approval request email is automatically sent to the
Approver(s).
When clicking Accept or Reject, the Approver is automatically redirected to SAP CPQ where the corresponding
message Quote is accepted. or Quote is rejected is displayed, respectively.

SAP CPQ Setup and Administration Guide


474 PUBLIC Workflow-Approvals
If there are multiple Approvers, the approval process depends on the AND/OR logic defined in the Approval
Requirements field in the Approval Rules section. In a scenario where the AND logic is applied, the Quote is
approved if all Approvers approve it. However, if one of them rejects it, the Quote is rejected. If the OR logic
is applied, the Quote is approved if any Approver from the list approves it. The Quote is rejected if a single
Approver rejects it.

Email Template Tags

The following is a list of tags that pull values from SAP CPQ fields.

You can add as many fields to your One-click Approval template as you need.

• <* CO_INFO(NAME) *>: pulls the name of the User who has submitted a Quote for approval.
• <* SYSTEMQUOTATIONNUMBER *>: pulls the Quote number.
• [IF]([EQ](<*CTX( Quote.Approvals.ApprovalRule(Name).IsViolated )*>,True))
{<*CTX( Quote.Approvals.ApprovalRule(Name).Description )*>}{}[ENDIF]: checks
whether a rule is violated and pulls its description.
• <*CTX( Quote.Customer(BillTo).Company )*>: pulls the Bill-to Customer’s company name.
• <*CTX( Quote.Customer(BillTo).Country )*>: pulls the Bill-to Customer’s country/region name.
• <*CTX( Quote.Customer(BillTo).Email )*>: pulls the Bill-to Customer’s email address.
• <*CTX( Quote.Total.TotalAmount.MarketDisplay )*>: pulls the total amount of the Quote.

 Note

he description of the violated rule is pulled only if the CTX.Quote.Approvals.ApprovalRule(Name).isViolated


tag is evaluated as true.

A tag must be created for each rule that might be violated in the Quote process.

6.9 Required Fields By Workflow Action

The Required Fields by Workflow Action section determines which fields are required before a certain workflow
action can be performed.

Unlike Workflow Permissions and conditions that hide any action the user isn’t allowed to perform, Required
Fields by Workflow [page 416] ensures that certain fields are entered before the action is successfully
performed. The option to perform the action is visible to the user, but a message is displayed telling the
user certain fields must be entered before the action can be performed.

In administration, user can find this section by clicking on “Workflow/Approvals”, and then on Required Fields
by Workflow Action. The Workflow/Custom fields matrix shows up, which enables user to set up desired
behavior. Note that this page has 3 tabs, to set up workflow for My Quotes, quotes that are edited from Waiting
for Approval tab, and quotes from other users (Other quotes).

For example, by default, Bill To field is required to place an order.

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 475
Clicking the Place Order button without entering information into the Bill To fields brings up the following
message: Bill To role data is not defined.

Clicking OK redirects the page to the Customer Info Tab where the Bill To field is located.

In general, there are three default fields, the Bill To, Ship To, and End User that can be set as required fields
before a user can perform a specified workflow action. A customer is fully defined only when all of the fields
that are required for that customer are filled.

 Note

If business partners and partner functions [page 332] are used instead of customers (only on Quote 2.0
tenants), all partner functions are automatically added to the list and customer-specific fields are not
available.

The other fields that can be set to as required fields are custom fields (see the section on Custom Quote Fields
[page 360] for how to add custom fields). All custom fields added are automatically populated on the left
(Fields rows) of the Required Fields by Workflow Action table.

A field can be required for a particular action by checking the checkbox in the intersection of the field and that
action and clicking Save. Also, a condition can be set that must be true before the field is required. To set a
condition, click the button next to the checkbox by the intersection of the field and the associated action,
and enter a condition using the syntax builder. Click Save after setting a condition.

On the user side, when the user selects the action via a button or a drop down box, SAP CPQ checks if the
required fields have been filled out and if not, SAP CPQ displays a message box and then redirects the user to
the tab containing the required field.

After clicking OK button, user will be redirected to the appropriate quote tab so that he can enter the required
field.

SAP CPQ Setup and Administration Guide


476 PUBLIC Workflow-Approvals
6.10 Item Actions Workflow

The following section describes the Item Actions workflow.

In addition to controlling the visibility of Quote Actions based on the Quote Status, administrators can now hide
certain Quote Actions by using conditions (For example, text in a part number) without any need to customize
the Quote user interface. Item Actions define which actions can be performed on individual items in the Quote
depending on the status of the Quote. The functionality is managed in Setup Workflow/Approval Item
Actions Workflow .

Quotes are organized in My Quotes, Waiting for Approval and Other Quotes sections to match the Quote
organization on the user side in SAP CPQ. A table in each section has two columns:

• Workflow Status - Quote Status in the workflow.


• Item Actions - shortcuts for managing the visibility of actions. When actions are enabled for a status, their
name is displayed above the shortcut icon.

Clicking or opens a page for managing visibility. For each status, you can manage the visibility of the
following actions by selecting/unselecting the respective checkbox:

• Edit (available only for configurable products)


• Copy
• Delete
• Refresh - reconfigures a specific item (unlike the standard action Reconfigure which reconfigures all quote
items). This action reloads the item and applies all the relevant rules.
• Create Favorite
• Upgrade to new product version

The icon shows next to each action. Clicking it opens the formula builder for creating conditions for
additional visibility restrictions. When a condition is created, a flag icon shows next to the formula builder icon.
The conditions should be built on the following rules:

• For the action to be hidden, the condition needs to evaluate to 0.


• To make the action visible, the condition needs to evaluate to 1.
• If the formula evaluates to anything other than 1, the action is not visible.
• If there is no condition formula, the action is visible if selected for the Quote Status.

Example

To hide the Edit action for all Quote Items that have a part number SMB2, the following example formula could
be used:

[NEQ](<*CTX( Quote.CurrentItem.PartNumber )*>,SMB2)

To hide the Edit action for the User Type Contract Management, you could use the following example formula:

[NEQ](<*CTX( Visitor.UserType.Name )*>,Contract Management)

SAP CPQ Setup and Administration Guide


Workflow-Approvals PUBLIC 477
Condition formulas additionally restrict the visibility of Item Actions enabled for each Quote Status. The
condition cannot override Item Actions that are not allowed for the given status. On the user side, the item

actions are available for each product in the Quote under the icon.

SAP CPQ Setup and Administration Guide


478 PUBLIC Workflow-Approvals
7 Pricing/Calculations

This section of online Help deals with pricing mechanisms and ways in which calculations are performed in SAP
CPQ.

Cart Fields Administration [page 480]


The Cart Fields administrative section allows you to define which fields in the cart will be editable for
each user group and order status.

Pricebooks [page 493]


A Pricebook contains prices for products in SAP CPQ. In case of multiple prices for one product
(discounts, special offerings, loyalty discounts, etc.), each price should be defined in a separate
Pricebook. Multiple Pricebooks are grouped under a Market.

Currencies [page 517]


Currencies and Market Definitions allow addition of multiple currencies and their conversions into the
system.

Markets [page 519]


Once currency factors have been entered, Market Definitions need to be defined. Market Definition
factors are multiplied by the calculated currency to get the final price.

Market Visibility [page 520]


Once a Market has been defined, it is not visible until a user has been given permission to see the
Market. This is handled in Market Visibility under Pricing/Calculations. Here visibility rules can be
created to determine which user(s) see which Markets.

Discounts/Multipliers [page 521]


Multiplier and discount administration allow discounting when a quote is created.

Discount Priorities [page 524]


Setting the discount priorities allows administrators to set the order in which discounting rules are
evaluated and executed on the quote.

Total Amount Limit [page 525]


Total Amount Limit allows rules to be created which limit the total amount each User or User Type can
Quote or Place Order.

Margin Health [page 527]


The Margin Health feature in both quote engines allows sales representatives to get a visual indication
of whether their profit margin is within the limits of what the administrator marked as a healthy profit
margin.

Country/Region Sales Tax [page 530]

Edit Item Cost on Cart [page 532]

Preserve Original Currency Rates [page 533]


Quote prices depend on market factor and currency rate, which can be updated through Setup. By
default, when users edit existing quotes and market factor and/or currency rate have been changed in
the system, new values will be applied to the quote.

Recurring and Non-Recurring Prices [page 533]

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 479
This new feature gives the ability to support MRC and NRC in the same product and on the same
line item in the cart. There will be two sets of prices, multipliers, discounts, margin indicators, margin
sliders for each item and product type. This allows businesses that have monthly billings to be able to
accurately display this pricing in their configuration and in the cart.

Rounding Setup [page 535]

Shipping [page 538]


The Shipping section provides a means to add shipping and other associated costs to quotes or orders
based on the shipping method selected.

State Sales Tax [page 539]


This feature enables admin to define state tax percentage that will be applied when calculating quote
amount. Admin has the option to define tax calculation based on the state found in the Ship To role, to
define formula that will calculate state tax percentage or to make the tax field editable in the quote.

Price Code in Pricing Calculations [page 540]


Simple products can have price code defined. If price is derived from SAP CPQ standard pricebooks, it
will be calculated based on part number and price code.

7.1 Cart Fields Administration

The Cart Fields administrative section allows you to define which fields in the cart will be editable for each user
group and order status.

It is also possible to define which calculations will be executed on action calculate for each Editable Field
Group. An Editable Field Group is a set of cart fields, which are associated with the same calculations. Actions
performed in Cart Fields Administration are logged in Audit Trail Admin Actions .

SAP CPQ Setup and Administration Guide


480 PUBLIC Pricing/Calculations
7.1.1 Status - User Group Grid

The Cart Fields administrative section can be accessed by clicking Cart Fields under Pricing/Calculations. This
brings up the Status - User Group Grid as shown in the image below:

On mouse-over, user can see which fields are editable for each User Group - Status combination. For example,
Editable Fields for the User Group Sales and order status Quote won are shown in the image below:

To define Editable Fields and Calculations for a single User Group - Status combination, click the button.

To set Editable Fields and Calculations for all order statuses of a specific user group, click the User Group name
at the top of the grid as shown below.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 481
To set Editable Fields and Calculations of a status for all user groups, click the Status name as shown in the
image below.

SAP CPQ also allows user to set Editable Fields and Calculations for all user groups and statuses by clicking the
Set all link.

 Note

The Default column allows setting Default Editable Fields and Calculations, which will be applied to each
newly added user group or order status.

Clicking the button, User Group name, Status name, or Set all link will bring up a screen where user may
define Editable Fields and Calculations. (See Adding/Removing Editable Fields [page 483]).

SAP CPQ Setup and Administration Guide


482 PUBLIC Pricing/Calculations
7.1.2 Adding/Removing Editable Fields

Clicking the button, User Group name, Status name, or Set all link in the Status - User Group Grid (See Status -
User Group Grid [page 481])will bring up a screen where user may define Editable Fields and Calculations.

Available Fields and Calculations

• Fields – The Fields list box allows for the selection of available fields, which are not editable.
• Row Types – Editable fields from the Fields list box can be filtered by selecting the appropriate row type
from the Row Types drop down menu.
• Calculations – The Calculations list box lists all available calculations. When you click on a calculation, you
will see a detailed explanation of what that calculation exactly does.
• Copy From – The Copy From option allows you to copy existing settings from other User Group - Status
combinations.

 Note

If you select List Price to be an editable field, you will also need to adjust the Allow Edit List Price on the Cart
application parameter. See Application Parameters [page 637] for more details.

If this parameter is set to Cannot Change List Price, List Price will not be editable even if specified in Cart Fields
Administration.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 483
For List Price to be editable, Allow Edit List Price on the Cart should be set to one of the following values:

• Can Change List Price if it's 0 – the user can change the price only if the product’s price is zero.
• Can only increase List Price – the user is only allowed to increase the product's price.
• Can change any List Price – the user can change the price without restrictions.

Item Add/Update Calculations

Calculations listed in this section will be executed when add item or update actions are invoked. The three
calculations listed in this section (See the figure above) are the base calculations used for calculating all fields
in the cart.

Editable Field Groups and Related Calculations

The Editable Field Groups and Related Calculations section of the definition screen shows the Editable Groups
and related calculations.

The Add new field set link adds a new Editable Group. An Editable Group can be marked as default by selecting
the Default checkbox. This means that these fields will be editable when you enter the cart for the first time. If
no group is set as default, the system will sort visible columns (columns from the personal quote layout page)
based on the system sorting mechanism and make the editable group of the first column default. One active
editable group always needs to exist, which is why it's recommended to always set one as default. Only one of
the groups can be editable at a time, but more than one field can be a part of an Editable Group.

For settings shown in previous two figures, the cart will appear as shown in the following figure. The first time
you enter the cart, the Total Net Price is editable, but by clicking on Sub -Total this field becomes editable.

SAP CPQ Setup and Administration Guide


484 PUBLIC Pricing/Calculations
In this case, if you enter 8,000 for the Total Net Price and press ENTER or click on Calculate, calculations in
Editable Field Group 4 will be executed. In this example, SAP CPQ calculates the discount percentage that will
generate 8,000 for the Total Net Price as shown in the following figure.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 485
Adding fields and calculations is explained in the following example:

First, select ProductType - Multiplier and ProductType – DiscountPercent from the Fields list. Click on
(marked with a green circle in the figure above). This will add these fields to Editable Field Group 2, and remove
them from the list of available fields.

 Note

One field can belong to only one editable group.

From the Calculations list box in the Available Fields and Calculations section, select the calculations you wish
to add to these fields (use the Ctrl key to select multiple calculations). Click on (marked with a red circle

in the figure above). Sort the calculations by clicking on (marked with a blue circle in the figure above).

SAP CPQ Setup and Administration Guide


486 PUBLIC Pricing/Calculations
 Note

The order of the calculations is important. If you are having problems with the cart check to see if the order
of the calculations is correct. Usually the last three calculations for a group should be the ones listed in the
Item Add/Update Calculations section, in that order.

If you wish this Editable Field Group to be default, select the Default check box (marked with a yellow circle in
the figure above).

Finally, when you have finished defining the Editable Fields, click on Save at the bottom of the screen.

 Note

If an editable group is in focus on the quote, the calculations tied to that group are executed even if users
change the value of some other field that is not in that editable group. Consequently, it may happen that
users change the value of one custom field and then the value of another field, but the system triggers the
calculations tied for the first field because that field is still in focus.

7.1.3 Editable Quote Comment Field

The Quote Comment field is a total field such as Total Amount, Total List Price, etc. Once the field has been
made Editable, users can use it to input comments related to the quote.

In order for this field to be editable in the quote, admins must:

• Go to Setup Pricing/Calculations Cart Fields Administration .


• Select an appropriate User Type that will be able to edit the field.
• Select an appropriate Quote Status.
• Select Total – CartComment from the Fields list box.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 487
• Click the green arrow in the Editable Field Groups and Related Calculations tab. Your selection will then
appear in the list box below.

To see what a non-editable Quote Comment Field and an editable Quote Comment Field look like on the user
side, take a look at the following figures respectively.

SAP CPQ Setup and Administration Guide


488 PUBLIC Pricing/Calculations
7.1.4 Recurring Rolled-Up Fields

This feature gives user ability to use rolled-up fields (rolled-up recurring list price, rolled-up recurring extended
list price, rolled-up recurring net price, rolled-up recurring extended amount, rolled-up recurring cost, rolled-up
recurring extended amount, rolled-up recurring gross margin, rolled-up recurring discount amount, rolled-up
recurring discount percent, rolled-up recurring net difference from base item, rolled-up recurring end customer
unit price and rolled-up recurring end customer extended price). Rolled up fields for main item are calculated
as summary of all items’ field amount belonging to same configuration (for example, rolled up list price is a
summary of all items' list prices).

Recurring rolled-up fields can be displayed in generated document and sent to CRM. These fields are
calculated only if application flag is set that recurring prices are used in the system.

For each of these fields, new CTX tag are developed on the CurrentItem tag.
Tag name is same as for non-recurring fields, with prefix MRC added (example -
<*CTX( Quote.CurrentItem.MRCRolledUpDiscountAmount.DefaultDecimal )*>)

Editing rolled-up recurring net price

When user edit rolled-up recurring net price recurring discount is recalculated for all (main and line) items.

Example:
Product total price is 1200 and product cost is 720. Recurring discount percent is 10%.

User edit rolled-up recurring net price and enters 900.

Recurring discount is calculated for all line items to 25%.

Rolled-up recurring GM is calculated to 20%.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 489
Editing rolled-up recurring extended amount

When user edit rolled-up recurring net extended amount recurring discount is recalculated for all (main and
line) items.

Example:
Product total price is 1200 and product cost is 720. Recurring discount percent is 10%.

User edit rolled-up recurring extended amount and enters 1000.

Recurring discount is calculated for all line items to 16.67%.

Rolled-up recurring GM is calculated to 28%.

Editing rolled-up recurring gross margin

When user edit rolled-up recurring gross margin recurring discount is recalculated for all (main and line) items.

Example:
Product total price is 1200 and product cost is 720.

Recurring rolled-up extended amount is 1080. Recurring discount percent is 10%.

User edit rolled-up recurring gross margin and enters 25.

Rolled-up recurring extended amount is calculated to 960.

Editing rolled-up recurring discount percent

When user edit rolled-up recurring discount percent recurring discount is recalculated for all (main and line)
items.

Example:
Product total price is 1200 and product cost is 720.

Recurring rolled-up extended amount is 1080. Rolled-up recurring discount percent is 10.

User edit rolled-up recurring discount percent and enters 25.

Rolled-up recurring extended amount is calculated to 900.

Editing rolled-up recurring discount percent

When user edit rolled-up recurring discount amount recurring discount is recalculated for all (main and line)
items.

SAP CPQ Setup and Administration Guide


490 PUBLIC Pricing/Calculations
Example:
Product total price is 1200 and product cost is 720.

Recurring rolled-up discount amount is 120. Recurring discount is 10. Rolled-up recurring extended amount is
1080.

User edit rolled-up recurring discount amount and enters 100.

Recurring discount is calculated to 8.33. Rolled-up recurring extended amount is calculated to 1100.

Editing rolled-up recurring net price (relative)

When user edit rolled-up recurring net price relative recurring discount is recalculated for all (main and line)
items according to their max and min discount percents.

Example:
Product total price is 1200 and product cost is 720. Recurring discount is 10%.

Max discount percent for main and line items is 40% and min discount percent for main and line items is 5%.

User edit rolled-up recurring net price and enters 1000.

Recurring discount for main and line items is calculated to 16.67%.

Editing rolled-up recurring extended amount (relative)

When user edit rolled-up recurring extended amount relative recurring discount is recalculated for all (main
and line) items according to their max and min discount percents.

Example:
Product total price is 1200 and product cost is 720.

Recurring discount percent is 10% for main and line items.

Max discount percent for main and line items is 40% and min discount percent for main and line items is 5%.

User edit rolled-up recurring net price and enters 1000.

Recurring discount for main and line items is calculated to 16.67%.

Editing rolled-up recurring gross margin (relative)

When user edit rolled-up recurring gross margin relative recurring discount is recalculated for all (main and
line) items according to their max and min discount percents.

Example:
Product total price is 1200 and product cost is 720.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 491
Recurring discount percent is 10% for main and line items.

Max discount percent is 40% and min discount percent is 5% for main item.

Max discount percent is 20% and min discount percent is 5% for line item.

Rolled-up recurring gross margin is 33.33.

User edit rolled-up recurring gross margin and enters 25.

Recurring discount for main item is calculated to 26%. Recurring discount for line item is calculated to 14%.

Rolled-up recurring extended amount is calculated to 960.

Editing recurring rolled-up discount percent (relative)

When user edit rolled-up recurring discount percent relative recurring discount is recalculated for all (main and
line) items according to their max and min discount percents.

Example:
Product total price is 1200 and product cost is 720.

Recurring discount percent is 10%.

Max discount percent is 40% and min discount percent is 5% for main item.

Max discount percent is 20% and min discount percent is 5% for line item.

User edit rolled-up recurring discount amount and enters 17%.

Recurring discount for main item is calculated to 21.8%. Recurring discount for line item is calculated to 12.2%.

Rolled-up recurring extended amount is calculated to 996.

Editing recurring rolled-up discount amount (relative)

When user edit rolled-up recurring discount amount relative recurring discount is recalculated for all (main and
line) items according to their max and min discount percents.

Example:
Product total price is 1200 and product cost is 720.

Recurring discount percent is 10%.

Max discount percent is 40% and min discount percent is 5% for main item.

Max discount percent is 20% and min discount percent is 5% for line item.

Rolled-up recurring discount amount is 120.

User edit rolled-up recurring discount amount and enters 100.

Recurring discount for main item is calculated to 15.5%. Recurring discount for line item is calculated to 9.5%.

SAP CPQ Setup and Administration Guide


492 PUBLIC Pricing/Calculations
Rolled-up recurring extended amount is calculated to 1050.

7.1.5 Rolled-Up Cost and Margin

This feature gives user ability to use rolled-up cost and margin on the item level.

Rolled-up cost is displayed on the main item level and represents sum of main item and line items costs. The
same applies for rolled-up margin.

Editing rolled-up net price

When user edit rolled-up net price discount is recalculated for all (main and line) items

Example:
Product total price is 1200 and product cost is 720. Rolled-up margin is 40%. User edit rolled-up net price and
enters 1000. Discount is calculated for all line items to 16.67%. Rolled-up GM is calculated to 28%.

Editing rolled-up gross margin

When user edit rolled-up gross margin discount is recalculated for all (main and line) items.

Example:
Product total price is 1200 and product cost is 720. Rolled-up margin is 40%. User edit rolled-up gross margin
and enters 25%. Discount is calculated for all line items to 20%. Rolled-up price is calculated to 960.

7.2 Pricebooks

A Pricebook contains prices for products in SAP CPQ. In case of multiple prices for one product (discounts,
special offerings, loyalty discounts, etc.), each price should be defined in a separate Pricebook. Multiple
Pricebooks are grouped under a Market.

Pricebooks within a Market are created under the following rules:

• The currency is shared across all pertaining pricebooks.


• Each pricebook has a unique name.
• A pricebook can optionally have a parent pricebook.

Example

A company Europe Trucks sells truck tires through sales channels. The channels are organized into Bronze,
Silver and Gold. Each group has multiple underlying sales channels. Since Gold vendors have a long-lasting

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 493
commercial relationship with Europe Trucks, they get to buy the trucks per discount prices. Both Bronze and
Silver vendors also get a discount, although lower than the one Gold vendors get. Consequently, each group
requires a specific Pricebook for the tires. Additionally, Silver and Bronze channels have loyal Customers to
whom they wish to offer special pricing conditions.

So that the system could retrieve a Pricebook specific for a Customer (Customer 7 - Scandinavian Trucks)
administrators create a visibility formula [EQ](<*CTX( Quote.Customer(BillTo).Company )*>, Scandinavian
Trucks) and the specific Pricebook is retrieved when Users select Scandinavian Trucks as the Bill To Customer.

When the Vendor 3 logs into SAP CPQ, the system retrieves the prices from the Vendor 3 Pricebook. If no
prices are define in this Pricebook, the system pulls the prices from the parent Pricebook Gold.

Create a Pricebook

To create a Pricebook, you first need to group it under a Market, define who sees it and then add entries
(products and prices).

1. In Setup, access Pricing/Calculations Pricebooks .


2. In the Pricebooks tab, select the Market and the list of underlying Pricebooks displays.
3. Click Add New Pricebook and a page with the Definition and Entries tabs displays.
4. (Optional) In Definition, select the parent Pricebook. Access the section below for more details on
Pricebook hierarchy.
5. Define the Pricebook name.
6. Select Visible to everyone if you wish everyone to have access to the pricebook.
Alternatively, define advanced or simple visibility conditions to restrict access to the Pricebook. If not set
to be visible to everyone, a Pricebook must have at least one visibility condition defined so that the system
could trace it and properly include it in the Pricebook drop-down list on Quotes.
7. Select the dates in Valid from and Valid until to define when the Pricebook is valid.
8. (Optional) Describe the Pricebook in Description.
Click Save. You can now move to the Entries tab to add products and their respective prices.
You can add pricebook entries manually, one by one, or import a Microsoft Excel file with multiple entries
[page 117]. The maximum size of the file is 20MB.
Imported entries are matched with the existing entries via the CpqTableEntryId column. If you are inserting
a new pricebook entry, you should leave the cells in this column empty and the system will create a new
entry for each row in the Excel. On the other hand, if you want to update existing entries, you should
populate the respective cells in the CpqTableEntryId column so the system knows which entries to update.
If there isn't a CpqTableEntryId column in the Excel file, all rows are treated as new entries.

Visibility Conditions
Creating simple and advanced visibility conditions enables Administrators to support Users' complex pricing
scenarios. By setting corresponding visibility conditions, Administrators can relate a specific Pricebook to a
Customer so that it automatically displays once Users select the Customer. Note that the pricebook won't

SAP CPQ Setup and Administration Guide


494 PUBLIC Pricing/Calculations
be automatically selected when affected by visibility conditions, it will only become visibile on the quote,
where it needs to be manually selected by the user. Also, SAP CPQ supports complex pricing for Users who
manage indirect sales through channels. A combined scenario in which each sales channel creates as many
Customer-specific Pricebooks as needed is also supported by the optimized Pricebooks feature.

Create Visibility Condition

To create a visibility formula, select the Advanced visibility checkbox and a dedicated box for the formula
displays. You can define the visibility formula in the formula builder by using the Quote-level and User-level
tags. Please note that by entering 1 in the dedicated box you enable visibility to all Users. The system activates
the advanced formula every time the respective Quote is modified.

The Visibility conditions section shows if advanced visibility is disabled. To create a simple filter, select a field
type, an operator and enter a value. Simple visibility relies on the User and Customer fields and the logic OR
is applied between the visibility conditions. If you need more complex conditions and the logic AND between
them, you should create an advanced formula. The system supports multiple filters.

Default Pricebook
When retrieving prices for products in a new Quote, the system first looks for the User's default Pricebook. The
feature is managed on the User Page.

A default Pricebook is Market-specific, so before selecting the default Pricebook on the User Page, Users
should first select the default Market. On their side, Administrators can select the default Market and
Pricebook for each underlying User in Setup.

 Note

The fields for selecting the default Pricebook on the User Page and the Pricebook in Quote do not display in
the following scenarios:

• The logged User does not have the rights to see any Pricebooks.
• The visibility conditions set up for Pricebooks prevent the fields from showing on certain Quotes.
• The tenant does not have any Pricebooks defined because custom tables are used for pricing.

Pricebook Hierarchy
SAP CPQ enables Clients to manage complex pricing scenarios in which a Product's price depends on multiple
conditions. Pricebooks in SAP CPQ are organized in parent/children hierarchy in levels within a Market. You can
create as many parent and children Pricebooks as you need to achieve specific business goals.

When managing a Quote, Users first need to select its Market and the default Pricebook will display, if defined.
Additionally, the system loops through the Pricebooks from the bottom to the top to display other Pricebooks
visible in the same Market so Users could override the default selection. If only one Pricebook is available, the
system selects it by default. The system filters Users by the visibility rules defined by the Administrator.

Retrofitting Quotes Created Prior to 2017.4


SAP CPQ 2017.4 introduces enhancements to the existing Pricebook feature. The feature has been optimized to
adapt to Quotes/Pricebooks created in previous versions:

• Pricebooks visibility hierarchy is kept when loading old Pricebooks in new SAP CPQ versions, meaning that
a Pricebook with the highest visibility level will have the highest level when loaded in the new version.
• When loading Quotes created in versions prior to 2017.4, the ID of the assigned Pricebooks is null. The
system selects the default Pricebook according to the logic used in previous versions (the Pricebook with

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 495
the highest level in the selected Market is selected as default). The default Pricebook is used for pricing
any new items added to the Quote. Previously added items retain their original prices. To save the defaulted
value, Users need to save the Quote.

 Note

If Users decide to change the Pricebook, the system recalculates the prices of all Quote items based on the
newly selected Pricebook.

• When copying and reassigning a Quote, if Users additionally reconfigure it, the entire Quote is copied/
reassigned and the Pricebook visibility is reconfigured. The system copies the selected Pricebook even if it
is no longer visible.
• When loading Quotes with inactive Pricebooks (removed from the system) and invisible Pricebooks (the
User does not have the necessary permission rights), a warning message displays next to the Pricebook
drop-down indicating that the Pricebook is no longer available and suggesting that the new Pricebook
should be selected.
• Regarding the Quotes in the Other Quotes tab, the logic applied for Markets is used for Pricebooks as well.
Previously selected Pricebooks are used on Quotes even though the visiting Users cannot access them.
Visiting Users can apply their Pricebooks which automatically recalculates Quotes. Pricebooks selected by
visiting Users also apply to the Quote owner.

7.2.1 Effective Dates for Price Book Entries

Application parameter, which can be found in Setup General Application Parameters General
Parameters , named ‘Show effective dates for price book entries’, is responsible for ability to record different
prices for same combinations of part number + price code in price books but for different validation period.
When this parameter is set to TRUE user can define validation period for particular price book entries. In Setup
when accessing particular price books, two additional columns will be visible (‘Valid From’ and ‘Valid Until’) -
Figure 1, when this parameter is set to FALSE these two columns won’t be visible - Figure 2, and system will
behave as before (validation period for price book entries won’t be defined). Same will be if admin tries to add
or edit some price book entry - Figure 3 and Figure 4.

 Note

The Show effective dates for price book entries parameter limits adding duplicate pricebook values (entries
with the same part number and the same price code) as explained in the Duplicate Pricebook Entries
section [page 540].

SAP CPQ Setup and Administration Guide


496 PUBLIC Pricing/Calculations
Figure 1

Figure 2

Figure 3

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 497
Figure 4

On user side same behavior will be defined, when parameter is set to TRUE columns Valid From and Valid Until
will be visible - Figure 5, in other case when parameter is set to FALSE they won’t - Figure 6. Same will be if user
tries to add or edit some price book entry - Figure 7 and Figure 8.

Figure 5

Figure 6

SAP CPQ Setup and Administration Guide


498 PUBLIC Pricing/Calculations
Figure 7

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 499
Figure 8

Exporting price books will behave as before, when application parameter is set to FALSE columns Valid From
and Valid Until won’t be exported - Figure 9, and when parameter is set to TRUE they will be shown - Figure 10.

Figure 9

SAP CPQ Setup and Administration Guide


500 PUBLIC Pricing/Calculations
Figure 10

Template for import will be the next - Figure 11. If application parameter is set to TRUE two new columns will
be taken into consideration, otherwise they won’t. Columns Valid From and Valid Until must be in date format
(‘mm/dd/yy’) or empty, or otherwise it won’t be imported in price book. Error will be shown.

Figure 11

For price book entries that were created before this application parameter was included in system, or columns
are left empty during the import, these entries will have unlimited validation period, and columns for Valid
From and Valid Until will be empty when application parameter is set to TRUE. This means if column Valid
From is empty and column Valid Until has some value (e.g. 12/12/12), price book entry won’t have valid
from restriction, and it will be valid until 12th of December 2012. If column Valid From has some value (e.g.
02/02/12) and doesn’t have value for Valid Until, price book entry will be valid from 2nd of February 2012, and
won’t have valid until restriction. If both columns are left empty price book entry won’t have any restrictions
and it will be valid always.

 Note

Two validation periods must not overlap for the same part number (or part number and price code),
otherwise correct system behavior can’t be guaranteed.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 501
7.2.2 Pricing Dynamic Part Numbers and Attributes

This feature brings us ability to improve pricing mechanism so that it can handle part numbers that are
dynamically created in run time. This means that prices for products or attributes that have dynamical part
numbers, and use price books can be calculated through run time.

Two new application parameters are introduced:

1. Prevent users from quoting part numbers that haven’t got a price in pricebooks
2. Prevent users from adding product selections containing attributes that don’t have a price in pricebooks

Depend on if these parameters are turned on or off, system will behave as described below:

• If the products part number is incomplete, or part number can’t be found in price book, and parameter 1
is turned on, although configuration is complete and user won’t be able to add that configuration to cart
(Figure 1), explanation will be given in responder, and price for product will be 0.

Figure 1
• If the products part number is incomplete, or part number can’t be found in price book, and parameter 1
is turned off, configuration is complete and user can add that configuration to cart (Figure 2), but price for
product won’t be found in price book and price for that product in cart will be 0.

Figure 2

SAP CPQ Setup and Administration Guide


502 PUBLIC Pricing/Calculations
• If the attribute part number is incomplete, or part number can’t be found in price book, and parameter 2 is
turned on, although configuration is complete user won’t be able to add that configuration to cart (Figure
3), explanation will be given in responder, price for attribute will be 0, but Total price will be calculated.

Figure 3
• If the attribute part number is incomplete, or part number can’t be found in price book, and parameter 2
is turned off, configuration is complete and user can add that configuration to cart (Figure 4), but price
for attribute won’t be found in price book and price for that attribute will be 0 in cart, Total price will be
calculated.

Figure 4
• If both parameters 1 and 2 are turned off and product part number and attribute part number can’t be
found, although configuration is complete user won’t be able to add that configuration to cart, explanation
will be given in responder (Figure 5).

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 503
Figure 5

On Admin side there will be two application parameters in Setup General Application Parameters
Configurator :

1. Prevent users from quoting part numbers that haven’t got a price in pricebooks
2. Prevent users from adding product selections containing attributes that don’t have a price in pricebooks

If you go to Product/Attribute Options tab in product edit, and edit some attribute, you will see that for the
attribute values that are using price books there is a new field ‘Price Code’ (Figure 6). Depend on that (price
code and part number) prices from price book will be calculated, first from child price book, and if price code +
part number can’t be found there, SAP CPQ will look in parent price book for same codes.

SAP CPQ Setup and Administration Guide


504 PUBLIC Pricing/Calculations
Figure 6

If you click on ‘View prices’ on some attribute value that uses dynamic price code following message will
appear (Figure 7).

Figure 7

If you are on Product Definition tab, and your product is using price book lookup and has dynamic part number,
if you click on ‘View Prices’ following message will appear (Figure 8).

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 505
Figure 8

7.2.3 Promotions

SAP CPQ feature “Promotions” allows SAP CPQ administrators and sales representatives to configure and
offer special pricing for the particular product or group of them. Administrators have the possibility to define
different promotions that could be customized based on user type, company or condition(s).

SAP CPQ promotions feature in Responsive Design offers more flexibility when it comes to defining, organizing,
configuring, etc. Based on which design you’ve selected for your SAP CPQ environment, make sure you
are reading the right part of this help page which describes “Promotions” in Classic and Responsive design
respectively.

Promotions in “Classic Design”

To set up Promotions, go to Setup Pricing/Calculations Promotions/Special Pricing . On the page you


will find a list of already defined promotions.

To add a new promotion, click on Add New button. This brings definition page for promotions which have two
tabs: Definition and Pricing Details. See the following figure.

SAP CPQ Setup and Administration Guide


506 PUBLIC Pricing/Calculations
As shown above, under tab Definition all fields are self-descriptive. You can define a period of time in which the
particular promotion will be active. Also, you can choose an option “Subsequent rank override” that will cause
all promotions with rank lower than rank of the current promotion to be suspended. Promotion can be available
to the particular user, user type or company (Step 1), and you can define the condition under the promotion will
be applied (Step 2).

As soon as you fill out the form, click on save and go to Pricing Details tab.

Under this tab, you should select product that you want to offer discount on, and conditional product(s) that
will provide condition rules for the promotion to be triggered.

You can select a discounted product by typing its Part Number, or by browsing through the list of products in
your system.

Under Calculation, two options can be set: Type and Loop.

Type:

• Calculation Type “All Items Same Price” should be applied for scenarios where discounting actions are
applied equally to all items (example – ‘If you buy more than 20 items of the product, you get 5% discount
on all those items’).

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 507
• Calculation Type “Each Break Own Price” should be applied for scenarios where depending on the quantity
break, items will have a different price (example - ‘If you buy more than 20 items, you get 5 free’. First 20
items will be calculated with the full price, and additional 5 with price 0.

Loop:

This option should be selected for discounting actions where users will get a discount on certain number of
items for every number of products they purchase (example – ‘For every 10 items that you buy, you get 2 for
free’)

Quantity Breaks: In this part, you define ranges (Quantity Breaks) in quantity to which the particular pricing will
be applied. Take a look at two examples

Example 1: If you select option "All Items Same Price" under “Calculaton type” and set up Quantity Breaks as
follows:

Modification Type Modification Value QTY From QTY To

Discount Percent 10 1 5

Discount Percent 20 6 10

Discount Percent 30 11 15

Then, when you add 4 items into the quote, they will be discounted by 10% each. Also, if you buy 13 itmes, they
will be discounted by 30% each.

Example 2:

If you select option "Each Brake Own Price" then if you buy 4 items, they will be discounted by 10% each, but if
you buy 13 items then first 5 items will be discounted by 10%, next 5 items will be discounted by 20%, and the
remaining 3 items will be discounted by 30%.

If you go to Configurator and add one product (BMW 3D is selected as condition product in our example), then
you get informed in the quote that your order qualify for special promotion. (See the following figure).

If you click on the banner, a pop-up with promotion details is displayed.

Promotions in “Responsive Design”

This portion of page delivers information on "Promotions" functionality while using "Responsive Design". If you
are using "Classic Design", please refer to the previous section.

To set up Promotions, go to Setup Pricing/Calculations Promotions/Special Pricing . On the page you


will find a list of already defined promotions.

SAP CPQ Setup and Administration Guide


508 PUBLIC Pricing/Calculations
To add a new promotion, click on Add New button. This brings definition page for promotions which have three
tabs: Definition, Pricing Details and Scripts. See the following figure.

Under "Definition" tab you can choose a promotion type. There are two types, actually ways, to define
promotion details:

• Pricing Details – this option means that you are going to define promotion details under the tab “Promotion
Details” and will not use ”Scripting” for that purpose
• Scripts – this option means that you are going to write an IronPython script to define promotion details

Many fields on this form are self-descriptive. You can define a period of time in which the particular promotion
will be active. Also, you can choose an option “Subsequent rank override” that will cause all promotions with
rank lower than rank of the current promotion to be suspended.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 509
"Catalog Description" field is used to input and store description of the promotion that will be displayed in
Product Catalog at the product level. This and "Quote Header Description" field can contain plain text and
HTML. (See the following figures).

SAP CPQ Setup and Administration Guide


510 PUBLIC Pricing/Calculations
Pricing Details or Script – not both!
When you use "Responsive Design", two ways for defining promotion details are available. You can choose one
way per promotion, not both. So, if you choose to set your promotion using "Pricing Details" tab, then "Script"
tab will be disabled and vice versa. We will describe both ways here.

Pricing Details

Under this tab, you can select product that you want to offer the discount on, and conditional product(s) that
will provide condition rules for promotion that is to be triggered. For example, if you want to create promotion in
the way that, if a user buys one product (conditional) then she can buy another product or number of products
at a lower price. You are allowed to define zero or more conditional products.

You can select a discounted product by typing its Part Number, or by browsing through the list of products in
your system.

Also, beside discounted product, the promotion can be set to be valid for the entire product type or product
category. You can set this in the appropriate setup form (See the following figure). Setup of product type
promotion and product category promotion is similar to the described setup for product promotion setup.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 511
 Note

Setting the application parameter Search exact product part number for promotions to TRUE speeds up the
search of promotion products on the quote in cases when their name is not defined in Setup Pricing/
Calculations Promotions/Special Pricing , but only their part number. The parameter is by default set
to FALSE and before changing its value to TRUE, revise the existing promotions and make sure that all
products have unique part numbers.

Set up Pricing Details

Under “Calculation”, two options can be set: Type and Loop.

Type:

• Calculation Type “All Items Same Price” should be applied for scenarios where discounting actions are
applied equally to all items (example – ‘If you buy more than 20 items of the product, you get 5% discount
on all those items’).

SAP CPQ Setup and Administration Guide


512 PUBLIC Pricing/Calculations
• Calculation Type “Each Break Own Price” should be applied for scenarios where depending on the quantity
break, items will have a different price (example - ‘If you buy more than 20 items, you get 5 free’. First 20
items will be calculated with the full price, and additional 5 with price 0.

Loop: This option should be selected for discounting actions where users will get a discount on certain number
of items for every number of products they purchase (example – ‘For every 10 items that you buy, you get 2 for
free’)

Total Allowed Uses field refers to the quantity of the product offered under promotional conditions. The number
of products available for the promotion will decrease each time the product is added to the quote. If products
are offered outside of a promotion, the total allowed uses will not be calculated.

Quantity Breaks – In this part, you define ranges (Quantity Breaks) in quantity to which the particular pricing
will be applied. Take a look at two examples.

Example 1: If you select option "All Items Same Price" under “Calculaton type” and set up Quantity Breaks as
follows:

Modification Type Modification Value QTY From QTY To

Discount Percent 10 1 5

Discount Percent 20 6 10

Discount Percent 30 11 15

Then, when you add 4 items into the quote, they will be discounted by 10% each. Also, if you buy 13 items, they
will be discounted by 30% each. Note that Promo Discount Percent displayed in the Quote is same for each
item.

Example 2:

If you select option "Each Brake Own Price" then if you buy 4 items, they will be discounted by 10% each, but
if you buy 13 items then first 5 items will be discounted by 10%, next 5 items will be discounted by 20%, and
the remaining 3 items will be discounted by 30%. Note that Promo Discount Percent displayed in the Quote is
calculated as overall discount, based on the promotion rules.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 513
And/Or Logic for conditional products

From time to time there might be a situation when you want to add one or more products as conditional
when setup promotion. SAP CPQ makes it possible and allows you to choose whether you are going to create
condition using "AND" or "OR" logic between conditional products, product types or categories. SAP CPQ
groups conditions based on the login operator you had chosen during promotion set up.

SAP CPQ Setup and Administration Guide


514 PUBLIC Pricing/Calculations
Scripted promotions

For promotions that have complex discounting rules, administrators now have the option to write IronPython
script. Scripts written during promotion setup will be executed on the "Add item to cart" event.

Scripting promotions can be applied in two ways depending on If selected product for triggering promotion is:

1. The same product on which promotion is applied to.


2. A product which, if added to the quote, causes promotion to be applied on some another product.

In the first case, Item of type "IQuoteItem" can be used in script. This is a current item whose properties can be
changed.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 515
In this example, promotion for "SMB Desktop Computer" product depends on number of existing items in the
quote. To apply promotion, list price needs to be calculated and promotion discount and amount will be applied
automatically.

In the second case, promotion discount and amount need to be calculated through script in order to be applied
on defined item.

SAP CPQ Setup and Administration Guide


516 PUBLIC Pricing/Calculations
7.3 Currencies
Currencies and Market Definitions allow addition of multiple currencies and their conversions into the system.

Currencies are used to convert the default currency to a foreign currency. SAP CPQ calculates foreign
currencies by multiplying the conversion rate given in table Currencies by default currency price. This amount
is then multiplied by Market Definition to get the final converted price. Market Definitions give the ability to vary
the amount of conversion for different areas. For instance, in the US, the Dollar is worth a standard amount,
but it may be worth a different amount if used somewhere else. To compensate for this, market definitions can
multiply the US Dollar, or any other currency, by a value greater or less than 1 to give the US Dollar a higher or
lower value.

One of the currencies has to be set as the default currency. The US Dollar (USD) is the default currency used
throughout the system and is the base currency. For the purpose of the manual, we’ll keep the US Dollar as the

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 517
default currency. When a different currency is calculated, the US Dollar (default currency) is multiplied by the
conversion rate entered in Currencies.

The Currency column displays the common abbreviation of the currency, the conversion rate displays how
many units of that currency is equivalent to 1 unit of the default currency (the default currency has a
conversion rate of 1), the description displays the longer description of the currency, the sign displays the
sign entered for that currency, and the default column displays whether the status is the default status or not
(only one of the currency has a YES in the default column).

Currencies can be added using the Add New button.

The fields in yellow are required. User will enter a short name of the currency in the currency column (because
this name would be used to refer to this currency throughout SAP CPQ), than will enter the conversion rate
of the currency relative to the base currency, brief description of the currency, a sign for the currency, and
choose whether the currency would be the default or not. If some other currency is currently set as the default
currency, a confirmation screen would pop up informing that another currency is currently set as the default
currency. Click OK to make the current currency the default or click Cancel to cancel changing the default
status to the current status.

 Note

Fields highlighted in yellow are required.

The other currencies are available to modify the currency factor. Because USD is the base and default
currency, its factor cannot be changed and is always constant at 1. Figure A shows the screen displaying the

current currency factors. The , and buttons are used to copy, delete or edit a currency respectively.
Currency symbol can be changed, but it is important to know that changing it you will affect all markets and
therefore all quotes that uses that currency. It is not possible to change currency symbol to one already used.

Note that a currency cannot be deleted while the currency is being used by a Market (See Markets [page 519]
for more information) or while the currency is the default currency. Attempting to delete a currency that is the
current default currency would result in an error message. Attempting to delete a currency that is being used
by a market would also result in an error message.

The left column displays the currency description, while the middle column displays the currency abbreviation.
The abbreviation is used on the Market Definition page to modify the value of the currency. To edit a currency
factory, delete the current factor, enter the new one, then click Save.

SAP CPQ Setup and Administration Guide


518 PUBLIC Pricing/Calculations
7.4 Markets

Once currency factors have been entered, Market Definitions need to be defined. Market Definition factors are
multiplied by the calculated currency to get the final price.

Market Definitions can be defined by clicking the Market link under the Pricing/Calculations menu.

Here Market Definitions can be Copied, Deleted, or Edited by clicking the respective symbol to the left of the
Market Code. To create a new Market Definition click Add New at the top. This brings up a blank definition
screen.

Every field is required and needs to be filled in order to save the definition. The Market Code is returned with
the tag <*MCODE*> which can then be used with an AUX or XWS tag to access additional information from
another source. Market Name is used to identify the Market Definition. When a user selects the Market in the
cart or on their user page, the Market Name is used for the selection. Currency Sign is the currency that, once
calculated, will be multiplied by the Market Factor to get the final price calculation.

Example:

The Currency factor for the European Monetary Union (EUR) is set to 0.95 and a Market Factor using EUR is set
to 1.2. If the total cart amount comes to $2000, then this amount will be multiplied by the EUR conversion rate
(0.95) then by the Market Factor (1.2) to get €1656. This is the final price calculation.

Once a Market has been defined, it is not visible until a user has been given permission to see the Market. This
is handled in Market Visibility [page 520].

 Note

When SAP CPQ is integrated with SAP Subscription Billing, you can select a timezone for a market. The
contract duration and the start and end dates of the subscription product are observed as midnight in the
timezone specified for the market assigned to that product.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 519
7.5 Market Visibility

Once a Market has been defined, it is not visible until a user has been given permission to see the Market.
This is handled in Market Visibility under Pricing/Calculations. Here visibility rules can be created to determine
which user(s) see which Markets.

The Market Visibility Administration page is shown in the following figure. Here visibility rules can be Deleted or
Edited by clicking the respective symbol to the left.

To add a new rule, click Add New at the top of the administration screen. Creating a new visibility rule brings up
the screen shown below.

Three criteria fields are displayed at the top of the screen: User, User Type, and Company. Defined Users
(Employee), User Types (Type), and Companies are listed in each field. Selection of the criteria fields

SAP CPQ Setup and Administration Guide


520 PUBLIC Pricing/Calculations
determines which user(s) can view the selected market(s). Each criteria selected must be true in order for
the markets selected to be visible. For instance, if user Hooly Cook and user type Inside Sales are selected
for a set of markets, then that rule will work for Hooly only if she is part of the Inside Sales user type i.e. the
selections in the User, User Type and Company list-boxes are connected with a logical AND operator, so the
market is visible only when all three selections are true. However, users are able to access quotes even when
the visibility of the quotes' selected market is restricted to them.

The Market Name field displays the Market Definitions that have been created. To select multiple markets
(under the Market Name list-box), click and drag to select multiples, hold down the Ctrl key and make multiple
selections, or click one hold down the Shift key and click another to make multiple selections. The Condition
field can contain any valid expression that can be evaluated as “1” (True) or “0” (False). If the result is “0”
(False) the rule will not apply. If the expression evaluates to “1” (True) then the rule will be applied.

Click Save at the bottom of the screen to create the rule.

 Note

SAP CPQ evaluates market visibility rules on user login, meaning that none of the quote-dependent tags
will work in the market visibility condition.

7.6 Discounts/Multipliers
Multiplier and discount administration allow discounting when a quote is created.

In addition to developing pricing rules for configured products, discount and multiplier rules can be created
also. These rules can be very specific, down to a particular user and a product, or very generic such as for a
particular user group, product category or a product type. Any combination of selections from 5 criteria groups
can be used to specify a discount or multiplier.

Multipliers and Discounts can be used individually or simultaneously. Minimum Value, Default Value, and
Maximum Value can be assigned for each. The Default Value is used when a user first generates a Quote.

Depending on the Shopping Cart style used (see Visual Styles in User Types [page 144]), the Default Discount,
or Multiplier Value, applied to the Cart Total can be modified. Users are allowed to enter values that are within
the Maximum and Minimum Value range. If a user enters a value outside of this range, then the Approval
Process (see the chapter on Approval Process) is initiated.

 Note

Default Value is only applied to the Cart the first time that a user generates it. If the Discount or Multiplier
is modified then that value is contained as the Discount or Multiplier value. Reopened quotes will have the
modified Discount or Multiplier value.

The Discounts and Multipliers administration can be accessed through the Discounts/Multipliers link under
Pricing/Calculations.

Discounting rules can be deleted or edited by clicking or respectively. Rules can also be searched by
entering criteria in the text boxes at the top and clicking the Search button on the left. To add a new rule, click
Add New at the top of the screen. This brings up the screen shown below, which is also displayed if a rule is
edited.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 521
When adding a new rule, default discounts and multipliers are added in order to avoid making a mistake for
those users who are not familiar with use of multipliers/discount.

When new rule is being created,

• default discounts is set to 0 for min, max and default


• default multipliers is set to 1 for min, max and default

Discounting rules can be specified from 5 criteria groups that are shown at the top of the page:

• User Group
• User
• Category
• Product
• Product Type

The priorities of these groups are determined by what is set in Discounting under the Discounting Priorities
menu (see Discount Priorities [page 524]). Fields displayed to the left have higher priority. For instance, in
the examples shown below, User Type has the highest priority. It should also be noted that the labels for each
criteria can be changed in Priority Administration. So label names may be different from what is discussed
here.

Multiple selections within each group are not allowed though. Multiple selections across different groups are
allowed. When selections are made across different groups, the discount or multiplier is applicable only when
all selections are true. Rules can to be created for each individual item in a criteria list if desired.

When check box ‘Use recurring price and cost’ has been activated under SAP CPQ Setup General
Application Parameters General , fields for ‘Discounts for Recurring Price’ and ‘Multiplier for Recurring
Price’ will be added. For more details see Recurring and Non-Recurring Prices [page 533] section.

Multipliers are values such as 0.5, 0.75, etc. that when applied to the list price will represent a percentage of the
price, such as 50 or 75.

Discounts, on the other hand, are values such as 50, 25, etc. that when applied to the list price will represent
that percentage taken off of the price.

The Condition field is used to enter expressions to determine when the rule will run. Any expression entered
must resolve to 1. Entering into the Condition field will make the rule active at all times.

The example above shows a rule that users Bane Purtic from the user group CUSTOMER, can sell Personal
Printer from the category Hardware using multipliers from 0.5 to 1 and/or discounts from 0 to 50, as long as
those products are of product type Product. Also, according to the condition statement, this rule will only run
when the user’s Zip Code is 53202.

SAP CPQ Setup and Administration Guide


522 PUBLIC Pricing/Calculations
 Note

More than one rule can be written for the same product using the same user. When this is the case, the
most restrictive rule will be used. This only works, though, when a rule is defined for the product, not for
product type.

Conditions can also be entered into the Multiplier or Discount fields to determine the value. In this way, multiple
rules do not need to be created for separate values.

This example shows that the user will have a Minimal Multiplier value of 0.25 and Default value of 0.5. The
Maximum value, though, is contingent on the user’s zip code. If their zip code is 53202, then the Maximum
value is 1. Otherwise, the Maximum value will be 0.75.

Conditional statements within the Multiplier or Discount fields can be used separately or in conjunction with
the Condition field.

 Note

For more information on Tags and IF statement expressions see Appendix A.

The User can override values? check box is used to determine whether or not a user can modify the Multiplier
or Discount with a value that is out of the Minimal and Maximum value range. When a user attempts to enter a
value that is out of that range, a warning is displayed alerting the user that the value is out of range.

If this box is unchecked, the user will be unable to enter the value. If checked, though, the user will be able
to enter the value, but the quote is automatically submitted for approval to the user’s approve parent. The
Approval Process is then initiated. See the chapter on Approval Process for more information on the Approval
Process.

 Note

The Approval Process must be set up in order for the User can override values check box to work correctly.

Discounts in Quote 2.0

In Quote 2.0, discounts are managed on the same page as in Quote 1.0. Since multipliers are obsoleted in Quote
2.0, this page contains only discount administration. In terms of administration and usage, discounts work in
the same way in both quote engines. However, the way the system reevaluates disounts has been optimized
in Quote 2.0. Administrators of Quote 2.0 tenants have the possibility to decide whether the discounting rules
are reevaluated every time their users open a quote and every time reconfigure and recalculate actions are
triggered in quotes. By deciding not to reevaluate discounting rules always but only when a specific condition is
met, administrators improve the overall performance of their systems.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 523
The field Formula Reevaluation Condition is available in Setup Pricing/Calculations Discounts . The
field is visible when Enable Formula Reevaluation Condition is first selected on the same page. If the formula
reevaluation condition is defined, formulas defined for discounts are reevaluated based on that formula and
not automatically every time the quote is updated. The system checks the results of the formula reevaluation
condition and compares them with the last obtained results. If the results match, the system doesn't reevaluate
the formulas. If the results are not the same, the formulas are reevaluated.

7.7 Discount Priorities


Setting the discount priorities allows administrators to set the order in which discounting rules are evaluated
and executed on the quote.

Example

For example, you want to allow all sales representatives to discount a product to a maximum of 10%. However,
a sales representative in Paris can discount the product to a maximum of 20%, because you just opened the
store there and you want to give a better initial offer to buyers. In this scenario, you would create a discount rule
for the specific product with a minimum discount of 0 and the maximum discount 10. Then, you would create
another rule for the specific user in Paris, and the product and the rule would allow 0 as the minimum discount
and 20 as the maximum discount. The first rule would have the rank 1 and the second rule for the specific
user would have the rank 0. This way, when any user changes the discount of the before mentioned product on
the quote, the system checks user details, and if it’s not the user from Paris, the system then checks whether
the new discount is in the limits of the rule defined for that specific product. However, if the user from Paris
changes the discount, then the system only applies the rule which is defined for that user.

The discounting rules are set up in the Discount/Multipliers page for Quote 1.0 and the Discounts page for
Quote 2.0. Both pages are in the Pricing/Calculations section.

The discount rules can be set for a specific user, user type, a specific product, product type, and product
category. If needed, per company needs, you can define a custom label for each field.

Rank

The rank of rules can be set from 0 to 5, 0 being the highest rank and 5 the lowest. If you create a rule for a user
with the rank 0, and a rule for a user type with the rank 5, the system will first evaluate the rule set up for the
user, since it has the lowest rank.

The rules are applied when users change both item discounts and product type discounts, but the system
evaluates them differently. When you apply a discount to an item, all rules are evaluated and applied according
to their rank. However, if you apply the discount to a product type, the rules based on the product category
and a specific product will not be evaluated. The reason behind this is that products in one category can have
different product types. In the same way, if you change the discount on a product type, the system won’t
evaluate the discount set for a specific product because that product type probably contains other products as
well.

SAP CPQ Setup and Administration Guide


524 PUBLIC Pricing/Calculations
7.8 Total Amount Limit
Total Amount Limit allows rules to be created which limit the total amount each User or User Type can Quote or
Place Order.

If Cart amount limit is exceeded then a workflow rule will reroute the Cart accordingly (see Approval Process
Administration [page 462]). This chapter will discuss creating rules which limit the Carts total amount limit
using simple and complex conditions.

Selecting the Total Amount Limit under Pricing/Calculations will bring up the Total Amount Limit screen.

Selecting Add New brings up the Total Amount Limit screen shown in the next picture. In this example, user Will
Peterson is limited to $1,000.

The Condition field can contain any valid expression that can be evaluated as “1” (True) or “0” (False). If the
result is “0” (False) the rule will not apply. If the expression evaluates to “1” (True) then the limit will be applied.

The same simple rule can be created, but applied to an entire group. At the next picture the Entire Inside Sales
group can only quote $5,000. If Will Peterson from the previous example was a part of the Inside Sales Group,
he would be able to quote up to maximum of $5,000 because of the Priority Rules used in this example.

 Note

Fields displayed on the left have a higher priority.

Complex Cart Limits

Using the 2 examples above we can also create complex rules that would evaluate to 0 or 1 in the condition
field. Instead of using a 1 for John Smith, let’s set his limit based on the location of the customer. At the

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 525
next picture, if the customer’s zip code is equal to 53202 then John Smith can quote up to $10,000. This is
accomplished with the expression: [EQ](<*CUSTOMERZIPCODE*>, 53202)

In the next example, the Channel Rep Group can only quote up to $5,000 if the Territory of the Customer
equals West. Uses the expression: [EQ](<*CUSTOMERTERRITORY*>, WEST)

When finished, click the Save button. This adds the new rule to list on the Total Amount Limit page. To Edit
or Delete a rule, click the respective symbol next to the group column. Total Amount Limit can be used in the
Approval Process Administration to delegate which user will receive any Submit for Approval requests from
selected users. For more information see Approval Process Administration [page 462].

SAP CPQ Setup and Administration Guide


526 PUBLIC Pricing/Calculations
 Note

The tag <*USERAMOUNT*> is used to retrieve the Total Amount Limit for a user

7.9 Margin Health

The Margin Health feature in both quote engines allows sales representatives to get a visual indication of
whether their profit margin is within the limits of what the administrator marked as a healthy profit margin.

A dedicated column in the quote shows the corresponding icon and the color depending on the margin health
indicators that the administrator set up.

 Note

The profit margin in SAP CPQ is calculated by subtracting the cost from the extended list price (discounted
list price) and calculating the percentage of that amount in comparison with the list price.

Create Margin Health Indicators in Quote 1.0 [page 527]


Margin health indicators in Quote 1.0 can be set up globally for all users and all items, or for a specific
user, user type, item, and product type.

Create Margin Health Indicators in Quote 2.0 [page 529]


Margin health indicators in Quote 2.0 can be set up globally for all users and all items, or for a specific
user, user type and item.

Margin Health Design and Visibility [page 530]


On this page, you can define the icon that displays on quotes as the margin health indicator, as well as
the color of the icon, on both quote engines.

7.9.1 Create Margin Health Indicators in Quote 1.0

Margin health indicators in Quote 1.0 can be set up globally for all users and all items, or for a specific user, user
type, item, and product type.

Prerequisites for Quote 1.0:

• in UI Design Quote Layout , move the Margin Health column from available to selected columns to
make it visible on quotes.
• in Quotes Quote Layout Permissions , set the visibility of the Margin Health column for a permission
group by moving the column from available to selected columns. Have in mind that you also need to set the
visibility of the column on the Margin Health Design and Visibility page.
• enable the Margin Health action (add it to the right status in Workflow/Approval Workflow and set
the permissions for it in Workflow Permissions). The Margin Health action allows users to set the margin
health on the quote after which the system recalculates the discount and eventually all other calculations
are triggered according to the setup in Cart Fields Administration.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 527
• go to Setup Pricing/Calculations Cart Fields Administration and add the following calculations on
Add/Update Item:
• All Item Fields - Direct ver. 1
• Product Type All Fields - Direct
• Total All

1. Go to Pricing/Calculations Margin Health Indicators .


2. Click Add New.
3. In Step 1, select the user type and the user.
The margin health indicators defined on this page apply to the selected users.
4. In Step 2, select one of the following:
1. Overall – margin health displays for all items on the quote, regardless of their type and category, and
for the product types and item totals.
2. Items and Product Type sub-totals – margin health displays for the selected product, product category,
and product type.

 Note

The Margin Health column is visible on the quote even when the product isn’t in the categories
selected here if the For items where list price is zero, display margin picture as and the For items
where cost is zero, display margin picture as are set to anything but None. Selecting None for these
two fields removes the column from the quote.

 Note

If you are creating multiple indicators and some of them are for a specific product type or
a category, and some of them apply to the entire quote, make sure the rules don't overlap.
Otherwise, it may happened that SAP CPQ applies an overall rule to a product, even though there is
already a rule defined for that product.

5. In Step 3, enter the margin health indicators, in percent, for the price and the recurring price.

 Note

Set Margin Health for Recurring Price is available only if the parameter Use Recurring Price And Cost is
set to TRUE in General Application Parameters General Parameters .

6. In Step 4, define a specific condition under which what was defined above is applicable.
The Margin Health column is now displayed on quotes.

Related Information

Margin Health Design and Visibility [page 530]

SAP CPQ Setup and Administration Guide


528 PUBLIC Pricing/Calculations
7.9.2 Create Margin Health Indicators in Quote 2.0

Margin health indicators in Quote 2.0 can be set up globally for all users and all items, or for a specific user,
user type and item.

Prerequisites for Quote 2.0:

• in Quotes Fields, Calculations, Layout Layout , add the Margin Health column to make it visible on
quotes.
• in Quotes Fields, Calculations, Layout Layout Permissions , set the visibility of the Margin Health
column for a permission group by selecting the permission group on the left and the MarginHealth column
on the right.
• in Quotes Fields, Calculations, Layout Fields and Calculations , set up the following calculations:
• add Item One-Time Gross Margin Percent calculation to all the quote fields that affect the One-Time
Manufactures Gross Margin calculation.
• add to One-Time Manufactures Gross Margin calculations for one-time discount percent and recurring
discount percent.

1. Go to Pricing/Calculations Margin Health Indicators .


2. Click Add New.
3. In Step 1, select the user type and the user.
The margin health indicators defined on this page apply to the selected users.
4. In Step 2, select one of the following:
1. Overall – margin health displays for all items on the quote, regardless of their type and category, and
for the product types and item totals.
2. Items and Product Type sub-totals – margin health displays for the selected product, product category,
and product type.

 Note

The Margin Health column is visible on the quote even when the product isn’t in the categories
selected here if the For items where list price is zero, display margin picture as and the For items
where cost is zero, display margin picture as are set to anything but None. Selecting None for these
two fields removes the column from the quote.

 Note

If you are creating multiple indicators and some of them are for a specific product type or
a category, and some of them apply to the entire quote, make sure the rules don't overlap.
Otherwise, it may happened that SAP CPQ applies an overall rule to a product, even though there is
already a rule defined for that product.

5. In Step 3, enter the margin health indicators, in percent, for the price and the recurring price.

 Note

Set Margin Health for Recurring Price is available only if the parameter Use Recurring Price And Cost is
set to TRUE in General Application Parameters General Parameters .

6. In Step 4, define a specific condition under which what was defined above is applicable.
The Margin Health column is now displayed on quotes.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 529
Related Information

Margin Health Design and Visibility [page 530]

7.9.3 Margin Health Design and Visibility

On this page, you can define the icon that displays on quotes as the margin health indicator, as well as the color
of the icon, on both quote engines.

The default colors and icons are applied if you don’t select other colors and upload other icons. If you’ve
already uploaded a new icon, you can use the default one again by clicking Restore Default. Have in mind when
uploading your own images that they should fit the size of the Margin Health column on the quote. There are no
restrictions on the supported format of uploaded images.

Furthermore, you can set up whether an icon displays in the Margin Health column, and which one, when the
list price and the cost are zero in the For items where list price is zero, display margin picture as and the For
items where cost is zero, display margin picture as dropdowns, respectively.

Additionally, in Quote 1.0, you need to select the user types for which the Margin Health column displays on
quotes.

 Note

Although you have set the visibility for margin health for a user type as a prerequisite in Quotes Quote
Layout Permissions , you still need to select it in the list in the Margin Health Design and Visibility page.
This is applicable only for Quote 2.0.

Related Information

Create Margin Health Indicators in Quote 1.0 [page 527]

7.10 Country/Region Sales Tax

Overview

This feature enables admin to define VAT (per country/region) percentage that will be applied when calculating
quote amount. Admin has the option to define tax calculation based on the country/region found in the Ship To
role, to define formula that will calculate VAT percentage or to make the tax field editable in the quote.

SAP CPQ Setup and Administration Guide


530 PUBLIC Pricing/Calculations
Set up Tax calculation based on Ship To country/region

To modify or add a tax percentage for a country/region, click the Country/Region Sales Tax link under the
Pricing/Calculations menu.

Tax percentages can be Deleted or Edited by clicking the corresponding buttons next to the Country/Region
Name. To add a new country/region tax click Add New at the top of the screen.

To create a new tax, on this screen, select the country/region and then enter the percentage that will be
associated with that country/region. Click Save to save the country/region sales tax.

Once created, country/region taxes are added to the quote total. The country percentage used on the quote is
determined by the country/region entered in the Ship to Address. Once a country/region is chosen for the Ship
to address on the Customer Info tab of the quote, the related percentage is added to the total amount.

Set up formula for country/region tax calculation

 Note

The result of the formula calculation will override the percentage calculated based on Ship To country/
region (table in the previous screen).If formula is left empty, tax will be calculated based on table values

By clicking on button 'Country/Region Tax Formula' you can define formula for country/region tax. On the user
side when calculating tax, value that is obtained based on this formula will override table values.

 Note

If user wants to obtain value from the Country/Region Tax table and use it in formula, it is possible to use
this tag- <*CTX( Global.Tax.Country(<*CTX( Quote.Customer(ShipTo).CountryAbbrev )*>) )*>.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 531
Set up editable tax field for users

If you want to make country/region tax field editable for your users, you need to set up cart fields 'Total - VAT
Amount' and/or 'Total - VAT Percent' to be editable in the quote. It can be done through Adding/Removing
Editable Fields [page 483] in Cart Fields Administration.

7.11 Edit Item Cost on Cart

When item is being edited in the quote and cost has been previously changed in the quote, based on the
value of parameter ‘When item’s cost is edited in the quote, upon changing item’s configuration, cost will be
recalculated’, SAP CPQ will recalculate cost based on configuration (if value is TRUE) or leave cost amount that
was entered by user in the quote (if value is FALSE).

Same logic will be applied during ‘Reconfigure’ action.

Please note that this will only be applicable when item cost can be edited in the quote.

When item’s cost is edited in the quote, upon changing item’s configuration, cost will be recalculated parameter
is placed in Setup General Application Parameters Shopping Cart and Quotes .

Default value for parameter is FALSE.

Some XSLT transformation for cart doesn't have COST as field instead they have EXTENDEDCOST.

Here are all the steps to edit cost in the cart in that situations:

1. Set the application parameter “Allow Edit Cost on the Cart” to TRUE in Setup General Application
Parameters Shopping Cart and Quotes .
2. Add “Child Item - Cost” and “Main Item - Cost” to an Editable Field Group in Setup Pricing/
Calculations Cart Fields Administration .
3. Change all occurrences of “ExtendedCost” to “Cost” in all user type XSLT files where the costs should be
editable. This can be done by:

a. Downloading the Shopping Cart Visual Style in Setup => Users => User
Types =>
b. Editing the applicable user type =>
c. Downloading the "Visual styles (Shopping cart / Quotes)" XSLT file =>
d. Replacing all occurrences of "ExtendedCost" with "Cost" =>
e. Saving the updated file with a ".xslt" extension =>

SAP CPQ Setup and Administration Guide


532 PUBLIC Pricing/Calculations
f. Uploading the new XSLT file to " Visual styles (Shopping cart / Quotes)"
=>
g. Selecting "Save" to save the changes to the user type.
h. Selecting "Exit Setup" to refresh the user type settings and viewing an
existing quote.

7.12 Preserve Original Currency Rates

Quote prices depend on market factor and currency rate, which can be updated through Setup. By default,
when users edit existing quotes and market factor and/or currency rate have been changed in the system, new
values will be applied to the quote.

If you want to preserve original market factor and currency rate on quotes, you should contact the Support
team to set this up for you. After enabling this option, when users edit existing quotes, original market factor
and currency rate will be applied to the quote.

Re-applying market factor and currency quote to old quotes

If system is using original market factor and currency rates, users can still apply new market factor and
currency rates by executing action “Refresh Market and Currency”.

“Refresh Market and Currency” action can be added to cart either as a standalone action - for users to execute
it explicitly, or as a pre or post-action to some other quote action - for system to execute it implicitly without
informing users . This can be set up in Workflow/Approval Workflow menu in administration.

7.13 Recurring and Non-Recurring Prices

This new feature gives the ability to support MRC and NRC in the same product and on the same line item in
the cart. There will be two sets of prices, multipliers, discounts, margin indicators, margin sliders for each item
and product type. This allows businesses that have monthly billings to be able to accurately display this pricing
in their configuration and in the cart.

A single item can be defined with two prices, a one time fee (non-recurring cost or NRC) and a recurring fee
(monthly recurring cost or MRC). For example this can be very useful when selling software product with initial
installation/setup monthly fee or if some company is selling subscriptions with initial installation cost and
monthly subscription fee.

The cart fields have also been updated to reflect this update, if administrator has chosen to turn it on. In
product configuration, recurring price are added to responder for every attribute where check box ‘Show
Recurring Price’ is selected. This price is displayed under current price. At the bottom of responder (under Total
Price), there is new label ‘Total Recurring Price’ with product recurring price displayed.

All relevant fields in the quote and in quote items (Net Recurring Price, Multiplier, Multiplier Amount, Recurring
Extended Amount, Discount Amount, Recurring List Price, Channel Markup Percent, Recurring cost etc.) are

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 533
duplicated. Additionally, all appropriate fields in quote total are duplicated (also for product types). Same logic
that is applied for non-recurring price and cost will be applied for recurring prices and cost. No new quote
calculations will be added (existing ones will be changed).

Only layout for ‘QuoteDefault.xslt’ will be changed to support recurring prices and cost. Parameter ‘Use
recurring price and cost’ will be used to determine whether recurring price and cost fields will be displayed.

In order to use this feature, user has to set up few parameters first.

1. In Setup General Application Parameters General , there will be a check box ‘Use recurring price
and cost’ (not selected by default). For more details, see Application Parameters [page 637] section.
When this is activated MRC/NRC fields in Discounts/Multipliers and Margin Health will be active.
2. In Setup Pricing/Calculations Discounts/Multipliers , fields for ‘Discounts for Recurring Price’ and
‘Multiplier for Recurring Price’ will be added. For more details see Discounts/Multipliers [page 521].
3. In Setup Pricing/Calculations Margin Health Indicators , in step 3, new fields for ‘Margin For
Recurring Price’ are added. For more details see Create Margin Health Indicators in Quote 1.0 [page 527].
4. On Tab 1 of the Product Administration, there is a field for ‘Base Recurring Price’ in ‘Pricing’ section.

5. On Tab 2 of the Product Administration, there are fields for attribute value ‘Recurring Price’ and ‘Recurring
Cost’ in table for attribute values. Also, there is a check box that is labeled ‘Show Recurring Price’.

SAP CPQ Setup and Administration Guide


534 PUBLIC Pricing/Calculations
7.14 Rounding Setup

In Setup Pricing/Calculations Rounding Setup , you can create and apply rounding rules to columns on
quotes. Rounding rules determine how many digits are used in price calculations, how many decimal places are
displayed to users and, in Quote 2.0, which currencies are affected by these calculations.

 Note

There is always the Default rounding rule which is used in all calculations whenever specific values are not
provided. This rounding rule can be edited.

Since the Rounding Setup on Quote 1.0 differs from the one in Quote 2.0, they are covered separately in the
following text.

Adding Rounding Rules in Quote 1.0

1. Go to Setup Pricing/Calculations Rounding Setup .


Two parameters and the list of existing rounding rules displays.
2. Click Add New.
The list of columns on quotes for which rounding rules can be set displays.
3. Select the column for which you wish the rounding rule to be applied.
Rounding preferences are displayed.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 535
4. Enter a number of decimals to be used in calculations.
This number determines how many decimals will be used in the calculations. The value is rounded per the
option selected in the Types of Decimal Rounding parameter.
5. Enter a number of decimals to be used when performing rounding.
This number determines how many decimals will display in the quote for this column. If the number of
decimals used for rounding is lower than the number of decimals used in calculations, the value is rounded
per the option selected in the Types of Decimal Rounding parameter.
6. Click Save.

Rounding Options for Quote 1.0

There are two available parameters in Setup Pricing/Calculations Rounding Setup that can be applied
to the rounding logic you wish to be used in your environment.

• Types of Decimal Rounding - determines the rounding method which will be applied to a certain rounding
rule. Its values are:
• Rounding Away from Zero - when a number is halfway between two other numbers, it is rounded
towards the nearest number that is away from zero.
• Rounding to Even - when a number is halfway between two other numbers, it is rounded towards the
nearest even number.

Original number “Away From Zero” method “To Even” method

3.5 4 4

2.8 3 3

2.5 3 2

2.1 2 2

-2.1 -2 -2

-2.5 -3 -2

-2.8 -3 -3

-3.5 -4 -4

• Fix Quote Amount After Currency Conversion - This parameter checks if there is a difference between the
total net price and the summed (and rounded) extended amount. For example, if the total net price is 100
and the price of each item is 33.33 (99.99 in total for three items), there will be a difference of 0.01 between
the total net price and the extended amount. If there is a difference, that amount is added to:
• the item with a maximum extended amount if the Fix Items value is selected.
• the total amount if the Fix Totals value is selected.

Adding Rounding Rules in Quote 2.0

In Quote 2.0, you currently can't define if the system should round values away from zero or to even because
the parameter Types of Decimal Rounding is not available in Quote 2.0

SAP CPQ Setup and Administration Guide


536 PUBLIC Pricing/Calculations
1. Go to Setup Pricing/Calculations Rounding Setup .
The list of existing rounding rules displays.
2. Click Add New.
The list of columns on quotes for which rounding rules can be set displays.
3. Select the column for which you wish the rounding rule to be applied.
Rounding preferences are displayed.
4. Enter a number of decimals to be used in calculations.
This number determines how many decimals will be used in the calculations.
5. Enter a number of decimals to be used when performing rounding.
This number determines how many decimals will display in the quote for this column.
6. Select checkboxes next to the currencies to which the rounding rules are applied.
The Select All checkbox can be used to instantly select all options.
7. Click Save.

 Note

Identical currencies cannot be selected twice for the same quote column.

Rounding for Extended Amount

When you are setting up a different number of decimal places for displaying or calculating Item or Total
columns on quotes, it is not enough to simply change the rounding setup for that column. Since different quote
columns’ mathematics are executed (on adding/updating items on the quote, changing that column value and
so on) you must know to what decimal place numerical values (quote columns that other columns depend on)
in the mathematical logic are rounded off.

• All Item Fields - Direct ver. 1


• Product type all fields - Direct
• Total All Calculation
• Extended Amount is calculated as follows:
ExtendedAmount = Qty * NetPrice So, NetPrice should also be included in the rounding setup
• Net Price is calculated as follows:
NetPrice = ListPrice * (1 - DiscountPercent) * Multiplier List Price, Discount Percent and Multiplier should
also be included.

Troubleshooting

Some issues may occur when the rounding is applied to quote columns.

• The Total NRC discount amount exists in SAP CPQ, although neither of the items has a discount value set.
This may appear as a result of a calculation error, which can be caused by an invalid setting in the Rounding
section. One example of this would be items, which have an extended amount with a decimal residue (for
example, 100.5). If the value of the rounding setting is not greater than zero, the value right of the decimal
separator may be truncated, leading to the rounding issue.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 537
7.15 Shipping

The Shipping section provides a means to add shipping and other associated costs to quotes or orders based
on the shipping method selected.

UPS shipping can be integrated into the SAP CPQ configurator. See UPS Shipping Integration for details.
Shipping Definition can be found under the Pricing/Calculations menu by selecting Shipping.

From this screen different shipping methods can be added, deleted, edited or copied. Shipping Methods can be
searched by entering the Method Name, Price Builder Data, Description, or whether the method is editable or
not into the boxes on the Shipping Methods Definition page, and then clicking Search. More Methods can be
seen by clicking the page numbers or the > symbol at the bottom of the page.

To add a new Shipping Method, click Add New. A blank Shipping Method Definition page will be displayed as
shown in the following figure. Existing Methods can be Copied, Deleted, or Edited by clicking the respective
symbol to the left of the Method Name. Selecting Edit would bring up the same page seen in the following
figure. Fields shaded in Yellow are required in order to save the Shipping Method.

Fill in the Name and any Description that would be helpful to the user. This description is what appears in the
shopping cart.

SAP CPQ Setup and Administration Guide


538 PUBLIC Pricing/Calculations
Static add-on price can be used for a number of different purposes. Examples might be a fixed handling charge
or fixed price for special shipping such as when exporting. A fixed number or a rule such as size or value of item
is entered here.

Selecting the Editable check box makes the shipping method an Editable Filed (see Cart Fields Administration
[page 480]).

When complete choose Save. This brings up the first figure again, with the new shipping method included.

On the user side, the Shipping method can be selected through the Freight dropdown.

7.16 State Sales Tax

This feature enables admin to define state tax percentage that will be applied when calculating quote amount.
Admin has the option to define tax calculation based on the state found in the Ship To role, to define formula
that will calculate state tax percentage or to make the tax field editable in the quote.

Set up Tax calculation based on Ship To state

Tax percentages can be entered for states in Canada and the US. To modify or add a tax percentage for a state,
click the State Tax link under the Pricing/Calculations menu.

Tax percentages can be Deleted or Edited by clicking the delete or edit buttons next to the State Name. To add
a new state tax click Add New at the top of the screen.

To create a new tax, on this screen, select the state and then enter the percentage that will be associated with
that state. All the states in the United States and Canada are available in the State Name dropdown box. Click
Save to save the state sales tax.

Once created, state taxes are added to the quote/cart total. The state percentage used on the quote is
determined by the state entered in the Ship to Address. Once a state is chosen for the Ship to address on the
Customer Info tab of the quote, the related percentage is added to the total amount.

State tax allows for a general tax to be associated with each state. If more specific tax is required within each
state, the use of an external web service (XWS) may be necessary. With this function, complete and updated
sales tax information within each state is available.

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 539
Set up formula for state tax calculation

 Note

The result of the formula calculation will override the percentage calculated based on Ship To state (table in
the previous screen). If formula is left empty, tax will be calculated based on table values

By clicking on button 'State Tax Formula' user can define formula for state tax. On the user side when
calculating tax, value that is obtained based on this formula will override table values.

 Note

If user wants to obtain value from the State Tax table and use it in your formula, he can use the tag-
<*CTX( Global.Tax.State(<*CTX( Quote.Customer(ShipTo).StateAbbrev )*>) )*>

Set up editable tax field for users

If you want to make state tax field editable for your users, you need to set up cart fields 'Total - Tax Amount'
and/or 'Total - Tax Percent' to be editable in the quote. It can be done through Adding/Removing Editable
Fields [page 483] in Cart Fields Administration.

7.17 Price Code in Pricing Calculations

Simple products can have price code defined. If price is derived from SAP CPQ standard pricebooks, it will be
calculated based on part number and price code.

Example

Same product is sold through different channels. For each channel there is a difference price. Administrator
creates several products with same part number and specifies price code for each channel. Prices are
maintained in pricebooks (part number + price code drive the price).

SAP CPQ Setup and Administration Guide


540 PUBLIC Pricing/Calculations
Product setup:

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 541
Pricebook setup:

Duplicate Pricebook Entries

There can't be multiple pricebook entries with the same part number and the same price code, unless they are
effective in different time periods [page 496]. This behavior is managed with two application parameters:

• Show effective dates for price book entries [page 496] – when set to TRUE, the columns Valid From and
Valid Until are displayed in the pricebook table entries. This parameter is by default set to FALSE which
means that administrators can’t enter multiple pricebook entries with the same part number and price
code. If set to TRUE, multiple pricebook entries with the same part number and the same price code can be
entered, in which case different effective dates for the entries should be defined.
Since duplicate values in a pricebook may cause issues with pricing, before changing this parameter to
TRUE, administrators should review their pricebooks and remove duplicate entries.
In case there are already duplicate values in the pricebook and the parameter is then set to FALSE, there is
now a message informing administrator to review and adjust their pricebook.
• Calculate price only based on part number and ignore price code – when set to FALSE, the prices are
calculated based on both the part number and the price code of a pricebook entry. However, if set to TRUE,
the system disregards the price code and calculates prices only based on the part number of the entry.

If both parameters are set to FALSE, the system doesn’t allow adding duplicate values in pricebooks (entries
with the same part number and the same price code), when they are added either manually or via import.

SAP CPQ Setup and Administration Guide


542 PUBLIC Pricing/Calculations
Related Information

Effective Dates for Price Book Entries [page 496]

SAP CPQ Setup and Administration Guide


Pricing/Calculations PUBLIC 543
8 Customer Administration

This section details ways in which Customers can be managed in SAP CPQ.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Local and Global Customers [page 545]


The types of customer entities available in SAP CPQ are local and global customers.

Customer Field Permissions [page 546]


The Customer Field Permissions administrative section gives you the option to define how the fields in
customer roles are displayed to the user.

Customer Actions [page 547]


The Customer Actions administrative section allows you to define which actions are available for each
customer role on the Customer Info Tab. Permissions for actions can be given based on user group and
order status.

Local Customer Visibility [page 548]


Rules can be written to allow other users to view local customers.

Global Customer Visibility [page 549]


Global Customers are customers added in the Global Customers administrative section. They’re
available only to those users who have permissions to view them. Rules need to be written to allow
users to view these customers.

Global Customers [page 550]


Global customers are customers managed by administrators. By default, they aren't visible to any
users, but this behavior can be altered with visibility rules.

Customer Custom Fields [page 551]


All SAP CPQ Customer address fields (Bill To, Ship To, End User) contain standard fields, which hold
customer information. First Name, Last Name, Address, and Company are some of these standard
customer fields.

Customer Role Defaults [page 553]


The Customer Role Default administrative section allows you to define whether or not customer role
fields are filled with user’s information or a user’s company information.

Export/Import Customers [page 554]


There are several ways in which customers can be exported and imported into the system in several
ways, which are detailed in this topic.

Postal Code Lookup [page 555]


Postal code lookup gives you the option to search for the address details of locations across the UK.

SAP CPQ Setup and Administration Guide


544 PUBLIC Customer Administration
8.1 Local and Global Customers

The types of customer entities available in SAP CPQ are local and global customers.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Local customers can be created either in Manage Customers or by directly adding a customer in the Customer
Info quote tab. By default, local customers are visible only to the user who created them. However, their
visibility can be expanded to the user’s entire company to via Setup Customers/Customer Roles Local
Customer Visibility . Local customers can also be automatically created when landing to SAP CPQ from an
external system, in which case they are visible to the user who landed to SAP CPQ, and are also affected by the
SAP CPQ local customer visibility rules.

Local customers are different from global customers, which are created and maintained by administrators in
the Setup, where their visibility is defined in Global Customer Visibility. Global customers can’t be related to any
individual user. Instead, they exist on the domain level.

When customers are created via API, local customers are created when the payload contains the OwnerId
node, in which case they are assigned to the user with that ID. If the payload doesn’t contain OwnerId, a global
customer is created, instead.

 Note

Editability of customer roles depends on whether you are the customer owner or not. Ship-to is the only
role that is always editable for all users. Other roles are editable only for the respective customer owners.

Related Information

Manage Customers
Global Customers [page 550]
Local Customer Visibility [page 548]
Global Customer Visibility [page 549]

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 545
8.2 Customer Field Permissions

The Customer Field Permissions administrative section gives you the option to define how the fields in
customer roles are displayed to the user.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Permissions can be defined based on an order’s status and the user group the current user is in. The following
permissions can be defined for each customer role field:

• Hidden - Used for the statuses or user groups that you wouldn’t like the field displayed for. The field isn't
displayed to the users.
• Read-Only - Used for statuses after the quote has been completed, such as Order Placed or Received
Order. The field isn't editable. Whatever value had been entered for the field, it’s displayed as uneditable
text.
• Editable - Used for the initial statuses in which the quote is being created, such as Open. The field is
displayed in whatever format it was defined in.
• Required - Used when administrators want to define this field when they create new customers. Fields
marked as required are editable and displayed with a red asterisk. If users have a customer role set as
Required in the Required Fields by Workflow Action administrative section, then users are required to define
any required fields when that action is performed.

To access the Customer Field Permissions administrative section, click the link under the Customers/Customer
Roles administrative menu. From this screen, you can define permissions for each customer role: Bill To, Ship
To, and End User. You can switch between each through the tabs at the top of the screen.

Customer role fields are displayed for each customer role. The same fields are used for all customer roles. Click
a permission name next to a field to define permissions for that field. This defines that permission for every
user group in every order status.

To set an option to a cell, click the cell to display a pop-up where the option can be selected. You can easily copy
permissions from another customer role’s field, by choosing that field from the dropdown box in the upper
right corner of the screen. There are six different types of cells in the matrix that can be defined:

• All Permissions - Sets the same option for all the cells in the matrix. Click the upper left corner of the matrix
to define.
• All Statuses for One User Group - You can set all the statuses for one user group by clicking the user group’s
name on the left side of the matrix.
• All User Groups for One Order Status - You can set all the user groups for one order status by clicking the
status on the top of the matrix.
• Individual Cell Intersection - You can set a cell intersection between a status and a user group. For instance,
the Sales Rep group should have the customer role field Read-Only when in the Order Placed status.
• Default (For New User Groups) - Set how the customer role field is displayed to the users added to new user
groups that haven’t been set in this matrix yet.
• Default (For New Order Status) - Set how the customer role field is displayed in new statuses that haven’t
been set in this matrix yet.

SAP CPQ Setup and Administration Guide


546 PUBLIC Customer Administration
The default cells make administration easier so that when user creates a new user group or a status, user
doesn't need to go through and define all the customer role field permissions again. The Default for New User
Groups and Default for New Order Status cells is automatically filled with what is set for that field on the
previous screen. Changing the permission in this cell changes the permission on the previous screen.

 Note

Selecting an option for a cell that includes all statuses, or all user groups can take some time to set
depending on the number of statuses and user groups created in the system. Large number of groups or
statuses means that there are many cells to set, so there can be a slight delay in setting them all.

When finished defining the advanced customer role field permissions, click Save at the bottom of the page. You
aren't redirected to another page in case you would like to further to define the field.

8.3 Customer Actions


The Customer Actions administrative section allows you to define which actions are available for each
customer role on the Customer Info Tab. Permissions for actions can be given based on user group and order
status.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Customer Action in administrative section is available by clicking the link under the Customers/Customer Role
administrative menu. This displays a matrix of user groups and order statuses for each customer role. You can
switch the customer role that is being defined by clicking the tabs at the top of the screen. You can easily copy
action settings from another customer roles by choosing that customer role from the dropdown in the upper
right-hand corner of the screen.

To set actions to a cell, click the cell to display a pop-up where one or more actions can be selected. There are
six different types of cells in the matrix that can be defined:

• All User Groups and Statuses - Sets the same option for all the cells in the matrix. Click the upper left
corner of the matrix to define.
• All Statuses for One User Group - You can set all the statuses for one user group by clicking the user group’s
name on the left side of the matrix.
• All User Groups for One Order Status - You can set all the user groups for one order status by clicking the
status on the top of the matrix.
• Individual Cell Intersection - You can set a cell intersection between a status and a user group. For instance,
the Sales Rep group can only Lookup customers from CRM when in the Order Placed status.
• Default (For New User Groups) - Set which customer actions are available to the users added to new user
groups that haven’t been set in this matrix yet.
• Default (For New Order Status) - Set which customer actions are available in new statuses that haven’t
been set in this matrix yet.

The default cells make administration easier so that, when you create a new user group or status, you don't
need to go through and define all the customer actions again.

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 547
 Note

Selecting an option for a cell that includes all statuses or all user groups can take some time to set,
depending on the number of statuses and user groups created in the system. Large number of groups or
statuses indicates that there are numerous cells to set, so there can be a slight delay in setting them all.
When finished defining the customer actions for the current customer role, click Save at the bottom of the
page.

8.4 Local Customer Visibility


Rules can be written to allow other users to view local customers.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Rules that allow local customer sharing are defined in the Local Customer Visibility administrative section.
This section can be accessed by clicking the link under the Customers/Customer Roles administrator menu. It
contains a list of all existing visibility rules, which can be edited or deleted.

The Local Customer Visibility administration screen shows the parameters from which a rule can be built: User
Type and User. The order in which each is displayed reflects its priority from left to right, with User Type having
priority over Users.

To create a new rule, click Add New. This action displays the screen for defining local customer visibility.

Local customer visibility rules have two areas of definition: the first area specifies which users the rule applies
to and the second specifies the condition under which the local customer becomes visible. It’s only possible to
create one rule per combination of User Type and User. For instance, user can only create one rule for the user
John Smith. However, users can create a rule for the user type Sales, even if John Smith has been added to that
user type. In this case, though, the visibility rule created for the Sales group would have priority over the rule
create for John Smith.

My company's customers - if you tick this checkbox, the users selected previously are able to see your
company’s customers.

When users perform a customer lookup either by typing customer info in a customer role field or through the
lookup action, the system runs the local customer visibility rules applied to the user who is currently logged in.
The condition field of these rules determines which local customers are available.

Conditions can be based on user info or customer info. If based on user info, then all the local customers of
the user that matches in the condition are available. If based on customer info, then only the customers that
match in the condition are available. For example, the rule can state to allow the user type Sales to see all of
the local customers within their user type. You could also create a rule to allow the user type Sales to see all
local customers that are in a certain state. If the condition based on the user or customer info is met, then the
customers are available to the current user.

Assuming the edit action is available to a user, any modifications they do to customers that are available to
them through local customer visibility aren't permanent. Changes only affect the customer’s info in the current
quote.

SAP CPQ Setup and Administration Guide


548 PUBLIC Customer Administration
Only quote can be used in the condition field for visibility rules. In Formula Builder, you can access tags and
create complex conditional statements. Any quote information can be pulled and be used in the calculation,
including user information, customer information, custom fields, discounts, quote amounts, and many others.
Entering 1 in the Condition field allows the selected users to see all user’s local customers.

8.5 Global Customer Visibility

Global Customers are customers added in the Global Customers administrative section. They’re available only
to those users who have permissions to view them. Rules need to be written to allow users to view these
customers.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Rules that allow users to see that global customers are defined in the Global Customer Visibility administrative
section. This section can be accessed by clicking the link under the Customers/Customer Roles administrator
menu. The page contains a list of all existing visibility rules, and they can be edited or deleted.

The Global Customer Visibility administration screen shows the parameters from which a rule can be built:
Group, User, and Company. The order in which each is displayed reflects its priority from left to right, with
Groups having priority over Users, and Users priority over Companies.

To create a new rule, click Add New. Clicking this button displays the definition screen for global customer
visibility.

Global customer visibility rules have the following areas of definition: the first area specifies which users the
rule applies to and the second specifies the condition under which the global customers become visible. It’s
only possible to create one rule per combination of User Group, User, and Company. For instance, users can
only create one rule for the user John Smith. They can, however, create a rule for the Sales user group, even
if John Smith has been added to that group. In this case, though, the visibility rule created for the Sales group
would have priority over the rule created for John Smith.

In addition, here you can define a formula used for SQL pre-filtering. The value from the field SQL Where is
used as a pre-filter applied on a DB level. The pre-filter is applied first, after which settings defined in the
previous steps are applied. As a result, the settings from the previous steps can only narrow down the list of
global customers which is returned after the pre-filtering. This step is optional, but it can result in improved
performance

When users perform a lookup for a customer either by typing customer info in a Customer Role field or through
the lookup action, the system runs the global customer visibility rules applied to the user who is currently
logged in. The condition field of these rules determines which global customers are available.

Unlike Local Customer Visibility rules, Global Customer Visibility rules can be based only on customer info.
This is because the customers are global and don’t belong to any particular user, which is the case with local
customers. Only the customers that match in the condition are available to the selected users. For example,
users can specify that the Sales user group can view any global customers in the same territory that they’re
assigned to. This is possible because global customers and users can be assigned to territories. If the condition
based on the customer info is met, then customers are available to the current user.

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 549
Once the customer is loaded it and the edit action is available, the current user can temporarily edit customer
info. This doesn't change the customer info on global scale only for that quote in witch has been edited.

Only quote tags can be used in the condition field for visibility rules. In the Formula Builder, users can access
tags and create complex conditional statements. Any quote information can be pulled and be used in the
calculation, including user information, customer information, custom fields, discounts, quote amounts, and
many others. Entering 1 in the Condition field allows the selected users to see all user’s local customers.

8.6 Global Customers

Global customers are customers managed by administrators. By default, they aren't visible to any users, but
this behavior can be altered with visibility rules.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Visibility rules can be created to make global customers available to users. For more information on global
customer visibility, see the chapter on Global Customer Visibility [page 549]. Global customers are managed
through the link under Customers/Customer Role administrator menu. The global customers administration
screen gives you the option to edit or delete existing global customers.

Adding a new global customer is possible by clicking the Add New button. Standard fields are available when
defining the customer. Fields such as Address, City, ZIP, and Country/Region are required because these fields
are most often used in visibility rules. If the Company entered has CRM account associated with it, then the
CRM Account Id and/or CRM Contact Id can be entered.

You can also fill out the Bill to Role custom fields and End User Role custom fields that appear in the Customer
Info tab in the quote. To define them and decide which fields are displayed on the Global Customers section in
the Setup and on the Customer Info tab in the quote go to the Customer Custom Fields [page 551] help page.
Global customers cannot be edited in the Customer Info tab via the Bill To Role and End User Role, only via the
Ship To Role.

To find the CRM ID for either field, click CRM Lookup. The resulting pop-up window displays the results of the
CRM Lookup. The popup window displays the results of the CRM Lookup. When CRM item is chosen from the
window, the Id field is automatically populated with the CRM Id. Leave the search field blank to display all the
CRM items, accounts or contacts.

 Note

The administrative user must be defined in the CRM Administrator Account in order for the CRM Lookup to
work correctly.

Ensure the Active field is checked to allow the customer to be available to those users with visibility rights. This
field can be helpful if a user wishes to deactivate a customer without deleting the data altogether.

SAP CPQ Setup and Administration Guide


550 PUBLIC Customer Administration
8.7 Customer Custom Fields

All SAP CPQ Customer address fields (Bill To, Ship To, End User) contain standard fields, which hold customer
information. First Name, Last Name, Address, and Company are some of these standard customer fields.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

If necessary, you can add one or more custom fields to Customer Roles. You can do that in Setup
Customers/Customer Roles Customer Custom Fields . This page shows custom fields defined for all
customer roles.

On the Customer Custom Fields list page, you can edit and delete existing fields, and add new ones by clicking
Add New.

To add a new custom field, you need to enter Name, Label, and select a customer Role Type to which this field
is added. It's also possible to define the field's rank, but it's not required. Also, you can specify if old and new
values of a customer custom field shouldn't be logged in the Audit Trail by enabling the Suppress Information
Logging toggle switch. Note that the field Name is used for uniquely identifying customer's custom fields -
therefore, users can't add two custom fields with the same name and role type. By selecting multiple Role
Types on this form and clicking Save, you can add multiple custom fields with exactly the same data - one
custom field is added for each customer role.

Customer custom fields are always of the free input type - they can't be changed to dropdown, checkbox, or
something else.

Note that you can't change the Role Type on already created fields. Otherwise, the form is no different from the
Add New custom field form.

Custom Field Names

As mentioned before, custom fields have a Name field, which is required, and is used along with Role Type
to uniquely identify customer's custom fields. When users copy customer data from one role to another,
custom fields are copied from one role to another along with standard fields. Custom field names are used for
identifying which field is to be copied from the source customer role to which field on destination customer
role. Fields that are contained in source customer role and are missing from destination customer role aren't
copied.

Custom Fields and Searching for Customers

As it’s already known, only Bill To customers are used as customer repository, which is being used when
searching for customers. While for standard customer fields this has little impact, it affects custom customer
fields. When searching for a customer to add them to the Ship To customer role, finding the customer and
adding it to Ship To role, the destination role only contains custom field contents that are defined in Ship To

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 551
role, and are also defined in Bill To role, with same custom field name. Users can't create or fill an End User
customer, and load it as Ship To customer and expect that it gets custom fields populated. It only works for Bill
To customer as source.

Custom Fields and Global Customers

In V8 SAP CPQ version, users can't enter custom fields on global customers.

Custom Fields and Managing Customers from User Page

Customers can be managed from User Page as usual. However, customer field permissions apply as if the user
is editing a Bill To customer role in the Default quote status. This applies for standard customer fields, their
permissions and for custom customer fields.

Custom Customer Fields and Their Permissions

Standard Customer Field and Custom Customer Field permissions are being defined on Customer Field
Permissions [page 546] page.

Naming Custom Fields

There’s a list of standard field names in the SAP CPQ that appear by default. It is important that you refer to
this list when naming custom fields because no custom field should get a name from this list. In other words,
there must be no duplicates. The best way to name the Customer Custom Fields is to add “custom” in front of
the custom field’s name.

Look at the list of standard fields provided in the following table:

CustomerId City BusinessPhone CRMAccountId

FirstName StateName BusinessFax CRMContactId

LastName StateAbbrev UserId ShopCartId

Email Province DirtyFlag ShipId

Title CountryName Active CustomerType

Company CountryAbbrev CustomerCode OwnerName

Address1 Country TerritoryId PrimaryIndustry

Address2 ZipCode TerritoryName CustomerPassword

SAP CPQ Setup and Administration Guide


552 PUBLIC Customer Administration
8.8 Customer Role Defaults

The Customer Role Default administrative section allows you to define whether or not customer role fields are
filled with user’s information or a user’s company information.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

Prepopulating customer role fields with data can be helpful in many instances. For example, channel
representatives often create users themselves in the Bill To customer role and the customer’s name in the
Ship To or End User customer role. Defining customer role default rules ensures that their information is
prepopulated in a customer role each time they create a new quote. These rules are defined based on the
user type and the customer role. This allows controlling which users can and can't have customer roles
prepopulated.

To access the Customer Role Defaults administrative section, click the link under the Customers/Customer
Roles administrator menu. The page contains a list of existing customer role default rules that can be copied,
edited, or deleted.

Click Add New to create a new customer role default rule. This displays the rule definition screen, which
contains the following fields:

• User Type Name - Defines the user type this rule applies to. Each time a user in this user type creates a
quote, the selected customer role becomes prepopulated with data.
• Customer Role - Select the customer role that becomes prepopulated with data for the selected user type.
• Default (Pre-populate) with User Info - Determines that the user’s data prepopulates the selected customer
role fields.
• Default (Pre-populate) with User’s Company Info - Determines that the user’s company info prepopulates
the selected customer role fields.

 Note

User's Company Info requires that the company associated with the user has the Create Customer Record
option selected. This creates a global customer and allows the information to be used for customer roles.
See Companies [page 133] for more details.

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 553
8.9 Export/Import Customers

There are several ways in which customers can be exported and imported into the system in several ways,
which are detailed in this topic.

Context

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

To export/import global customers in the Customers Export/Import page, follow one of these workflows:

• Download a sample template, fill out customer details, and import the file.
• Export all customers in SAP CPQ.
• Export all customers, change details, and add new customers, then import the file.

To download the import template, click Sample Template in the Customer Import page. The Excel file contains
customer standard fields, which you can fill out with new customers' details.

The same fields are mandatory when creating global customers in Customers/Customer Roles Global
Customers and when importing customers through Excel: Address (1), City, Country/Region, and Zip.

The best practice for importing new customers in the system is to do it through the sample template. To
update existing customer details, you need to export them from the system, change the data and then import
them. An empty row in the template breaks the import and only the data processed before the empty row is
imported.

 Note

It is recommended that you import no more than 10000 customers using a single Excel file. In addition, it is
recommended that you export no more than 60000 rows.

The following procedure describes how to export all customers in the system, change their details, add new
customer, and import the updates in SAP CPQ.

Procedure

1. In Step 1, click Export All Customers.

The spinning wheel next to the tab title indicates that the system is building the list of attributes.

When the process is completed, the button name changes to All Customers.
2. Click the button to download the file.

SAP CPQ Setup and Administration Guide


554 PUBLIC Customer Administration
3. Populate the file with new data.

The System Id column needs to remain empty for new customers. The first cell in the Index column needs
to always have the value 1 and the number needs to increment by one in the subsequent cells.
4. Select an identifier in Step 3.

The system treats the identifier when comparing customers in the system with customers in the Excel
template. For example, if a customer code in the template matches a code in the system, the respective
customer details are updated. Otherwise, a new customer is added:

• Customer Code
• CRM Account ID
• CRM Contact ID
• CRM Account ID and CRM Contact ID
• SAP CPQ Customer ID
• None
5. In Step 5, click Choose File to browse for your file.

Formats XLSX and XLS are supported.


6. Click Import.

The file name can contain only letters, digits, dashes, and underscores. In addition, every column name in
the file must be unique.
7. After the system processes data, the number of valid and invalid records in the file and the following
buttons are displayed:

• Import Without Preview - starts the import and a message displays once the import is successfully
completed.
• Import With Preview - a grid with all the customers in the file displays. You can see the status of each
record and select/unselect it for import. Click Save to import the valid customers.
• Import With Preview of Invalid Records Only - invalid records, if any, display in this grid. The Status
column shows the cause of the error. Selecting invalid records for import is disabled.
8. Click Save to import the valid customers.

You can follow these steps when importing customers through the Manage Customers page since the
customer import/export journeys on the user side and the administrator side of SAP CPQ are the same.

However, on the user side of SAP CPQ, you can export/import only local customers (the Owner column
displays the names of users who created the customers).

8.10 Postal Code Lookup

Postal code lookup gives you the option to search for the address details of locations across the UK.

 Note

Customers are available only in Quote 1.0. In Quote 2.0, organizational and transactional relationships are
recorded via involved parties [page 332].

SAP CPQ Setup and Administration Guide


Customer Administration PUBLIC 555
In order to use the Postal Code Lookup feature, you need to set up parameters in Setup. You also need the
license from Postcode Anywhere (https://www.postcodeanywhere.co.uk.).

In the Shopping Cart and Quotes tab in Setup General Application Parameters , you need to populate
these parameters in order to use the feature:

• Postcode lookup type


• International postcode anywhere WS URL
• Postcode anywhere account code
• Postcode anywhere license key

In Choose Postcode look-up provider, you should select Postcode Anywhere. Alternatively, leave None if you
don't want to use this feature. You need to have Postcode Anywhere license and to enter account code and
license key into the appropriate application parameters. This information is obtained from Postcode Anywhere,
the application that provides postal code look-up.

Save parameters and exit Setup.

SAP CPQ Setup and Administration Guide


556 PUBLIC Customer Administration
9 User Interface Design

This section contains useful information for managing user interface in SAP CPQ.

Responsive Templates [page 557]


Responsive templates are building blocks of all pages in SAP CPQ’s Responsive Design. Templates
define the look and feel of the application – colors, icons, the order in which buttons are displayed and
so on.

Responsive Template Customization in Setup [page 558]


In the Responsive Templates page, you can see the list of all customized templates which exist in
your environment, as well as the Freeze Templates functionality. You can also create new customized
templates.

Template Versions [page 561]


In the History tab of a custom template, you can see a chronological list of all versions of that template.

Freeze Templates [page 562]


This feature gives you an option to roll back the uncustomized (original) templates to the state they
were in the previous SAP CPQ release.

Branding [page 563]


A brand in SAP CPQ defines the look of the user interface (colors, images, and visual styles). Users can
see the same products and pricing, while having different user interface depending on the brand they
belong to. For example, different user interfaces can be displayed to anonymous website visitors, to
internal users, and to partners.

Catalog Layout [page 564]


These settings allow companies to adjust catalog design to their needs.

Responsive Design Customizations [page 565]


Here you can find all relevant information about customizations in Responsive Design including
different code examples.

Obsolete Features [page 631]


This section contains descriptions of obsolete features. Obsolete features are tied to the Classic
Design.

9.1 Responsive Templates

Responsive templates are building blocks of all pages in SAP CPQ’s Responsive Design. Templates define the
look and feel of the application – colors, icons, the order in which buttons are displayed and so on.

Each page in the application consists of at least one template. For example, the Catalog page consists
of the CatalogPage template, while the ApprovalHistory page consists of ApprovalHistoryPage and Editors/
DelegatedApprovers templates. Some templates are used on multiple pages in SAP CPQ. These templates are
stored in the Shared page.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 557
In Setup UI Design Responsive Templates , you can see which templates SAP CPQ pages consist of if
you click Add New and scroll through the contents of Page and Template dropdown lists respectively.

On user side, you can see which templates are used on pages by performing a right click and selecting Inspect
Element from the context menu. In the following screenshot, CatalogPage template can be seen in the Catalog
page.

Responsive templates can be left as is, although some administrators choose to customize their environments
[page 559] by changing responsive templates they contain. Core templates are always compatible with new
SAP CPQ features, so you don’t need to modify them each time a release occurs. Preserving the original state
of core templates minimizes the risk of breaking changes occurring, as well. If you customize templates, you
also need to manage them each time a release occurs, and their pages are changed. It’s highly recommended
that you customize responsive templates only when necessary, and apply minimal changes, which can easily
be tracked and modified.

9.2 Responsive Template Customization in Setup

In the Responsive Templates page, you can see the list of all customized templates which exist in your
environment, as well as the Freeze Templates functionality. You can also create new customized templates.

All customized templates are essentially copies of the existing templates which contain some adjustments, so
they aren’t changed during the development of new SAP CPQ releases like the core templates they are derived
from. If some of the templates that are changed during the development correspond to the templates you’ve
customized, you may need to apply the necessary changes to prevent breaking changes from occurring in your
environment.

You have a couple of options in dealing with potential breaking changes:

• Fix the issues independently by editing the customized templates and making them compatible with other
templates in the same pages before the next release is deployed.
• Seek assistance from SAP CPQ Support Team.

SAP CPQ Setup and Administration Guide


558 PUBLIC User Interface Design
9.2.1 Customize Templates

Templates can be customized in the Responsive Templates page ( Setup UI Design Responsive
Templates ) by copying the provided original template, editing it and making it Default in the environment.

Context

We recommend that you avoid template customizations in your environments. SAP CPQ UI design is regularly
updated, so each time you customize a template, the risk of breaking changes increases. If you do customize
templates, try to add small changes to them.

Procedure

1. Go to Setup UI Design Responsive Templates .

A page with listed customized templates and the Freeze Templates feature displays.
2. Click Add New.

The Template tab is opened. Here, you can select an original template and customize it.
3. From the Page dropdown, select the page which you wish to change.
4. From the Template dropdown, select the template you wish to customize.

The template content is displayed in the Default template box.


5. In the Name field, write the name of the customized template.

The list of invalid characters includes, but is not limited to: ASCII/Unicode characters 1 through 31,
quotation marks (“), less than (<), greater than (>), pipe (|), backspace (\b), null (\0) and tab (\t).

 Note

Even though slash (/) is an invalid character, the templates that contain it in their names, and were
created before the 1911 release, remain unchanged. You can properly manage and use them without
removing the character from their name.

6. (Optional) Write the template’s description.


7. Click Copy default template below the Default template box to copy the CSS file into the New Template box.

The template is copied into the designated box.


8. Apply the changes to the template in the New Template box.

 Note

Self-closing tags like <br /> aren't supported in responsive templates.

9. Enable the Is Default toggle if you wish to apply the custom template in SAP CPQ instead of the original
one.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 559
If you enable the Is Default toggle, the template version which was previously default will be deselected.
10. Click Save.

Next Steps

If you wish to reuse a customized template on several different pages, simply add the
@Html.PartialCustomTemplate(“Customized_Template_Name”) function to another template in which
you want it to be displayed.

9.2.2 Limiting Customized Templates to Specific User


Groups

You can limit the visibility of a customized responsive template to a specific user type.

Procedure

1. Go to Setup User User Types .

The page which contains all user types displays.


2. Click Edit next to the user type you wish to be able to see the applied customization.

The page in which you can edit the selected user type displays.
3. Click Add new custom template in the UI Design section.

A popup window displays.


4. Select the page, base template and the customized template you wish the user type to be able to see.
5. Click Add.
6. Click Save In the User Type page.

Results

Users who belong to the updated user type can now see the selected customized template in their
environment. Other user types will see the template which is marked as Default. You can add more than one
template here.

SAP CPQ Setup and Administration Guide


560 PUBLIC User Interface Design
9.3 Template Versions

In the History tab of a custom template, you can see a chronological list of all versions of that template.

Template versions are states of development a template has gone through since being introduced into SAP
CPQ. The list contains core templates which are added when a new release occurs (System templates) and
customized templates that have been created by administrators in your environment. One of the template
versions is marked as active, which means that it is currently applied to your environment’s UI.

When a new template version is added to SAP CPQ, it will be displayed above all other versions of that
template.

If a customized template version is set as default, and a new core template version is added to SAP CPQ, this
new version will be displayed at the top of the History list. However, it will not be applied unless you deselect the
Is Default checkbox next to the currently applied custom template version in the Template tab.

The History tab is also useful for comparing two versions of templates. You may want to do this if you wish to
see in what ways the new System template differs from the customized template that was previously applied in
the environment. You can also compare version of the custom template you’ve customized with the version of
the template that has been customized by another administrator in your environment.

To compare the templates, tick the checkboxes in the Version column, and click Compare. You can compare two
template versions.

The differences between the compared templates are highlighted as presented in the screenshot.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 561
9.4 Freeze Templates

This feature gives you an option to roll back the uncustomized (original) templates to the state they were in the
previous SAP CPQ release.

The SAP CPQ development team only manages the original templates that customized templates are derived
from. So, when a new release occurs, bear in mind that:

• If the core template which you have customized has been modified in this release, you should apply
the added changes to your customization, as well. If you don’t, some of the newly added SAP CPQ
functionalities may be unavailable to you.
• If the core template located in the same page as your customized template has been modified, check if
these templates are compatible. If they aren’t, breaking changes may ensue, and you need to fix them
independently or with the help of SAP CPQ Support team.

 Note

SAP CPQ What’s New contains the list of all modified templates, for each release, as well as fixes for the
known breaking changes.

If the breaking changes occur in a page when the release A is deployed, and you didn’t manage to apply
the necessary fixes to the customized templates before the release B is deployed, you can use the Freeze
Templates feature to roll back all uncustomized templates on the broken pages to the state they were in during
the release A. In this way, you will have more time to deal with incompatibilities between templates.

Rollback from SAP CPQ to version A can be applied only until the version C is released. Once that occurs, all
pages will be deployed to the version C, new breaking changes may occur, and the uncustomized templates can
only be rolled back to the version B.

Page rollback is only a temporary solution. If you roll back uncustomized templates, the pages will work as
they did in the previous release, but you may not see new functionalities or fixes that were applied to the
environment with the new release. For this reason, once you freeze templates, you need to apply necessary
changes to templates as soon as possible, or try to avoid using this feature altogether by fixing templates on
broken pages before the release is deployed.

This feature should ONLY be used in the following cases:

• if the breaking changes prevent you from working.


• if you can’t fix the issues caused by breaking changes on your own in the period between the sandbox and
the production release.

To access the feature, go to Setup UI Design Responsive Templates . Here, you can find all page names
listed next to checkboxes used for rolling the pages back to the previous version. To freeze the uncustomized
templates on a broken page, select the checkbox next to it.

Related Information

Responsive Templates [page 557]


Customize Templates [page 559]

SAP CPQ Setup and Administration Guide


562 PUBLIC User Interface Design
9.5 Branding

A brand in SAP CPQ defines the look of the user interface (colors, images, and visual styles). Users can see
the same products and pricing, while having different user interface depending on the brand they belong to.
For example, different user interfaces can be displayed to anonymous website visitors, to internal users, and to
partners.

 Example

If Company A is reselling Company B products, when a salesperson from Company A logs into company B's
SAP CPQ, they are going to have the same branding as company A. However, when the user from company
B logs into the same SAP CPQ, they are going to have the same branding as company B.

Branding Administration

Administrators can set up branding in UI Design Branding , on both quote engines. In this page, you can
search through existing brands, you can delete, or edit them, and you can create new brands.

Accordingly, you are able to choose the brand when administering different features in SAP CPQ (for example,
users, permission groups and document generation templates).

Create a Brand

1. Go to UI Design Branding.
2. Click Add New.
3. Populate the fields:

Field Name Description

Branding Name Descriptive name of the brand.

Default Brand Default brand is applied for all newly created users.

Branding System Id Generated automatically from the brand name.

Start page URL to the page that will first open when users with
the specific brand log in (for example, /quotation/Load­
Quote.aspx).

Images section Relevant only for the classic design. Visible only if the Hide
Obsolete Features parameter is set to FALSE.

Top Right Image(Logo) Logo image to be displayed in the top right corner of
the screen. Recommended image size is 180px x 60px.
Images must be in a .gif format. Additionally, the images
need to be same height. Extensions are case-sensitive.
Make sure the extension .gif is in lower case. Otherwise, an
error can be displayed stating that the extension is wrong.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 563
Field Name Description

Top Left Image(Logo) Logo image to be displayed in the top left corner of the
screen. Recommended image size is 180px x 60px. Im­
ages must be in a .gif format. Additionally, the images
need to be same height. Extensions are case-sensitive.
Make sure the extension .gif is in lower case. Otherwise, an
error can be displayed stating that the extension is wrong.

Header Image Image to be displayed in the screen header.

Styles section Relevant for both classic and responsive designs.

CSS file Should contain the .css file for the classic design pages.

Responsive CSS file Should contain the .css file for the responsive design pa­
ges.

4. Save the changes.

Changing the SAP CPQ Style

If you wish to change the default look of SAP CPQ, you can do it through the available CSS files, or create new
files. You can first download the CSS file and responsive CSS file from the default branding and then update
them accordingly and reupload them as part of the new branding. If you are creating new files, make sure that
their extension is .css.

Change Logo in Responsive Design

1. Upload the logo image in General File Management Additional Files.


2. Create a custom .css file and include your image using this code:

.cpq_logo {
background: url("/mt/DOMAIN_NAME/additionalfiles/FILE_NAME") no-
repeat left;
}Default brand is applied for all newly created
users. Additionally, if you
don’t select an image or
a style for a non-default
brand, those used in the
default brand will be used.
3. Upload the .css file in the Responsive CSS file field in branding.
Users pertaining to that brand will see the new logo after they log in.

9.6 Catalog Layout

These settings allow companies to adjust catalog design to their needs.

To access these parameters, go to Setup UI Design Catalog Layout . Application Parameters are
separated into following sections: Tabular View UI, Category Tree UI, List View UI, and Other.

SAP CPQ Setup and Administration Guide


564 PUBLIC User Interface Design
Tabular View UI

• Show Products In – Determines how many columns the products are displayed in on the Products page.
• Show Categories In – Determines how many columns the categories are displayed in on the Categories
page.
• Display Products Above Subcategories – If set to True the products within the selected category are
displayed above the subcategories.
• Load Sub Products In Category – If set to True products from subcategories are displayed too.
• Include Part Number – If set to True part numbers are displayed in the tabular view mode.

Category Tree UI

Category tree width - Determines the width of the category tree.

List View UI

• Include Product Image – If checked, the product image is displayed in the list view mode.
• Include Product Description – If checked, product description is displayed in the list view mode.

Other

Visual Style (Catalog) - determines the default Responder styles that every user sees. User can override these
selections by choosing a new style in the User Groups administrative section.

9.7 Responsive Design Customizations

Here you can find all relevant information about customizations in Responsive Design including different code
examples.

Bear in mind that although these customizations bring lot of power they also raise implementation complexity.

In order to keep things simple avoid customizations when possible or use custom CSS in branding for custom
looks.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 565
9.7.1 Prerequisites

Required knowledge

In order to do responsive customization you should have at least basic knowledge of HTML, CSS,
JavaScript and Knockout. For knockout learning we recommend the official knockout tutorial (http://
learn.knockoutjs.com/).

Tools

We recommend you to install Google Chrome extension for the Knockoutjs context debugger from
the following link: https://chrome.google.com/webstore/detail/knockoutjs-context-debugg/
oddcpmchholgcjgjdnfjmildmlielhof?hl=en.

Getting Started

First of all, you have to know the structure of your observable array. For examples we will use quote custom
fields. Install Google Chrome extension Knockoutjs context debugger. On appropriate page (in this example
Cart Page) open Developer Tools in Chrome (right click and then click on Inspect element or Ctrl + Shift +
I or F12 ).

In Developer Tools go to first tab Elements and on right side click on Knockout context. Below you will see all
available data. Among other things there are custom fields.

SAP CPQ Setup and Administration Guide


566 PUBLIC User Interface Design
When you expand custom fields observable array, and expand one member of array you will see all available
fields such as content, editable, id, isRequired, etc for specified array member. Also there are “values” field
representing array of values and it can be expanded, too.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 567
So, from this example you can see that there is an array of custom fields and that each custom field has some
info such as content, editable, id, isRequired, etc and has array of values.

9.7.2 Knockout Extension Functions

Knockout extension functions are used for observable arrays.

filterByProperty function [page 568]


Function filterByProperty returns a filtered observable array with members that have value of
property matched with passed appropriate values.

sortByProperty Function [page 570]


Function sortByProperty returns an observable array that contains all members of the original array
sorted by property which name is passed.

count/countWithProperty Function [page 570]


Function count returns the number of array elements that matches predicate function condition.

all/allWithProperty [page 574]


Function all returns the boolean value whether all elements of the passed observable array matches
predicate function condition.

any/anyWithProperty [page 576]


Function any returns the boolean value whether at least one element of the passed observable array
matches predicate function condition.

indexOf [page 577]


Function indexOf returns index of the first element of passed array that matches predicate function
condition.

lastIndexOf/lastIndexOfWithProperty [page 578]


Function lastIndexOf returns index of the last element of passed array that matches predicate
function condition.

first/firstWithProperty [page 580]


Function returns the first element of passed array that matches predicate function condition.

last/lastWithProperty [page 581]


Function returns the last element of passed array that matches predicate function condition.

Chaining - Combining Multiple Function Calls [page 582]


Functions sortByProperty and filterByProperty return new observable array and they can be
combined with other functions.

9.7.2.1 filterByProperty function

Function filterByProperty returns a filtered observable array with members that have value of property
matched with passed appropriate values.

First argument is the name of property and other arguments are appropriate values and there is no limit of
number of passed values.

SAP CPQ Setup and Administration Guide


568 PUBLIC User Interface Design
Context:

array.filterByProperty ('propertyName', value1, value2, …, valueN)

This function will return all members of array that have value of property “propertyName” equal to value1,
or value2, …, or valueN.

Example1 (single property value)

We want to create new section for custom fields where want to show all custom fields that are editable. Custom
filed has property with name “editable” that can be true or false. We don’t want to show all custom fields, but
only those that are editable (that has value of property “editable” equal to true).

1. Create new template.


2. Change this part of the template:

<div data-bind="foreach: customFields" class="custom-fields">


<!-- ko template: template -->
<!--/ko -->
</div>

With this:

<div data-bind="foreach: customFields.filterByProperty('editable', true)"


class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>

Example2 (multiple property values):

We want to create new section for custom fields where we want to show only custom fields that are type of
“Date” or “Select” or “LongText”. Custom field has property type that has numeric value (0 for Label, 1 for Text,
2 for Select, 3 for Date, 4 for LongText). We want to show only custom fields that have value of property “type”
2 or 3 or 4.

1. Create new template.


2. Change this part of the template:

<div data-bind="foreach: customFields" class="custom-fields">


<!-- ko template: template -->
<!--/ko -->
</div>

With this:

<div data-bind="foreach: customFields.filterByProperty('type', 2, 3 , 4)"


class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 569
9.7.2.2 sortByProperty Function

Function sortByProperty returns an observable array that contains all members of the original array sorted
by property which name is passed.

Also, it leaves the original array unchanged. The only argument is the name of property which is criteria for
sorting array.

Syntax:

array.sortByProperty ('propertyName')

This function will return all members of array sorted by property which name is passed to the function.

Example:

We want to create custom section for custom fields where we want to sort them by their label.

1. Create new template.


2. Change this part of the template:

<div data-bind="foreach: customFields" class="custom-fields">


<!-- ko template: template -->
<!--/ko -->
</div>

With this:

<div data-bind="foreach: customFields.sortByProperty('label')" class="custom-


fields">
<!-- ko template: template -->
<!--/ko -->
</div>

9.7.2.3 count/countWithProperty Function

Function count returns the number of array elements that matches predicate function condition.

Syntax:

array.count(predicateFunction)

Similar to the previous function, countWithProperty returns the number of array elements that have value
of property matched with passed appropriate values. First argument is the name of property and other
arguments are appropriate values and there is no limit of number of passed values.

Syntax:

array.countWithProperty ('propertyName', value1, value2, …, valueN)

SAP CPQ Setup and Administration Guide


570 PUBLIC User Interface Design
This function will return number of members of array that have value of property “propertyName” equal to
value1, or value2, …, or valueN.

Example1 (simple condition - count):

We want to display section custom fields only if there is more than 3 required fields.

We will change visibility condition.

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.count(function(item) {return


item.isRequired === true;}) > 3">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

In this example predicate function is:

function(item) {return item.isRequired === true;}

We should check value of property isRequired for each item of array. So, as argument of function we
passed item and then we access to value of its property with item.isRequired, in order to check if
that value is true. We are also able to use logical operators (AND, OR, NOT, and so on) to make complex
conditions.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 571
Example2 (complex condition - count):

We want to show section for custom fields only if there is exactly one non required field with type of “Date”
(value of properties “type” and “isRequired” should be 3 and false, respectively).

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.count(function(item) {return


item.isRequired === false s&& item.type === 3;}) === 1">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

In this example predicate function is:

function(item) {return item.isRequired === false && item.type === 3;}

We should check value of properties “isRequired” and “type” for each item of array. So, as argument
of function we passed item and then we access to value of properties “isRequired” and “type” with
item.isRequired and item.isRequired. We use logical operator && for linking conditions.

 Note

Everything above about predicate functions is valid for all predicate functions in other customization
functions, such as any, all, indexOf, lastIndexOf, first, last, and so on.

Example3 (simple condition - countWithProperty):

We want to display section custom fields only if there is more than 3 required fields.

SAP CPQ Setup and Administration Guide


572 PUBLIC User Interface Design
We will change visibility condition.

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.countWithProperty('isRequired', true) >


3">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

We should check value of property isRequired. So, first argument is the name of property and second
parameter is appropriate value of property “isRequired” and that is true.

Example4 (complex condition - countWithProperty):

We want to show section for custom fields only if there are more than two custom fields with type of “Date” or
“Select” or “LongText”. (appropriate values of property “type” are 2, 3 and 4).

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 573
</div>

With this:

<div data-bind=" visible: customFields.countWithProperty('type', 2, 3, 4) >


2">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

We should check value of property type. So, first argument is the name of property and other parameters are
appropriate values of property “type” and that are 2, 3 and 4.

9.7.2.4 all/allWithProperty

Function all returns the boolean value whether all elements of the passed observable array matches predicate
function condition.

Syntax:

array.all(predicateFunction)

Similar to the previous function, allWithProperty returns the boolean value whether all elements of the
passed observable array have value of property matched with passed appropriate values. First argument is the
name of property and other arguments are appropriate values and there is no limit of number of passed values.

This function will return true if all members of array have value of property “propertyName” equal to value1,
or value2, …, or valueN.

Syntax:

array.allWithProperty ('propertyName', value1, value2, …, valueN)

Example1:

We want to display section for custom fields only if all custom fields have id greater than zero and don’t trigger
save.

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">

SAP CPQ Setup and Administration Guide


574 PUBLIC User Interface Design
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.all(function(item) {return item.id > 0


&& item.triggersSave=== false;})">
<div class="col-md-12">
<h3 class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

Example2:

We want to display section for custom fields only if there are only custom fields with id 5, 17, 35 and 212.

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind=" visible: customFields.allWithProperty('id', 5, 17, 35, 212)">


<div class="col-md-12">
<h3 class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 575
<br />
</div>

We should check value of property id. So, first argument is the name of property and other parameters are
appropriate values of property “id” and that are 5, 17, 35 and 212.

9.7.2.5 any/anyWithProperty

Function any returns the boolean value whether at least one element of the passed observable array matches
predicate function condition.

Syntax:

array.any(predicateFunction)

Similar to the previous function, anyWithProperty returns the boolean value whether at least one element of
the passed observable array has value of property matched with passed appropriate values. First argument is
the name of property and other arguments are appropriate values and there is no limit of number of passed
values.

array.anyWithProperty ('propertyName', value1, value2, …, valueN)

This function will return true if any member of array has value of property “propertyName” equal to value1, or
value2, …, or valueN.

Example:

We want to display section for custom fields only if there is at least one required custom field.

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.any(function(item) {return item.isRequired


=== true;}) ">
<div class="col-md-12">
<h3 class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>

SAP CPQ Setup and Administration Guide


576 PUBLIC User Interface Design
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

9.7.2.6 indexOf

Function indexOf returns index of the first element of passed array that matches predicate function condition.

If predicate function is not passed, native 'indexOf' function will be called. Native 'indexOf' is function
from knockout. It receives member of array as parameter and returns index of that member in array starting
from 0. Our modified function receives predicate function and returns index of array member that matches
predicate function condition.

Syntax:

array.indexOf(predicateFunction)

Example:

We want to display section for custom fields only if none of the first five custom fields is read-only.

We should check index of first appearing of read-only custom field. It should be greater than 4 (because
indexes start from 0).

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.indexOf(function (item) {return


item.editable === false;}) > 4 ">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 577
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

9.7.2.7 lastIndexOf/lastIndexOfWithProperty

Function lastIndexOf returns index of the last element of passed array that matches predicate function
condition.

Syntax:

array.lastIndexOf(predicateFunction)

Similar to the previous function, lastIndexOfWithProperty returns index of the last element of passed
array that has value of property matched with passed appropriate values. First argument is the name of
property and other arguments are appropriate values and there is no limit of number of passed values.

Syntax:

array.lastIndexOfWithProperty('propertyName', value1, value2, …, valueN)

This function will return index of the last element of passed array that has value of property “propertyName”
equal to value1, or value2, …, or valueN.

Example1:

We want to display section for custom fields only if none of last three custom fields has different name and
label. (all of last three custom fields have same name and label) We should check if index of last appearing of
custom field, with different label and name, is less than array length minus three (because indexes start from
0).

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

SAP CPQ Setup and Administration Guide


578 PUBLIC User Interface Design
3. With this:

<div data-bind="visible: customFields.lastIndexOf(function (item) {return


item.label !==item.name;}) < customFields().length - 3 ">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

Example2:

We want to display section for custom fields only if none of the last three custom fields is required.

We should check if index of last appearing of custom field, with value of isRequired equal to true, is less than
array length minus three (because indexes start from 0).

1. Create new template.


2. Change this part of the template:

<div data-bind="visible: customFields().length > 0">


<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

With this:

<div data-bind="visible: customFields.lastIndexOfWithProperty('isRequired',


true) < customFields().length - 3 ">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko template: template -->
<!--/ko -->
</div>
</div>
<br />
</div>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 579
9.7.2.8 first/firstWithProperty
Function returns the first element of passed array that matches predicate function condition.

The arguments are predicate function, which is mandatory, and default value, which is optional parameter. If
there is no array member that matches predicate function condition, default value will be returned. If default
value is not defined null will be returned.

Syntax:

array.first(predicateFunction, [defaultValue])

Similar to the previous function, firstWithProperty returns the first element of passed array that has
value of property matched with passed appropriate values. First argument is the name of property and other
arguments are appropriate values and there is no limit of number of passed values.

Syntax:

array.firstWithProperty ('propertyName', value1, value2, …, valueN)

This function will return first element of passed array that has value of property “propertyName” equal to
value1, or value2, …, or valueN.

Example1:

We want to show label of the first required custom field (without default value).

1. Create new template.


2. Add this part to existing template:

<h3>First required field</h3>


<!-- ko if: customFields.first(function(item){ return item.isRequired ===
true;}) !== null -->
<span data-bind ="text: customFields.first(function(item){ return
item.isRequired === true;}).label"></span>
<!-- /ko -->

Example2:

We want to show label of the first required custom field, if there is no required fields show No required fields.
(with default value)

We will create dummy default value with label No required fields.

1. Create new template.


2. Add this part to existing template:

<h3>First required field</h3>


<span data-bind ="text: customFields.first(function(item){ return
item.isRequired === 'not existing';}, {label: 'No required fields'}).label"></
span>

SAP CPQ Setup and Administration Guide


580 PUBLIC User Interface Design
Example3:

We want to show label of the first custom field with id 23 or 5 or 19 or 91.

1. Create new template.


2. Add this part to existing template:

<h3>First field from the set with id 23 or 5 or 19 or 91 </h3>


<!-- ko if: customFields.firstWithProperty('id', 23, 5, 19, 91) !== null-->
<span data-bind ="text: customFields.firstWithProperty('id', 23, 5, 19,
91).label"></span>
<!-- /ko -->

9.7.2.9 last/lastWithProperty

Function returns the last element of passed array that matches predicate function condition.

The arguments are predicate function, which is mandatory, and default value, which is optional parameter. If
there is no array member that matches predicate function condition, default value will be returned. if default
value is not defined null will be returned.

Syntax:

array.last (predicateFunction, [defaultValue])

Similar to the previous function, lastWithProperty returns the last element of passed array that has value
of property matched with passed appropriate values. First argument is the name of property and other
arguments are appropriate values and there is no limit of number of passed values.

Syntax:

array.lastWithProperty ('propertyName', value1, value2, …, valueN)

This function will return last element of passed array that has value of property “propertyName” equal to
value1, or value2, …, or valueN.

Example1:

We want to show label of the last required custom field (without default value).

1. Create new template.


2. Add this part to existing template:

<h3>Last required field</h3>


<!-- ko if: customFields.last(function(item){ return item.isRequired ===
true;}) !== null -->
<span data-bind ="text: customFields.last(function(item){ return
item.isRequired === true;}).label"></span>
<!-- /ko -->

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 581
Example2:

We want to show label of the last required custom field, if there is no required fields show No required fields.
(with default value)

We will create dummy default value with label No required fields.

1. Create new template.


2. Add this part to existing template:

<h3>Last required field</h3>


<span data-bind ="text: customFields.last(function(item){ return
item.isRequired === 'not existing';}, {label: 'No required fields'}).label"></
span>

Example3:

We want to show label of the last custom field with id 23 or 5 or 19 or 91.

1. Create new template.


2. Add this part to existing template:

<h3>Last field from the set with id 23 or 5 or 19 or 91 </h3>


<!-- ko if: customFields.lastWithProperty('id', 23, 5, 19, 91) !== null -->
<span data-bind ="text: customFields.lastWithProperty('id', 23, 5, 19,
91).label"></span>
<!-- /ko -->

9.7.2.10 Chaining - Combining Multiple Function Calls

Functions sortByProperty and filterByProperty return new observable array and they can be combined
with other functions.

Example1:

We can sort the array by value of label and then get the name of the first required member of sorted array.

<!-- ko if: customFields.sortByProperty('label').first(function(item)


{ return item.isRequired === true;}) !== null -->
<span data-bind ="text:
customFields.sortByProperty('label').first(function(item){ return
item.isRequired === true;}).name"></span>
<!-- /ko -->

SAP CPQ Setup and Administration Guide


582 PUBLIC User Interface Design
Example2:

We can filter the array by value of editable and then check if all editable fields are required.

<h3>Are all editable fields required?</h3>


<span data-bind ="text: customFields.filterByProperty('editable',
true).all(function(item){ return item.isRequired === true;})"></span>

Example3:

We can filter the array by value of editable and then check if any editable field is required.

<h3>Is any editable field required?</h3>


<span data-bind ="text: customFields.filterByProperty('editable',
true).anyWithProperty('isRequired', true)"></span>

9.7.3 Customization Examples

In this topic you can see different types of common customizations in Responsive design as well as usefull
HTML snippets:

Header Customizations [page 583]


This section contains customizations which can be applied to the Header.

Configurator Customizations [page 584]


This section contains customizations which can be applied to the Configurator page.

Cart Customizations [page 588]


This section contains customizations which can be applied to the Cart page.

Quote Custom Fields Customizations [page 590]


This section contains examples for quote custom fields customizations.

Quote Item Custom Fields Customization [page 598]


This section contains examples of customizations of quote item custom fields.

Cart Items Table Customizations [page 605]


This section provides examples of cart items table customizations.

Catalog Customizations [page 606]


This section contains customizations which can be applied to the Catalog page.

9.7.3.1 Header Customizations

This section contains customizations which can be applied to the Header.

Change Logo through CSS [page 584]

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 583
You can change the logo through CSS.

Add and Load External JavaScript Modules [page 584]


Below is the code snippet that you can add to your templates to load and use external JavaScript
modules.

9.7.3.1.1 Change Logo through CSS

You can change the logo through CSS.

Procedure

1. Go to Setup General File Management .


2. Upload an image in folder Additional Files.
3. Add this to your custom CSS file, depending on where you uploaded your logo:

.cald_logo {
background: url(https://devstable.webcomcpq.com/mt/DEFAULT/additionalfiles/
logo1.jpg) no-repeat center center;
background-size: contain;
}

9.7.3.1.2 Add and Load External JavaScript Modules

Below is the code snippet that you can add to your templates to load and use external JavaScript modules.

<script type="text/javascript">
require.config({
paths: {
"Msal": "https://alcdn.msauth.net/lib/1.1.3/js/msal.min"
}
});

require(['Msal'], function(Msal){
console.log(Msal)
});
</script>

9.7.3.2 Configurator Customizations

This section contains customizations which can be applied to the Configurator page.

Customize Attribute Image Checkboxes [page 585]


Here, you can learn how attribute image checkboxes are customized.

SAP CPQ Setup and Administration Guide


584 PUBLIC User Interface Design
Make Responder Display in Modal Window [page 586]
This page contains a piece of code which should be added to your custom CSS file to make the
Responder display in a modal window.

Change the Way Attributes are Displayed in One Tab [page 586]

9.7.3.2.1 Customize Attribute Image Checkboxes

Here, you can learn how attribute image checkboxes are customized.

Procedure

1. Edit attribute in product.


2. Set Display as to be Image Button.
3. Upload Image On and Image Off pictures.
4. Change Display as to be Check Box.
5. Click Save.
6. Create new template Editors/CheckboxTemplate to be used in the Configurator page.

7. Change this part of the template:

<span class="l" data-bind="css: {'col-md-7 clear-padding': $parent.dataType()


== 'Attr.Quantity'}">
<label class="middle">
<input class="custom" type="checkbox" data-bind="value: pavId, checked:
selected, incrementalTabIndex, enable: $parent.isEnabled" />
<span data-bind="html: displayValueWithPrices" class="lbl"></span>
</label>
</span>

With this:

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 585
<span class="l image-checkbox" data-bind="css: {'col-md-7 clear-padding':
$parent.dataType() == 'Attr.Quantity'}">
<label class="middle">
<input class="custom" type="checkbox" data-bind="value: pavId, checked:
selected, incrementalTabIndex, enable: $parent.isEnabled" />
<!-- ko if: $data.imageUrl().length > 0 -->
<span class="img-thumbnail">
<img class="img-responsive" data-bind="attr:{src:
$data.imageUrl}" />
<span data-bind="html: displayValueWithPrices" class="lbl"></span>
</span>
<!-- /ko -->
<!-- ko if: $data.imageUrl().length == 0 -->
<span data-bind="html: displayValue" class="lbl"></span>
<!-- /ko -->
</label>
</span>

8. Add this CSS:

.image-checkbox {
width: 100%;
}
.image-checkbox input.custom[type="checkbox"]:checked + span.img-thumbnail {
border: 2px solid #00a8e3;
box-shadow: 0 0 8px #dce1e5;
}

9.7.3.2.2 Make Responder Display in Modal Window

This page contains a piece of code which should be added to your custom CSS file to make the Responder
display in a modal window.

.hide-responder {
display: none;
}
.info-label.total {
display: table-cell;
}
.full-width {
width: 100%;
}

9.7.3.2.3 Change the Way Attributes are Displayed in One


Tab

Procedure

1. Create a new template ConfiguratorView for the Configurator page.

SAP CPQ Setup and Administration Guide


586 PUBLIC User Interface Design
2. Add condition for tab ID (or name) and then display the attributes inside that tab the way you want
(example is showing attributes in a table).

In this example we customize tab with id = 17 and attributes with stdAttrCode = 930 and
stdAttrCode = 931.

<!-- ko if : tabs().length > 0 && currentTab().id() === 17 -->


<table class="table table-bordered">
<caption>Basic Information</caption>
<thead>
<tr>
<!-- ko foreach: attributes -->
<!-- ko if : $data.stdAttrCode() === 930 || $data.stdAttrCode() ===
931 -->
<th><label data-bind="html: label, css: { required: incomplete() &&
$root.highlightIncomplete() }"></label></th>
<!-- /ko -->
<!-- /ko -->
</tr>
</thead>
<tbody>
<tr>
<!-- ko foreach: attributes -->
<!-- ko if : $data.stdAttrCode() === 930 || $data.stdAttrCode() ===
931 -->
<td><span data-bind="text: userInput"></span></td>
<!-- /ko -->
<!-- /ko -->
</tr>
</tbody>
</table>
<!-- /ko -->

3. Add condition to display attributes in classic way in all other tabs.

<!-- ko if : tabs().length === 0 || tabs().length > 0 && currentTab().id() !


== 17 -->

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 587
<!-- ko foreach: attributes -->
<div data-bind="attr: { 'class': isWholeRow() ? 'g4' : 'g1' }">
<!-- ko template: { name: $root.getAttributeTemplate } -->
<!-- /ko -->
</div>
<!-- /ko -->
<!-- /ko -->

9.7.3.3 Cart Customizations

This section contains customizations which can be applied to the Cart page.

Replace Cart Action with custom JS [page 588]


Regular custom actions on cart can have embedded JavaScript code that will execute on click.

Allow Negative Numbers in Cart Cells [page 590]


We will customize cell template in order to allow negative numbers for discount, extended amount, and
so on.

9.7.3.3.1 Replace Cart Action with custom JS

Regular custom actions on cart can have embedded JavaScript code that will execute on click.

Context

We want to add some JavaScript code for our custom action on a quote. We need to know our action's ID. For
this example, let's say that ID is 2524.

Procedure

1. Create IronPython script that returns some message (for example This is a test message.) and name it test.
2. Create a new ActionsTemplate on the Cart page.

SAP CPQ Setup and Administration Guide


588 PUBLIC User Interface Design
3. Override default template with this (Observe that id in this example is our custom action's ID):

<script type="text/javascript">
window.ShowResult = function ()
{
var result = $.get("https://sandbox.webcomcpq.com/customapi?
username=admin&password=password123&scriptname=test");
alert(result);
};
</script>
<script type="text/html" id="actionsTemplate">
<div data-bind="foreach: $data">
<!-- ko if : $root.displayImagesForCartActions -->
<div class="action-row">
<!-- ko if: id !== 2524 -->
<a href="#">
<span data-bind="text: name, click: execute"></span>&nbsp;<img
data-bind="attr: { src: imageUrl }, visible: imageUrl" />
</a>
<!-- /ko -->
<!-- ko if: id === 2524 -->
<button data-bind="text: name" onclick="window.ShowResult()"></
button>&nbsp;<img data-bind="attr: { src: imageUrl }, visible: imageUrl" />
<!-- /ko -->
</div>
<!-- /ko -->
<!-- ko ifnot : $root.displayImagesForCartActions -->
<div class="button-actions"><button type="button" class="btn btn-
default" data-bind="text: name, click: execute"></button></div>
<!-- /ko -->
</div>
</script>

4. Go to Cart page.

You should see button beside your action's name.


5. Click on action and you should see message from your script:

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 589
In this example we've used SAP CPQ custom API for script execution. Of course, you can call any other
supported external API source.

9.7.3.3.2 Allow Negative Numbers in Cart Cells

We will customize cell template in order to allow negative numbers for discount, extended amount, and so on.

Procedure

1. Create a new responsive template which uses standard Cart/Templates/CellTemplates template.


2. In new template just replace numericMathCellTemplate with this one:

<script type="text/html" id="numericMathCellTemplate">


<div data-bind="css:{ 'input-group col-md-12 clear-padding':
hasModifiedComputedField }">
<span class="input-group-addon" data-bind="visible: hasModifiedComputedField,
tooltip:{ title: modifiedComputedFieldMsg }"><i class="fa fa-
exclamation"></i></span>
<input type="text" class="form-control numberCell"
data-bind="valueUpdatedOnEnter: value, executeOnEnter: $root.calculate,
css:{ hasError: errorMessage }, attr:{ title: errorMessage() ?
errorMessage() : '' }, incrementalTabIndex: tabIndexGroup" />
</div>
</script>

9.7.3.4 Quote Custom Fields Customizations

This section contains examples for quote custom fields customizations.

Create Custom Field Custom Templates [page 591]


This page contains the procedure for creating custom field custom templates.

Show Custom Fields in a Separate Section [page 592]


This procedure shows you how to make custom fields display in a separate section.

Show Custom Field Value in Shipping Info Form [page 593]


This procedure shows you how to make the custom field value display in the Shopping Info form.

Display Custom Field in Product Type Section [page 595]

SAP CPQ Setup and Administration Guide


590 PUBLIC User Interface Design
This procedure shows you how to make a custom field display in the Product Type section.

Display Custom Field in Product Type Section in Item Total Row [page 596]
This procedure shows you how to make a custom field diisplay in the Item Total row of the Product Type
section.

9.7.3.4.1 Create Custom Field Custom Templates

This page contains the procedure for creating custom field custom templates.

Procedure

1. Create new template Templates/CartCustomFieldTemplate on the Cart page.

2. Make a copy of the existing templates.


3. Add your own suffix to the template names.

For example we will add CustomCF:

<script type="text/html" id="CartCustomFieldFreeFormTemplateCustomCF">


<div data-bind="html: content"></div>
<span data-bind="text: error, enable: editable" class="required"></span>
</script>

4. In this example we want to show custom field with id = 57. Name those custom templates wherever you
want to use them on Cart page, just by adding this part of HTML:

<!-- ko foreach: $root.customFields -->


<!-- ko if: $data.id === 57 -->
<!-- ko template: template + 'CustomCF' -->
<!--/ko -->
<!--/ko -->
<!--/ko -->

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 591
9.7.3.4.2 Show Custom Fields in a Separate Section

This procedure shows you how to make custom fields display in a separate section.

Procedure

1. Create new template inside the section where you want your new section to appear. For example, Sections/
CustomFields on the Cart page.

2. Change this part of template:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko if : $data.itemDescription.productTypeName() === 'Accessories' -->
@if (Model.Cells[i].ColumnName != "someNameColumn")
{
<!-- ko template : { name : values[@i].template, data:
values[@i] } -->
<!-- /ko -->
}
<!-- /ko -->
<!-- ko if : $data.itemDescription.productTypeName() !== 'Accessories' -->
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
<!-- /ko -->
</td>

With this:

<div id="custom-fields-section">
@*Custom fields*@
<div data-bind="visible: customFields().length > 0">
<div class="col-md-12">
<h3
class="alternate">@Translation.Get("xsltQuoteCartCustomFields")</h3>
</div>
<div class="clearfix">
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko if: $data.id !== 53 && $data.id !== 57 -->
<!-- ko template: template -->
<!--/ko -->

SAP CPQ Setup and Administration Guide


592 PUBLIC User Interface Design
<!--/ko -->
</div>
</div>
<br />
<h3 class="tertiary">My section for custom templates</h3>
<div data-bind="foreach: customFields" class="custom-fields">
<!-- ko if: $data.id === 53 || $data.id === 57 -->
<!-- ko template: template -->
<!--/ko -->
<!-- /ko -->
</div>
</div>
</div>

Results

In this example we create new section with name My section for custom template. We put custom fields with
IDs 53 and 57 in new section and remove those custom fields from regular section.

9.7.3.4.3 Show Custom Field Value in Shipping Info Form

This procedure shows you how to make the custom field value display in the Shopping Info form.

Procedure

1. Create new template CustomerDataTemplate in the Customers page.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 593
2. Change this part of template:

<div data-bind="foreach: fields">


<div class="form-group">
<label class="col-md-5 col-xs-6 control-label" data-bind="text: label,
css: { 'required': isRequired }" />
<div class="col-md-7 col-xs-6">
<!-- ko if: isListItem() -->
<select data-bind="options: items, optionsText: 'label',
optionsValue: 'value', value: listItemValue" class="form-control" />
<!-- /ko-->
<!-- ko if: isTextField() && fieldId !== 'Active'-->
<input type="text" data-bind="id: fieldId, value: value" class="form-
control" />
<!-- ko if: isPostcodeLookup-->
<a href="#" data-bind="click:
$parent.findAddress">[@Translation.Get("xsltFindAddress")]</a>
<!-- /ko -->
<!-- /ko-->
<!-- ko if: isSpan() && fieldId !== 'Active'-->
<span data-bind="id: fieldId, text: value" />
<!-- /ko-->
</div>
</div>
</div>

With this:

<div data-bind="foreach: fields">


<!-- ko if: $data.fieldId !== 'someFieldOnForm'-->
<div class="form-group">
<label class="col-md-5 col-xs-6 control-label" data-bind="text: label,
css: { 'required': isRequired }" />
<div class="col-md-7 col-xs-6">
<!-- ko if: isListItem() -->
<select data-bind="options: items, optionsText: 'label',
optionsValue: 'value', value: listItemValue" class="form-control" />
<!-- /ko-->
<!-- ko if: isTextField() && fieldId !== 'Active'-->
<input type="text" data-bind="id: fieldId, value: value" class="form-
control" />
<!-- ko if: isPostcodeLookup-->
<a href="#" data-bind="click:
$parent.findAddress">[@Translation.Get("xsltFindAddress")]</a>
<!-- /ko -->
<!-- /ko-->
<!-- ko if: isSpan() && fieldId !== 'Active'-->
<span data-bind="id: fieldId, text: value" />
<!-- /ko-->
</div>
</div>
<!-- /ko-->
<!-- ko if: $data.fieldId === 'someFieldOnForm'-->
<div class="form-group">
<label class="col-md-5 col-xs-6 control-label" data-bind="text: label,
css: { 'required': isRequired }" />
<div class="col-md-7 col-xs-6">
<div data-bind="foreach: $root.customFleldsModel.customFields"
class="custom-fields">
<!-- ko if : $data.id === 50 -->
<span data-bind="html: content" />
<!-- /ko -->
</div>
</div>
</div>
<!-- /ko-->

SAP CPQ Setup and Administration Guide


594 PUBLIC User Interface Design
</div>

Results

In this example we write value of custom field with ID equal to 50 into field with name someFieldOnForm.

9.7.3.4.4 Display Custom Field in Product Type Section

This procedure shows you how to make a custom field display in the Product Type section.

Procedure

1. Create new template Sections/ProductTypes in the Cart page.

2. Change this part of template:

<!-- ko foreach: values -->


<td data-bind="attr: { 'data-title': $root.productTypes.columnLabels()
[$index()] }">
<!-- ko template : { name : template } -->
<!-- /ko -->
</td>
<!-- /ko -->

With this:

<!-- ko if: $data.productTypeName !== 'Hardware' -->


<!-- ko foreach: values -->
<td data-bind="attr: { 'data-title': $root.productTypes.columnLabels()
[$index()] }">
<!-- ko template : { name : template } -->
<!-- /ko -->

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 595
</td>
<!-- /ko -->
<!-- /ko -->
<!-- ko if: $data.productTypeName === 'Hardware' -->
<!-- ko foreach: values -->
<!-- ko if: $data.column.name === 'DiscountPercent' -->
<td>
<!-- ko foreach: $root.customFields -->
<!-- ko if: $data.id === 55 -->
<input data-bind="value: content, enable: editable,
incrementalTabIndex: 'customFields'" class="form-control" />
<span data-bind="text: error, enable: editable"
class="required"></span>
<!--/ko -->
<!--/ko -->
</td>
<!-- /ko -->
<!-- ko if: $data.column.name !== 'DiscountPercent' -->
<td data-bind="attr: { 'data-title': $root.productTypes.columnLabels()
[$index()] }">
<!-- ko template : { name : template } -->
<!-- /ko -->
</td>
<!-- /ko -->
<!-- /ko -->
<!-- /ko -->

Results

In this example we write value of custom field with ID equal to 55 into column in section Product Types with
name DiscountPercent, but only for product type Hardware.

9.7.3.4.5 Display Custom Field in Product Type Section in


Item Total Row

This procedure shows you how to make a custom field diisplay in the Item Total row of the Product Type section.

Procedure

1. Create new template Sections/ProductTypes in the Cart page.

SAP CPQ Setup and Administration Guide


596 PUBLIC User Interface Design
2. Change this part of template:

<!-- ko foreach: $root.productTypes.totals -->


<td class="bold-border" data-bind="attr: { 'data-title':
$root.productTypes.columnLabels()[$index()] }">
<!-- ko template : { name : template } -->
<!-- /ko -->
</td>
<!-- /ko -->

With this:

<!-- ko foreach: $root.productTypes.totals -->


<!-- ko if: $data.column.name === 'DiscountPercent' -->
<td class="bold-border" data-bind="attr: { 'data-title':
$root.productTypes.columnLabels()[$index()] }">
<!-- ko foreach: $root.customFields -->
<!-- ko if: $data.id === 55 -->
<input data-bind="value: content, enable: editable,
incrementalTabIndex: 'customFields'" class="form-control" />
<span data-bind="text: error, enable: editable" class="required"></
span>
<!--/ko -->
<!--/ko -->
</td>
<!--/ko -->
<!-- ko if: $data.column.name !== 'DiscountPercent' -->
<td class="bold-border" data-bind="attr: { 'data-title':
$root.productTypes.columnLabels()[$index()] }">
<!-- ko template : { name : template } -->
<!-- /ko -->
</td>
<!--/ko -->
<!-- /ko -->

Results

In this example we write value of custom field with ID equal to 55 into column in section Product Types with
name DiscountPercent, but only in Item Total row.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 597
9.7.3.5 Quote Item Custom Fields Customization

This section contains examples of customizations of quote item custom fields.

Quote Item Custom Field as Checkbox [page 598]


This procedure shows you how to customize a quote item custom field to appear as a checkbox.

Quote Item Custom Field as Dropdown [page 600]


This procedure shows you how to customize a quote item custom field to appear as a dropdown.

Display Image in Item Custom Column [page 601]


This procedure shows you how to add an image to the item custom column.

Use Item column value in first column [page 603]


This procedure shows you how to make an item column value display in the first columnn.

9.7.3.5.1 Quote Item Custom Field as Checkbox

This procedure shows you how to customize a quote item custom field to appear as a checkbox.

Procedure

1. Create a custom field (for example someNameCheckboxCF), of the type Text.

• If you want default value (when you enter the quote for first time) of checkbox to be checked set
Calculation formula to be true.
• If you want default value (when you enter the quote for first time) of checkbox to be unchecked set
Calculation formula to be false or leave it empty.

2. In Pricing/Calculations Cart Fields Administration for appropriate status and user type set this
custom field to be editable.

3. In QuotesQuotes Quote Layout Permissions set visibility permission for this custom field.

4. In UI DesignUI Design Quote Layout set this custom field to be visible in Cart.

5. In UI Design Responsive Templates create a new responsive template.

For Page select Cart, for template set Sections/ItemsTable, set Name and check Default.

SAP CPQ Setup and Administration Guide


598 PUBLIC User Interface Design
6. In new template change this part:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>

With this:

if (Model.Cells[i].ColumnName == "someNameCheckboxCF")
{
<!-- ko template : { name : 'checkBoxTemplate', data: values[@i] } -->
<!-- /ko -->
}
else
{
<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>
}

7. At the end of template add this part:

<script type="text/html" id="checkBoxTemplate">


<div class="pull-right">
<input type="checkbox" data-bind="checked: ko.computed({
read: function(){
return value() === 'true';
},
write :function(newValue){

value(newValue.toString());
}
});" />
</div>
</script>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 599
9.7.3.5.2 Quote Item Custom Field as Dropdown

This procedure shows you how to customize a quote item custom field to appear as a dropdown.

Procedure

1. Create custom field (for example someNameDropDownCF), and set its type to Text.

2. In Pricing/Calculations Cart Fields Administration for appropriate status and user type set this
custom field to be editable.

3. In Quotes Quote Layout Permissions set visibility permission for this custom field.

4. In UI Design Quote Layout set this custom field to be visible in Cart.

5. In UI Design Responsive Templates create new responsive template. For Page select Cart, for
template set Sections/ItemsTable, set Name and check Default.

6. In new template change this part:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>

With this:

if (Model.Cells[i].ColumnName == "someNameDropDownCF")
{
<!-- ko template : { name : 'dropDownTemplate', data: values[@i] } -->
<!-- /ko -->
}
else
{
<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>
}

SAP CPQ Setup and Administration Guide


600 PUBLIC User Interface Design
7. At the end of template add this part:

<script type="text/html" id="dropDownTemplate">


<div class="pull-right">
<select data-bind="options: ko.observable(['Status 1', 'Status 2',
'Status 3']), value: value"></select>
</div>
</script>

Results

In this example there are three statuses - Status 1, Status 2 and Status 3 in observable array that will be
displayed as options in dropdown, but you can create tour own custom observable array.

9.7.3.5.3 Display Image in Item Custom Column

This procedure shows you how to add an image to the item custom column.

Procedure

1. Go to Setup General File Management and upload an image in folder Additional Files.
2. Create custom field (for example CFWithPicture), set its type to Text and for calculation formula set picture
path.

For example: https://devstable.webcomcpq.com/mt/DEFAULT/additionalfiles/image1.jpg

This example is for devstable environment, default domain and picture with name image1.jp is
uploaded in folder additionalfiles

3. In Quotes Quote Layout Permissions set visibility permission for this custom field.

4. In UI Design Quote Layout set this custom field to be visible in Cart.

5. In UI Design Responsive Templates create a new responsive template. For Page select Cart, for
Template set Sections/ItemsTable, set Name and check Default.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 601
6. In new template change this part:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>

With this:

@if(Model.Cells[i].ColumnName ==
"CFWithPicture")
{
<img data-bind="attr : { src : values[@i].value}"></img>
} else
{
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
}

Results

In this example we change the way of rendering quote item custom field if field name is CFWithPicture. For
that custom field we want to render image with path defined in its calculation formula.

SAP CPQ Setup and Administration Guide


602 PUBLIC User Interface Design
9.7.3.5.4 Use Item column value in first column

This procedure shows you how to make an item column value display in the first columnn.

Context

We are assuming that like in previous example [page 601] there is the same Item Custom field named
CFWithPicture that contains URL. We will add this custom field in first column.

Procedure

1. In place where we want to display this picture (form quote item custom field) add this part of code in the
Sections/ItemsTable template on the Cart page:

<img data-bind="attr : { src : values.filter(function (value) { return


value.column.name === 'CFWithPicture' })[0].value }"></img>

2. We use knockout projections function filter to get column value where column name is CFWithPicture.
We could expand our example with hidding this column form items table. We need to remove it from
header. Change this part of code:

<thead>
<tr style="height: 20px;">
<th rowspan="2" data-bind="visible: canManageItems" class="manage-
items">
<input type="checkbox" class="custom" data-bind="checked:
selectAll"/>
<span class="lbl"></span>
</th>
<th rowspan="2">@Translation.Get("docItem")</th>
@*Complex columns have 2 additional columns in next row sot their
rowSpan is 1 and colSpan is 2*@
@foreach (CartItemColumnVm column in Model.Columns)
{
if (column.IsComplex)
{
<th colspan="2" rowspan="1">@column.HeaderLabel</th>
}
else
{
<th colspan="1" rowspan="2">@column.HeaderLabel</th>
}
}
</tr>
<tr>
@foreach (CartItemColumnVm column in Model.Columns)
{
if (column.IsComplex)
{
<th>@Translation.Get("xsltNRC")</th>
<th>@Translation.Get("xsltMRC")</th>
}
}
</tr>

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 603
</thead>

With this:

<thead>
<tr style="height: 20px;">
<th rowspan="2" data-bind="visible: canManageItems" class="manage-
items">
<input type="checkbox" class="custom" data-bind="checked:
selectAll"/>
<span class="lbl"></span>
</th>
<th rowspan="2">@Translation.Get("docItem")</th>
@*Complex columns have 2 additional columns in next row sot their
rowSpan is 1 and colSpan is 2*@
@foreach (CartItemColumnVm column in Model.Columns)
{
if (column.Name != "CFWithPicture")
{
if (column.IsComplex)
{
<th colspan="2" rowspan="1">@column.HeaderLabel</th>
}
else
{
<th colspan="1" rowspan="2">@column.HeaderLabel</th>
}
}
}
</tr>
<tr>
@foreach (CartItemColumnVm column in Model.Columns)
{
if (column.IsComplex && column.Name != "CFWithPicture")
{
<th>@Translation.Get("xsltNRC")</th>
<th>@Translation.Get("xsltMRC")</th>
}
}
</tr>
</thead>

3. We need to skip it when rendering cells. Change this part of code:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>

With this:

if(Model.Cells[i].ColumnName !=
"CFWithPicture")
{
<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>
}

SAP CPQ Setup and Administration Guide


604 PUBLIC User Interface Design
9.7.3.6 Cart Items Table Customizations

This section provides examples of cart items table customizations.

Hide Values from Some Columns in the Cart [page 605]


This procedure shows you how to hide values from some columns in the quote.

9.7.3.6.1 Hide Values from Some Columns in the Cart

This procedure shows you how to hide values from some columns in the quote.

Procedure

1. Create new template Sections/ItemsTable in the Cart page.

2. Change this part of the template:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
</td>

With this:

<td data-title="@Model.Cells[i].CellLabel">
<!-- ko if : $data.itemDescription.productTypeName() === 'Accessories' -->
@if (Model.Cells[i].ColumnName != "someNameColumn")

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 605
{
<!-- ko template : { name : values[@i].template, data:
values[@i] } -->
<!-- /ko -->
}
<!-- /ko -->
<!-- ko if : $data.itemDescription.productTypeName() !== 'Accessories' -->
<!-- ko template : { name : values[@i].template, data: values[@i] } -->
<!-- /ko -->
<!-- /ko -->
</td>

Results

In this example we want to hide values from column with name someNameColumn, but only for products which
type is Accessories.

9.7.3.7 Catalog Customizations

This section contains customizations which can be applied to the Catalog page.

Remove Images of Categories from Catalog [page 606]


This procedure shows you how to remove images of categories from the Catalog.

Remove Images of Products from Catalog [page 607]


This procedure shows you how to remove images of products from the Catalog.

9.7.3.7.1 Remove Images of Categories from Catalog

This procedure shows you how to remove images of categories from the Catalog.

Procedure

1. Create a new template.

SAP CPQ Setup and Administration Guide


606 PUBLIC User Interface Design
2. At the end of file add this custom CSS:

<style>
.categories-tabular .image-holder {
display: none;
}
</style>

You can also add this to your CSS file for categories.

9.7.3.7.2 Remove Images of Products from Catalog


This procedure shows you how to remove images of products from the Catalog.

Procedure

1. Create new template:

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 607
2. At the end of file add this custom CSS:

<style>
.product-box .image-holder {
display: none;
}
</style>

You can also add this to your CSS file for products.

9.7.4 Advanced Customization Examples

In this section you can see different types of more advanced customizations in Responsive Design that add
custom behavior to pages:

cpq global variable [page 608]


Window contain global cpq variable. Sole purpose of this variable is to help deliver Responsive Design
customizations that contain custom behavior (custom JavaScript).

WorkflowContext ClientData Rendering [page 611]


Data you put in WorkflowContext.ClientData can be accessed on client on Cart and CartList
knockout model using WorkflowClientData observable on model.

How to Display Key Attributes on Custom Tab [page 615]

Fetching Additional Data from Server [page 617]


This procedure shows you how to make the list of hidden attributes display in the Responder.

How to Download XML File [page 621]


This procedure shows how you can download XML file that has been generated by global script.

9.7.4.1 cpq global variable

Window contain global cpq variable. Sole purpose of this variable is to help deliver Responsive Design
customizations that contain custom behavior (custom JavaScript).

cpq.models:

Models property will expose all knockout models present on current page. This will make easier to reach
model instance and inspect it. To try it out type cpq.models. in your browser console and see what will
auto-complete offer you.

SAP CPQ Setup and Administration Guide


608 PUBLIC User Interface Design
cpq.server:

Server property is there to help you communicate with server from your JavaScript. It contains only one
member, function executeScript which invokes your global IPython script. Please see Consume Python Global
Scripts as REST Webservices.

JavaScript:

executeScript: function(scriptName, jsonParam, callback)

Name Type Required Description

scriptName string yes Name of your global IPython


script.

jsonParam object no If it's supplied it must


be object literal. For
example: { myPoperty:
'myValue' }.

callback function no Function that will be called


if service was executed
successfully. If service
returned data it will be
returned as first parameter.

JavaScript:

cpq.server.executeScript('someScript', { myPoperty: "myValue" }, function (data)


{ console.log(data); });

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 609
cpq.events:

Events object contain pub and sub functions which allow you to subscribe to SAP CPQ public javascript events.
It also allow you to publish and subscribe to your custom events. This can be useful if you are building multiple
widgets for the same page that need to communicate.

 Code Syntax

JavaScript

sub: function (channelName, callback)

Name Type Required Description

channelName string no Name of the event you


are subscribing to. For
example, "modelCreated"
or "catalog:updated".
Channel name supports
namespacing. In case of
"catalog:updated" event, if
you subscribe to "catalog"
you will get notified for
all events starting with
"catalog:". If channel name
is not supplied you will
subscribe to all events.

callback function yes Function that will get called


once event is raised. First
parameter is the data and
second is channel name
(name of the raised event).

 Code Syntax

JavaScript

pub: function (channelName, data)

Name Type Required Description

channelName string yes Name of the event you


are publishing. For example,
"someEvent".

data anything no data that will be sent to


event subscribers.

 Code Syntax

JavaScript

cpq.events.sub("someEvent", function(data, event) { console.log(data,


event); });
cpq.events.pub("someEvent", "someData");

SAP CPQ Setup and Administration Guide


610 PUBLIC User Interface Design
cpq public events:

Each knockout model in SAP CPQ will raise events when models is crated and updated. When model is created
"modelCreated" is raised. When model receives data from server "modelName:updated" is raised. This event
is also raised when initial data is received. In this events data sent will alway have property "model" which
contains reference to model that raised the event.

 Code Syntax

JavaScript

cpq.events.sub("catalog:updated", function(data, event)


{ console.log("Catalog was updated", data.model); });

cpq.ready:

ready is function that accepts only one parameter which is callback function which is called when document is
ready. Unlike jQuery ready event this one will wait for some script initialization to finish so you can use ko global
variable.

 Code Syntax

JavaScript

cpq.ready(function(){
var model = {
name: ko.observable('MyModle'),
items: ko.observableArray()
};
ko.applyBindings(model, document.getElementById("exampleWidget"));
});

For full example using ready function please see WorkflowContext ClientData Rendering [page 611].

9.7.4.2 WorkflowContext ClientData Rendering

Data you put in WorkflowContext.ClientData can be accessed on client on Cart and CartList knockout
model using WorkflowClientData observable on model.

This observable stores last WorkflowContext.ClientData received from server and can be used for
rendering. See example below.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 611
Example 1:

Once custom action that will build ClientData is created, you need to add the following IronPython script to the
action:

Python:

# Apply some logic here for calculating client data


msgArray = [{ 'type' : 'info', 'message': 'some custom info' },
{ 'type' : 'error', 'message': 'some custom error' }]
warnMsg = {};
warnMsg['type'] = "warning";
warnMsg['message'] = "some warning message";
msgArray.append(warnMsg);
WorkflowContext.ClientData = msgArray

After you are done don't forget to setup new custom actoin in workflow and workflow permissions.

Then add following snippet in the Sections/Promotions template on Cart page:

<div class="row" data-bind="visible: workflowClientData">


<strong>Below is some client data</strong>
<!-- ko foreach : workflowClientData -->
<div class="alert" data-bind="text: message, css: { 'alert-info' : type
=== 'info', 'alert-danger' : type === 'error', 'alert-warning': type ===
'warning' }"></div>
<!-- /ko -->
</div>

Now if you go to Cart you will see new action Get ClientData.

When you click Get ClientData IPython script sends data to client which is then rendered using out custom
template.

Example 2 (Widget implementation in CartPage template):

Downside of previous example is that client data can't be manipulated. It is using


WorkflowContext.ClientData to directly render data. Advantage of this approach is that is very simple.
Disadvantage is that you will show only last data received from server. In this example we'll implement custom
widget on cart page, in which client data is rendered and can be manipulated. This widget will accumulate
and display different messages received from server via client data and it will allow us to remove single or all
messages.

1. Create custom template in Cart/CartPage and add following HTML content:

<script type="text/javascript">
cpq.ready(function()
{
var model = {
isVisible: ko.observable(true),
data: ko.observableArray(),
clearAll: function ()
{
model.data([]);
},
remove: function(item)
{

SAP CPQ Setup and Administration Guide


612 PUBLIC User Interface Design
model.data.remove(item);
}
};
cpq.events.sub('cart:updated', function(data) {
// if we received client data, add it to our model
if (data.model.workflowClientData())
{
for(var i = 0; i <
data.model.workflowClientData().length; i++)
{

model.data.push(data.model.workflowClientData()[i]);
}
}
});
ko.applyBindings(model,
document.getElementById("exampleWidget"));
});
</script>
<div id="exampleWidget" class="center-block" data-bind="visible: isVisible"
style="display: none; width: 500px">
<div>
<strong>This is custom widget</strong>
<a href=#" data-bind="click: clearAll, visible: data().length >
0" style="float: right">Clear all</a>
<!-- ko foreach : data -->
<div class="alert" data-bind="css: { 'alert-info' : type ===
'info', 'alert-danger' : type === 'error', 'alert-warning': type ===
'warning' }">
<span data-bind="text: message"></span>
<a href="#" data-bind="click: $root.remove" style="float:
right">remove</a>
</div>
<!-- /ko -->
<div data-bind="visible: data().length === 0">currently
empty...</div>
</div>
</div>
2. Go to Cart page. You should see empty widget just above the quote:

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 613
3. Click on custom action for which you've defined IronPython script and you should see widget filled with
client data. You can remove individual divs or clear entire content of widget:

Example 3 (Widget implementation in Cart section template):

In previous example we've implemented widget that is positioned above cart page. This is because cart page
already have applied knockout bindings and we can't apply two or more bindings on same model. Luckily,
knockout have workaround for that, which give us possibility to implement our widget anywhere inside cart
page.

1. Create custom template in Sections/Promotions and add following HTML content:

<script type="text/javascript">
cpq.ready(function()
{
var model = {
isVisible: ko.observable(true),
data: ko.observableArray(),
clearAll: function ()
{
model.data([]);
},
remove: function(item)
{
model.data.remove(item);
}
};
cpq.events.sub('cart:updated', function(data) {
// if we received client data, add it to our model
if (data.model.workflowClientData())
{
for(var i = 0; i <
data.model.workflowClientData().length; i++)
{

model.data.push(data.model.workflowClientData()[i]);

SAP CPQ Setup and Administration Guide


614 PUBLIC User Interface Design
}
}
});
ko.bindingHandlers.stopBinding = {
init: function() {
return { controlsDescendantBindings: true };
}
};
ko.virtualElements.allowedBindings.stopBinding = true;
ko.applyBindings(model,
document.getElementById("exampleWidget"));
});
</script>
<!-- ko stopBinding: true -->
<div id="exampleWidget" class="center-block" data-bind="visible: isVisible"
style="display: none; width: 500px">
<div>
<strong>This is custom widget</strong>
<a href=#" data-bind="click: clearAll, visible: data().length >
0" style="float: right">Clear all</a>
<!-- ko foreach : data -->
<div class="alert" data-bind="css: { 'alert-info' : type ===
'info', 'alert-danger' : type === 'error', 'alert-warning': type ===
'warning' }">
<span data-bind="text: message"></span>
<a href="#" data-bind="click: $root.remove" style="float:
right">remove</a>
</div>
<!-- /ko -->
<div data-bind="visible: data().length === 0">currently
empty...</div>
</div>
</div>
<!-- /ko -->
2. Go to the Cart page. You should see widget as part of the cart page, similar to previous example.

Note that only difference between this and previous example is in block of code just above applyBindings
part. Then, we surounded our widget div with stopBinding function that we've added in script block to tell
knockout that on this part of HTML is applied inner binding.

9.7.4.3 How to Display Key Attributes on Custom Tab

In order to display key attributes on custom quote tab we need to do following:

1. Create global script for retrieving data to be displayed.


2. Write custom logic for getting and displaying data.
3. Add custom quote tab to a quote.

Create Global Script for Retrieving Data to be Displayed

The example of global script (name of script, Ex. GetData) for getting key attributes:

def GetColumns(mainItems):
columns = ["Product Name"]
if len(list(Quote.MainItems)) > 0 :

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 615
for attr in mainItems[0].KeyAttributes:
columns.append(attr.Label)
return columns
columns = GetColumns(Quote.MainItems)
values = [];
for item in Quote.MainItems:
values.append({"keyAttributes": item.KeyAttributes,"productName":
item.ProductName});
model = {'columns': columns, 'values': values}
ApiResponse = ApiResponseFactory.JsonResponse(model)

Write Custom Logic for Getting and Displaying Data

The example of js/html files that need to be added to file management:

MyPage.html:

<!DOCTYPE html>
<html>
<head>
<script src="libs/jquery.js"></script>
<script src="libs/knockout.js"></script>
<script src="app.js"></script>
<script src="libs/bootstrap.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="libs/bootstrap.min.css">
</head>
<body>
<div>
<table class="table table-bordered table-hover ">
<thead>
<tr data-bind='foreach: columns'>
<th>
<span data-bind="text: $data"></span>
</th>
</tr>
</thead>
<tbody data-bind="foreach: rows">
<tr>
<td data-bind="text: $data.productName "></td>
<!-- ko foreach: $data.keyAttributes -->
<td data-bind="text: $data.ParsedValue || 'Null'"></td>
<!-- /ko -->
</tr>
</tbody>
</table>
</div>
</body>
</html>

app.js:

$(function() {
$.get(location.origin + "/customapi/executescript?scriptname=GetData",
function(data) {
var ViewModel = function(data) {
var self = this;
self.columns = ko.observableArray(data.columns);
self.rows = ko.observableArray(data.values);
};
ko.applyBindings(new ViewModel(data)); // This makes Knockout get to
work

SAP CPQ Setup and Administration Guide


616 PUBLIC User Interface Design
});
})

Add tab to quote

We need to define a tab with IFrame as a Type, and in IFrame URL you should provide URL like : https://
webcomcpq.com/mt/{your_tenant}/additionalfiles/MyFolder/MyPage.html

Where MyFolder is a folder where we will upload our files (html, js, css), and MyPage.html our custom page
for displaying data.

Also we need to include knockout.js and jquery.js and reference them in MyPage.html. We can include
bootstrap to make UI looks more native.

All files needs to be uploaded to MyFolder, previously defined. For better organization we can create sub-
folder lib and place all common libraries (such as 'knockout.js', 'jquery.js', 'bootstrap.css..') there.

9.7.4.4 Fetching Additional Data from Server

This procedure shows you how to make the list of hidden attributes display in the Responder.

Procedure

1. Create new IronPython script for listing all product attribute values and name it GetHiddenAttributes.
Those attributes are hidden.

IronPython:

list = []
atrributes = Product.Attributes
for attr in atrributes:
if not attr.ShowInResponder:
for value in attr.Values:
list.append(value.Display)
ApiResponse = ApiResponseFactory.JsonResponse(list);

2. Create new template ResponderView in the Configurator page.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 617
3. Add following content to the ResponderView template:

<script type="text/javascript">
showResult = function (callback)
{
return cpq.server.executeScript("GetHiddenAttributes", {}, callback);
};
cpq.ready(function(){
var model = {
dataArray: ko.observableArray()
};
cpq.events.sub('API:configurator:updated', function(data) {
init = function(serverData) {
for(var i = 0; i < serverData.length; i++)
{
model.dataArray.push(serverData[i]);
}
};
showResult(init);
});
ko.applyBindings(model, document.getElementById("exampleList"));
});
</script>
<div id="exampleList" class="row" data-bind="visible: dataArray">
<strong>Below is some client data</strong>
<ul>
<!-- ko foreach : dataArray -->
<li data-bind="text: $data"></li>
<!-- /ko -->
</ul>
</div>

4. Configure your product and you should see list of hidden attribute values rendered just above the
Responder every time Configurator updates.

SAP CPQ Setup and Administration Guide


618 PUBLIC User Interface Design
9.7.4.4.1 How to Fetch Additional Server Data After SAP
CPQ System Events

The following events are the most important, currently available SAP CPQ events, to which users can freely
subcribe through user interface templates and fetch server data. Each event returns different data, based on
the model that is created.

Event Name Description

API:approvalHistory:updated Event executes when approval history page is initialized/cre­


ated

API:approvals:updated Event executes when approval page is initialized/created or


updated

API:QuoteActions.afterActionExecution Event executes after quote action is executed

API:cartDocuments:updated Event executes when cart documents page is initialized/cre­


ated, or cart attachment is refreshed

API:lineItems:AddCollaborationComment Event executes when collaboration dialog is opened

API:cart:updated Event executes when cart page is initialized/created or up­


dated

API:customFields:updated Event executes when custom fields page/section is initial­


ized/created or updated

API:cartList:updated Event executes when cart list (Load Existing Quotes) page is
initialized/created or updated

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 619
Event Name Description

API:catalog:updated Event executes when catalog page/section is initialized/cre­


ated or updated

API:compareProducts:updated Event executes when compare product is initialized, updated


or terminated

API:configurator:updated Event executes when configuration page is initialized/cre­


ated or updated

API:customers:updated Event executes when customers page/section is initial­


ized/created or updated

API:shippingInfo:updated Event executes when shipping info is initialized/created or


updated

API:favorites:updated Event executes when favorites page is initialized/created or


updated

 Note

Before each implementation, you should first see what the returned model looks like, and only afterwards
try to fetch the needed data.

Example 1: Get Catalog data whenever Catalog page is updated/initialized

1. Go to Setup UI Design Responsive Templates . Create a new template with name


CatalogPageTemplate.
2. For the Page template, select Catalog, for Template, select CatalogPage.
3. Set it as a default template and save it.
4. At the top of the newly created template add the following code:

<script>
cpq.ready(function() {
cpq.events.sub("API:catalog:updated", function(catalogResponse){
console.log(catalogResponse.model);
});
});
</script>
5. After this, go to the Catalog page, inspect the page (press F12 ), and go to the Console tab. Here, you
should see the whole Catalog model and the available information that you can use for your own purposes
whenever the Catalog page is updated.

Example 2: Fetch server data after executing a custom quote action

1. Go to Setup General Application Parameters Shopping Cart and Quotes .


2. Set the parameter Make quote actions available on all tabs to TRUE.

SAP CPQ Setup and Administration Guide


620 PUBLIC User Interface Design
3. Make sure that the statuses Open and Preparing are set in the workflow.
4. Create a custom action, and place the following code:
1. Quote.ChangeQuoteStatus("Preparing") - for Quote 1.0
2. context.Quote.ChangeStatus("Preparing") - for Quote 2.0
5. Add the newly created action to the workflow permission for the appropriate user type and add it to the
Workflow setting for the combination of Open → Open statues.
6. Create or update the responsive template:
1. Page: Cart
2. Template: Sections/Tabs
7. In this template, add the following lines of code:

<script>
cpq.ready(function() {
cpq.events.sub("API:QuoteActions.afterActionExecution",
function(actionResponse){
if (actionResponse.OrderStatusId) {
const statusId = actionResponse.OrderStatusId;
if (actionResponse.OrderStatuses) {
const currentStatus =
actionResponse.OrderStatuses.find(status => status.Id == statusId);
console.log(currentStatus.Name);
}
}
});
});
</script>
8. Create a new quote and go to any custom tab (that is not Quotation). When we create a quote, the
expectation is that it is created in the Open status.
9. Open console (press F12 and move to the Console tab) and execute the newly created action.
10. In the console, you should be able to see the new status name, which you can place anywhere in the user
interface template.

9.7.4.5 How to Download XML File

This procedure shows how you can download XML file that has been generated by global script.

In order to download XML file we need to do following:

1. Create global script for generating XML file.


2. Write custom logic for downloading XML file.

Create global script for generating XML file

The example of global script (name of script, For example, GenerateXML) for generating XML file:

import clr
clr.AddReference('System.Xml')
from System.Xml import XmlDocument
from System.Text import Encoding
from System import DateTime, Random

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 621
xmlDoc = XmlDocument();
rootNode = xmlDoc.CreateElement('users');
xmlDoc.AppendChild(rootNode);
userNode = xmlDoc.CreateElement('user');
attribute = xmlDoc.CreateAttribute("age");
attribute.Value = '42';
userNode.Attributes.Append(attribute);
userNode.InnerText = 'John Doe';
rootNode.AppendChild(userNode);
ErrorMsg = None; #get error msg
file = ApiResponseFactory.FileResponse('text/
plain', Encoding.GetEncoding(1252).GetBytes(xmlDoc.OuterXml),
DateTime.Now.ToString("yyMMdd") + '_Users.xml')
ApiResponse = ApiResponseFactory.JsonResponse({"ErrorMsg": None, "File": file})

Note that we have set ErrorMsg to None, you should use some logic to see if error has happened and assign
message to ErrorMsg

Write Custom Logic for Downloading XML File.

You should create custom template and add button that will trigger script and use cpq global variable to
download XML file.

<button class='btn btn-default' onclick='downloadXML()'>Generate XML</button>


<script>
function downloadXML(e){
cpq.server.executeScript(“GenerateXML”, null, function(data) {
if(data.ErrorMsg){
alert(data.ErrorMsg);
return;
}
var byteArray = new Uint8Array(data.File.Content);
if(window.navigator && window.navigator.msSaveBlob){//if is IE
navigator.msSaveBlob( new Blob([byteArray], {type:'application/xml'}),
data.File.FileName )
} else {
var a = document.createElement("a");
document.body.appendChild(a);
a.href = window.URL.createObjectURL(new Blob([byteArray], { type:
'application/octet-stream' ));;
a.download = data.File.FileName;
a.click();
a.remove();} }); }
</script>
</html>

9.7.5 Server Side Rendering

Server context is accessible by @ in Razor.

The @ sign in templates denotes use of Razor syntax. Razor is a markup syntax for adding server-based code
to web pages. It is a server side markup syntax much like ASP and PHP and supports C# and Visual Basic
programming languages.

SAP CPQ Setup and Administration Guide


622 PUBLIC User Interface Design
Example

XML:

<h1>Hello Razor</h1>
<p>The time is @DateTime.Now</p>

The page contains ordinary HTML markup, with one addition: the @ marked Razor code. The Razor code does
all the work of determining the current time on the server and display it. You can specify formatting options, or
just display the default.

Razor View Helper Functions

Razor view helper functions are used in responsive template and all templates that we want to see title of
CSHTML file when we are debugging ( F12 in browsers).

Available functions:

• Translation function [page 623]


• PartialWithNameAsComment Function [page 624]
• How to Reuse Custom Templates [page 626]
• Url.MTContent [page 627]

9.7.5.1 Translation function

Translation is a helper function that renders message text on page based on key from appliaction dictionary.
The syntax is: @Translation.Get(key). This function will render message text from dictionary based on
provided key.

Context

We want to add multilanguage support to our template. To do that we need replace our static text with calls to
Translation.Get.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 623
Procedure

1. Create new template:

2. In your main page add following part:

@Translation.Get("MyKeyFromDictionary")

3. When template renders you should see value from appliaction dictionary for supplied key.

9.7.5.2 PartialWithNameAsComment Function

Function PartialWithNameAsComment renders the specified partial view as an HTML-encoded string and
adds name of file as a comment in html.

Context

Syntax:

@Html.PartialWithNameAsComment(partialViewName)
@Html.PartialWithNameAsComment(partialViewName, model)
@Html.PartialWithNameAsComment(partialViewName, viewData)
@Html.PartialWithNameAsComment(partialViewName, model, viewData)

These functions will render partial view and add name of that source file as a HTML comment.

We want to add custom cshtml template on our main page, but we would also like to see message that from
certain part in our main page begins custom template part. That message will be visible as HTML comment
when debugging our page in browser.

SAP CPQ Setup and Administration Guide


624 PUBLIC User Interface Design
Procedure

1. Create new template.

2. In your main page add following part:

XML:

@Html.PartialWithNameAsComment("CustomTemplateCF")

3. When debugging main page in browser you should see:

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 625
9.7.5.3 How to Reuse Custom Templates
The purpose of shared template is that we can use it on many places, as part of some other template or as
separate template. So, with this possibility we don't have to write the same code so many times.

Procedure

1. Go to Setup UI Design Responsive Templates and click Add New button.


2. Configure template as shown below.

3. After shared template is created, we can use it within some other template. For example, if we have
template for Catalog page and we want to use some shared template within it, we simply call it with
@html.PartialCustomTemplate("Template_Name") where we want to add that part.

SAP CPQ Setup and Administration Guide


626 PUBLIC User Interface Design
Results

After naming shared template we will see it as part of Catalog page template when we exit setup. As it is shown
below, the point where is shared template placed matches the point where we call it within the code (on the top
of the page).

9.7.5.4 Url.MTContent

Converts a virtual (relative) to MT folder resource to an application absolute path.

Syntax:

@Url.MTContent(path)

Example

Render image beach.jpg that you previously added to Additional Files folder.

C#:

<img src="@Url.MTContent("additionalfiles/beach.jpg")" />

Some other useful relative MT relative paths:

• Product Images - "/images/productimages/..."


• Category Images - "/images/categoryimages/..."
• Attribute Images - "/images/attributeimages/..."
• Actions - "/images/quoteactions/..."

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 627
• Top Menu - "/images/topmenuicons/..."
• Additional Files - "/additionalfiles/..."

9.7.6 Manage Custom CSS/JS Files with File Manager

Custom CSS or JS files can be uploaded via the File Manager into additional files folder and be used and
referenced in custom templates.

Context

We want to upload JavaScript file on file system and reference that JS file in our custom action template on
Cart page.

Procedure

1. Create and upload your JavaScript file via File Manager into additional files folder.

In our example, JS file is a simple function that shows message in alert box.

SAP CPQ Setup and Administration Guide


628 PUBLIC User Interface Design
2. Override default template with custom action template and reference previously uploaded script:

XML:

<script src="~/mt/default/additionalfiles/file.js" type="text/javascript"></


script>
<script type="text/html" id="actionsTemplate">
<div data-bind="foreach: $data">
<!-- ko if : $root.displayImagesForCartActions -->
<div class="action-row">
<!-- ko if: id !== 2524 -->
<a href="#">
<span data-bind="text: name, click: execute"></span>&nbsp;<img
data-bind="attr: { src: imageUrl }, visible: imageUrl" />
</a>
<!-- /ko -->
<!-- ko if: id === 2524 -->
<button data-bind="text: name" onclick="window.ShowResult()"></
button>&nbsp;<img data-bind="attr: { src: imageUrl }, visible: imageUrl" />
<!-- /ko -->
</div>
<!-- /ko -->
<!-- ko ifnot : $root.displayImagesForCartActions -->
<div class="button-actions"><button type="button" class="btn btn-
default" data-bind="text: name, click: execute"></button></div>
<!-- /ko -->
</div>
</script>

Observe that src attribute in script html tag represents path to the uploaded script in additional files folder.
Also, ShowResult() is our JS function from uploaded file.
3. Go to Cart page.

You should see button beside your action's name.


4. Click on action and you should see message from your script.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 629
9.7.7 Upgrade Templates to Newer Versions with Newer
Releases

Here is an example of how to use new version of template and upgrade the existing one. When custom
template is used and new version of template appeared with new release, user won't see these modifications
unless he compares them and then upgrades custom template with differences. For this purpose we use
Template versions tab on Responsive UI Template page. Here, we have all versions of some template. Versions
with User System are release's versions and versions with some other user are custom.

After two versions are selected and Compare button is clicked we can see the differences between these two
versions, so than we can use these rows to upgrade our version of template.

SAP CPQ Setup and Administration Guide


630 PUBLIC User Interface Design
Now, we can edit our custom template, copy these differencies within it if needed and we have to do that
manualy or we can leave template unchanged.

9.8 Obsolete Features

This section contains descriptions of obsolete features. Obsolete features are tied to the Classic Design.

Top Menu [page 632]


In SAP CPQ Setup under section UI design there is a link Top Menu. The purpose of this functionality is
creating an alternate look of menu on the user side.

Custom Category UI [page 633]


The Custom Category UI administrative section allows customizing the appearance of categories by
assigning them appropriate XSLT files.

Product Configuration Templates [page 634]


Product Configuration Templates provide you much flexibility in customizing the layout of the
configuration screen.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 631
Product Details Templates [page 634]
Product Details Templates allows designing the Product Details page in a flexible, yet easy way by
dragging and dropping various elements to the Design panel. Users can see the templates designed
in the Catalog when they click on products View Details link. Templates can contain information about
products, product attributes, Facebook widgets and so on.

Products to Product Details Templates Mappings [page 635]


The Products to Product Details Templates Mappings feature allows you to specify where Product
Details template is used.

9.8.1 Top Menu

In SAP CPQ Setup under section UI design there is a link Top Menu. The purpose of this functionality is creating
an alternate look of menu on the user side.

This view is representing a icons besides labels that is a common and standard view of Menu. On administrator
side, there is a new table which plenty of possibilities that can be manage through adding/editing icons.

When a radio button Icons is chosen a table below is editable and can be administered. When adding new icon
there are possibilities like position, images, URLs, HTMLs, tags and conditions. Depending on what is managed,
the result on the user side can be a textual link, image link, some contextual SAP CPQ tags and pop ups
windows.

When a radio button Labels is chosen a table below is not editable and cannot be administered.

SAP CPQ Setup and Administration Guide


632 PUBLIC User Interface Design
Once a new icon is added on the administrator side it can be viewed on the user side with all other standard
SAP CPQ icons if condition is allowing to show it. Everything else beside a visual style of menu is the same,
icons are behaving exactly as they are on default menu. Users have same permissions to browse along menu,
and to do that as an administrator or a user.

9.8.2 Custom Category UI

The Custom Category UI administrative section allows customizing the appearance of categories by assigning
them appropriate XSLT files.

Custom Category UI administration can be accessed by selecting the Custom Category UI link under the UI
Design dropdown. From here you can add, delete, or edit category designs.

Adding new design is available by clicking the Add New button. Category and XSLT file are the only required
fields. You can also restrict the design to a specific User Type by selecting the user type from the dropdown.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 633
9.8.3 Product Configuration Templates

Product Configuration Templates provide you much flexibility in customizing the layout of the configuration
screen.

There are templates available to modifying the look of the Configurator, Responder, tabs, steps, and the
page. Product Configuration Templates administration can be accessed by selecting the Product Configuration
Templates link under the UI Design dropdown. From here user can add, delete, edit, or copy Templates.

To add a new template, click Add New. Template Name is the only required field. This is because any XSLT files
that aren’t defined here are defaulted to what is set in the Application Parameters administrative section. Any
files set here override the default.

The template needs to be named something that is relative to the product or category. The template
description can be provided if further clarification is needed. If the template checkbox is checked,Guided
Selling Template then that template only appears when editing Guided Selling.

Also, Guided Selling product responder is different than the normal products responder, and default
GuidedSellingSearch.xsl responder needs to be selected for Guided Selling templates.

There are five sections of the configuration page that user can set templates for (default files are in
parentheses):

• Tabs - defines the look of the tab area on the page (DefaultTabs.xsl)
• Configurator - defines the look of the configuration section of the page (DefaultConfigurator.xsl)
• Steps - defines the area to the left of the configuration section (DefaultSteps.xsl)
• Responder - defines the responder area where the configuration summary is given (DefaultResponder.xsl)
• Page - defines the layout of the screen. Here you’re able to control where each section is positioned on the
page. (DefaultPage.xsl)

User can upload a new file with the Upload button or download existing files by selecting the file from the
dropdown and clicking the Download button. Additionally, you can delete files by selecting a file from the
dropdown and clicking the Delete button.

Once all information is filled in and completed, clicking the Save button saves the template and add it to the list
of Templates.

9.8.4 Product Details Templates

Product Details Templates allows designing the Product Details page in a flexible, yet easy way by dragging and
dropping various elements to the Design panel. Users can see the templates designed in the Catalog when
they click on products View Details link. Templates can contain information about products, product attributes,
Facebook widgets and so on.

 Note

This feature is obsolete in Responsive Design, and can only be accessed if Classic Design is used.

Product Details Templates administration can be accessed by selecting the Product Details Templates link
under the UI Design section of the Setup. From there you can add, delete, edit, or copy templates.

SAP CPQ Setup and Administration Guide


634 PUBLIC User Interface Design
You can add new templates by clicking Add New. A new product details template can be defined in two steps. In
the first step, you need to name the new template. In the second step, you can define the template by dragging
variable elements onto the panel. On the right-hand side of the screen there are four groups of elements:

• Attributes in the entire system


• Properties of the product
• Static HTML elements
• Widgets

Product weight is added as a new product property. You can set label, rank, and styles as for all other product
properties. The label of this property depends on the value of the application parameter, Unit of Measurement
under Application Parameters General Parameters . The value of the product property is one of following:
Product Weight in GRAMS, Product Weight in KGS, Product Weight in LBS.

On the first tab Details, you can define properties specific to elements (for example - element div has only one
detail, rank, which defines the order within the parent element). On the second tab Styles, you can define the
style for that element.

In the Catalog, only attributes that exist in a product are displayed for the user, while attributes that don't
belong to that product are ignored. All other elements are shown to the client. Static elements are listed in the
following table.

Name Description

Div Use it as a container for other static and nonstatic


elements.

Literal Use it when you want to display any HTML.

List Container for elements that are displayed as unordered list.

Tab container Use it when you want to separate data in more tabs.

Tab Use it to display data into a tab panel. Use it together with
tab container.

Display type allows selecting the way the attribute is displayed.

 Caution

After you've finished designing the template, you need to associate at least one product or a category with
this template in order to display it in the Catalog. See Products to Product Details Templates Mappings
[page 635] for more information.

9.8.5 Products to Product Details Templates Mappings


The Products to Product Details Templates Mappings feature allows you to specify where Product Details
template is used.

Templates Mappings administration can be accessed in Setup UI Design Product Details Templates
Mapping . From here user can add, delete, or edit a mapping.

Clicking Add New opens a page where you can connect a single product or products within a category to a
template.

SAP CPQ Setup and Administration Guide


User Interface Design PUBLIC 635
Click Select to choose a Product or a Category the template is mapped to. If product or category isn't selected,
the template is shown for any product or category.

Once you set up the mapping, you can see the details by clicking View Details in the Catalog. It’s possible to
specify whether the details appear in a modal div, or in a new page, by changing the application parameter
Allow view details for simple products in catalogue, which has three available values: No, In modal popup, On
new page (See Application Parameters [page 637]).

When you click on View Details, the system tries to find the template for that product. If there’s no template for
that product, the system tries to find a template for the category to which the product belongs. If there’s no
template for that category, the system continues searching recursively for a template in the parent category.
Finally, if there's no template that matches the criteria, the system chooses a default template (which doesn't
define category and product (Any)) or if there’s no default template mapping, the standard view is used.

SAP CPQ Setup and Administration Guide


636 PUBLIC User Interface Design
10 General Settings

The following topics explain the general settings in SAP CPQ.

Application Parameters [page 637]


The Application Parameters section provides settings that affect how some operations in the system
function. These settings allow companies to configure system operations to their needs.

Deploy / Send Changes [page 669]


The Deploy / Send Changes functionality enables you to send changes made in one SAP CPQ
environment (such as sandbox or test) to another (such as production).

Countries/Regions, States and Territories [page 700]

Tabs [page 701]


Tabs are components that help organize information on some of the SAP CPQ pages. You can
customize tabs to display the information best suited to your business needs.

Dictionaries [page 702]


A dictionary in SAP CPQ contains a set of keys and their values that are applicable on tenant level. Keys
are only used in the code to reference key values that are visible in the application and refer mainly to UI
content (button labels, tooltips, etc.).

Manage Generated Documents [page 706]

File Management [page 706]


File Management stores images and files that can be retrieved throughout Setup (when creating
products, categories, and so on).

Time Zones [page 708]


If your company has departments in different countries/regions, in different time zones, or simply your
users are scattered around the world, SAP CPQ can be set up SAP CPQ to display information in their
own time zone.

10.1 Application Parameters

The Application Parameters section provides settings that affect how some operations in the system function.
These settings allow companies to configure system operations to their needs.

To access these parameters, go to Setup General Application Parameters . Application Parameters are
separated into tabs.

Changes made to application parameters are logged in the User Actions tab of the Audit Trail. The following
information is logged in the Action column: Application parameter changed.

If the tenant in question is a Quote 2.0 tenant, this information is stated in the top of the page in General
Parameters.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 637
General Parameters

Name Description Quote engine

DB Version Defines the current database version. Quote 1.0 and Quote 2.0

Default Country/Region Defines the country used in the system. Quote 1.0 and Quote 2.0

Initially show only active products in Includes only active products when set Quote 1.0 and Quote 2.0
administration's product list to TRUE.

When users enter several words in Regulates how SAP CPQ filters prod­ Quote 1.0 and Quote 2.0
search box, SAP CPQ will find products ucts.
based on each entered word (instead of
searching based on entire phrase)

Do not email login details to users Defines whether a new User created by Quote 1.0 and Quote 2.0
created by admin the SAP CPQ admin receives an email
notification with login details.

Default login remember preference Defines which User login details are re­ Quote 1.0 and Quote 2.0
membered.

In Reverse Search, Sort Attribute Values Enables the sorting of attribute values Quote 1.0 and Quote 2.0
By in reverse search by rank (Attribute
Value Sort Rank), Id (Product Attrib­
ute Value Id), or by the catalog code
length/catalog code content (As In V5).

From Email Address Defines the email address used to con­ Quote 1.0 and Quote 2.0
tact administration, notify the SAP CPQ
admin about new user registration and
email order confirmation.

Sender Email Name Defines the name that appears in email Quote 1.0 and Quote 2.0
headers as the sender.

Sender Email Address Defines the email address that appears Quote 1.0 and Quote 2.0
in email headers as the sender's email.

Reply-to / Return-Path Email Name Defines the name that appears in email Quote 1.0 and Quote 2.0
headers as the Reply-to name.

Reply-to / Return-Path Email Address Defines the name that appears in email Quote 1.0 and Quote 2.0
headers as the Reply-to email.

Show Reverse Search Controls whether the Description/Part Quote 1.0 and Quote 2.0
Number search functionality is dis­
played. When set to TRUE, the function­
ality is displayed.

Secure Site for License Purchasing Defines the URL of a web page that is Quote 1.0 and Quote 2.0
secure for license purchasing.

SAP CPQ Setup and Administration Guide


638 PUBLIC General Settings
Name Description Quote engine

Unique Product Codes Determines whether product codes are Quote 1.0 and Quote 2.0
unique. When this parameter is set
to TRUE, the product part number is
treated as serial number, which means
that you can't have multiple items on
one or more quotes with the same
part number (the product part number
should be unique). If this parameter
is enabled, the part numbers for your
products shouldn't be static, but must
instead be resolved from formulas.

Unit of Measurement Indicates the unit used to measure Quote 1.0 and Quote 2.0
weight in the system. The choices are
GRAMS, LBS and KGS.

Try Formatting Report File Compares report Excel file columns and Quote 1.0 and Quote 2.0
formats their content accordingly (dec­
imals, date/time), depending on their
numerical pattern. It does not format
string content.

Try Formatting CSV Product Export Files Determines whether SAP CPQ arranges Quote 1.0 and Quote 2.0
the Product Export File content into col­
umns.

Export All Custom Table Data as Strings Determines whether SAP CPQ exports Quote 1.0 and Quote 2.0
by Default all custom table data and formats the
table content. When set to TRUE, all
data is treated as a string. For exam­
ple, enabling this parameter resolves
the problem of leading zeroes being re­
moved from spreadsheet files.

Available actions for Inactive Revisions Determines whether actions are availa­ Quote 1.0 and Quote 2.0
ble either for active or inactive revision.
When Based on status of ACTIVE revi­
sion, actions are available only for ac­
tive revisions. When Based on status of
EACH revision, actions are available for
inactive revisions as well.

Admin to receive PDA quote link Determines whether administrators re­ Quote 1.0 and Quote 2.0
ceive an email notification containing a
list of all approvers for the Quote and
their PDA approval links.

Enable ResponsAbility Integration Enables Users to integrate with Work­ Quote 1.0 and Quote 2.0
flow.

Users who are able to change Effective Determines which Users are able to Quote 1.0 and Quote 2.0
date when selecting products are change the start and end dates when
selecting products.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 639
Name Description Quote engine

Use recurring price and cost Determines whether recurring price Quote 1.0 and Quote 2.0
and cost fields are displayed. When
this application parameter is enabled,
recurring prices are shown for all prod­
ucts in the Catalog, in product details
and in product compare. This change
is not dependent on integrations with
other systems.

Use recurring periods If set to TRUE, when custom pricing Quote 1.0 and Quote 2.0
is the selected pricing mechanism for
a product, it is possible to select a
Recurring Price Period in the Pricing tab
in product administration.

Allow processing of document If set to FALSE, document generation Quote 1.0 and Quote 2.0
generation tag formulas with Cost field tags with formulas referencing the Cost
field from the quote are not processed
in the output of parsable attachments
enclosed within email notifications.

Users can only select project for the Determines whether Users can only Quote 1.0 and Quote 2.0
quote, not create new project select existing projects or create new
ones. When set to TRUE, Users can only
select existing projects, but not define
new projects. When set to FALSE, Users
can create new projects.

Users are able to create product Determines whether Users can create Quote 1.0 and Quote 2.0
favorites product favorites. If the parameter is
set to TRUE, Users are able to create
product favorites. Supported in both
Quote engines.

Show lead/prompting arrows (catalog, Indicates whether breadcrumbs that Quote 1.0 and Quote 2.0
configurator, shopping cart, document track the User’s trail pop up in the Cat­
generation) alog, Configurator, Cart and document
generation. Users can click each item
on the breadcrumbs trail to jump back
and forth.

SAP CPQ Setup and Administration Guide


640 PUBLIC General Settings
Name Description Quote engine

Show effective dates for price book When set to TRUE, the columns Valid Quote 1.0 and Quote 2.0
entries From and Valid Until are displayed in the
pricebook table entries. This parameter
is by default set to FALSE which means
that administrators can’t enter multi­
ple pricebook entries with the same
part number and price code. If set to
TRUE, multiple pricebook entries with
the same part number and the same
price code can be entered, in which
case different effective dates for the en­
tries should be defined.

Since duplicate values in a pricebook


may cause issues with pricing, before
changing this parameter to TRUE, ad­
ministrators should review their price­
books and remove duplicate entries.

Calculate price only based on part When set to FALSE, the prices are cal­ Quote 1.0 and Quote 2.0
number and ignore price code culated based on both the part number
and the price code of a pricebook entry.
However, if set to TRUE, the system dis­
regards the price code and calculates
prices only based on the part number of
the entry.

Audit Trail for Pricebooks If set to Audit Disabled, changes per­ Quote 1.0 and Quote 2.0
formed on pricebooks will not be log­
ged in Audit Trail Pricebooks .
On tenants with exceedingly large price­
books, performance may be slow when
updating pricebooks due to the size
of the pricebook or the update. Disa­
bling this parameter can improve the
performance in this scenario. The pa­
rameter is set to Audit Enabled by de­
fault.

URL for PULL web service when Enables admins to enter a URL that en­ Quote 1.0 and Quote 2.0
retrieving assets ables Users to retrieve assets or XML
files required for configuring products.

Show progress information to users Defines whether Users receive a report Quote 1.0 and Quote 2.0
when adding items to quote on their progress when they add items
to Quote.

Show progress information to users Defines whether Users receive a report Quote 1.0 and Quote 2.0
when sending data to CRM on their progress when they send data
to CRM.

Show progress information to users Defines whether Users receive a report Quote 1.0 and Quote 2.0
when arriving from CRM on their progress when they arrive from
CRM.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 641
Name Description Quote engine

Display List Of Recent Items To Users Defines whether Users can view a list of Quote 1.0 and Quote 2.0
their recent items. The list appears on
the left-hand side.

Display products in Recent Items Defines whether recently used products Quote 1.0 and Quote 2.0
are included in the List of Recent Items.

Display categories in Recent Items Defines whether recently used catego­ Quote 1.0 and Quote 2.0
ries are included in the List of Recent
Items.

Display generated documents in Recent Defines whether recently generated Quote 1.0 and Quote 2.0
Items documents are included in the List of
Recent Items.

Display quotes in Recent Items Defines whether recently created/used Quote 1.0 and Quote 2.0
quotes are included in the List of Re­
cent Items.

Ignore Standard CRM Mappings Defines whether SAP CPQ ignores Quote 1.0 and Quote 2.0
standard CRM Mappings. When set
to TRUE, SAP CPQ ignores standard
CRM Mappings and creates mappings
through IronPython scripts instead.
When set to FALSE, standard CRM
mappings override any script in the sys­
tem.

Display table for simple product rules Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
table for setting attribute dependency
rules in simple product administration.

Show Allow Option for Simple product Defines whether Users have the option Quote 1.0 and Quote 2.0
rules to allow a previously disallowed attrib­
ute dependency rule.

Copy Opportunity Id On New Revision Defines whether SAP CPQ copies the Quote 1.0 and Quote 2.0
Opportunity Id on each new revision
of the Quote. When set to FALSE, SAP
CPQ creates a new Quote without the
Opportunity Id.

Copy sales order ID when creating new When SAP CPQ is integrated with SAP Quote 1.0 only
revision ERP and this parameter is set to TRUE,
when a new revision of the quote is cre­
ated, the sales order ID of the quote is
copied to the revision. If set to FALSE,
the sales order ID is not copied to new
quote revisions.

Always reset filters on LoadQuote Defines whether existing quote search Quote 1.0 and Quote 2.0
filters are reset on each new session.
When set to FALSE, SAP CPQ does not
save quote search filters for the next
session.

SAP CPQ Setup and Administration Guide


642 PUBLIC General Settings
Name Description Quote engine

Allowed Content File Extensions Administrators need to enter all file ex­ Quote 1.0 and Quote 2.0
tensions that should be supported for
upload in the File Management and in
the Documents tab. Upload of other file
extensions cannot be performed.

Enable security check for excel files When enabled, it activates the secur­ Quote 1.0 and Quote 2.0
ity check for Excel files uploaded in
the Documents tab on quotes. The
Excel file is checked if its extensions
are .xlsx, .xls, .xltx, and .xlt.

Use responsive GUI Enables Users to work on a responsive Quote 1.0 only
GUI platform.

Responsive GUI per user Enables individual Users to switch to a Quote 1.0 only
responsive GUI platform. When set to
FALSE, Users use the GUI set by the
Use responsive GUI parameter.

Unique Company Code Defines whether Users can only add Quote 1.0 and Quote 2.0
companies with a unique company
code. When set to FALSE, added com­
panies do not need to have a unique
company code.

Disable timezone conversion for date Prevents date-only fields from display­ Quote 1.0 and Quote 2.0
field ing different values to users from differ-
ent timezones.

Check For 5-digit Zip Code Number For Determines whether Users need to en­ Quote 1.0 and Quote 2.0
Customers (USA format) ter a 5-digit zip code number in the Bill
To Details table on the Customer Info
page in order to save the page. When
set to NO, SAP CPQ allows Users to en­
ter another digit format and save the
page.

Use End User Role Determines whether the end user role is Quote 1.0 and Quote 2.0
used or not.

Fill BILL TO and SHIP TO data with Determines whether the Bill To and Quote 1.0 and Quote 2.0
default values Ship To fields are filled in with default
values.

Password Validity Period The number administrators provide Quote 1.0 and Quote 2.0
here determines for how many days a
password is valid for users after they
change or create them. The default
value of the parameter is 0, and if this
value isn’t changed, the password valid­
ity period is unlimited.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 643
Name Description Quote engine

Max Number of Days Before Password Specifies the number of days before Quote 1.0 and Quote 2.0
Expiration Warning is Shown Users receive a warning that their pass­
word needs to be changed. Password
expiration is set for each User in the
User/Groups drop-down menu. See the
chapter on Users for more information.

User Can Change Global Customers’ Determines whether Users can mod­ Quote 1.0 only
Data ify global customer data. When set to
NO, only administrators can change the
data.

When determining permission groups Defines whether SAP CPQ uses the Quote 1.0 and Quote 2.0
based on market, use Quote selected Quote-selected market. If the Quote-se­
market if available lected market is not available, SAP CPQ
uses the default market the User chose
on the User Page. When set to FALSE,
SSAP CPQ pulls the User’s default mar­
ket.

Send email to user when password is If set to TRUE, which is the de­ Quote 1.0 and Quote 2.0
changed fault value, users whose password is
changed will get an email informing
them about the password change. This
behavior applies whether the password
is changed in the application or via the
API.

Set boundary for two-digit year Enter the parameter value in the form Quote 1.0 and Quote 2.0
resolving of a two-digit number, so that the sys­
tem assumes the first two digits of a
year entered in the two-digit format to
be 19 (if the two-digit year is larger than
the parameter value) or 20 (if the two-
digit year is smaller than the parameter
value). If no values are entered for this
parameter, the boundary for resolving
two-digit years is 99 by default. For ex­
ample, if the value set for this parame­
ter is 20, and a two-digit year in the
system is 29, the year is resolved as
1929. However, if the two-digit year en­
tered in the system is 10 with the same
setting for this parameter, it is resolved
as 2010.

SAP CPQ Setup and Administration Guide


644 PUBLIC General Settings
Name Description Quote engine

Hide Obsolete Features This parameter hides the following fea­ Quote 1.0 and Quote 2.0
tures:

• Top Menu [page 632]


• Custom Category UI [page 633]
• Product Configuration Templates
[page 634]
• Product Details Templates [page
634]
• Products to Product Details Tem­
plates Mappings [page 635]
• Styles and Images section in
Branding [page 563]
• The application parameter Allow
Selection of Products that will be
added to Quote

Number of autocomplete results for • Defines how many suggestions are Quote 1.0 and Quote 2.0
attribute
displayed to users when they en­
ter a value for autocomplete attrib­
utes.
• The default number is 10. You can
enter a number within the range
10-100.

Check permissions for pre/post actions • If set to Yes, the system checks us­ Quote 1.0 and Quote 2.0
er's permissions for pre and post
actions and executes them accord­
ingly.
• If set to No, all pre and post actions
are executed without checking the
user's permissions.

Hide "From" Email Address and "Name" If this parameter is set to TRUE, the Quote 1.0 and Quote 2.0
from the Generated Document Email From and Name fields will not be visible
Form in SAP CPQ in the email form in the
last step of document generation. How­
ever, the email received displays the
from email address and the name (the
email is retrieved from the From Email
Address application parameter and the
name belongs to the user sending the
proposal).

Preselect the first attribute value on a If the parameter is set to TRUE, and a Quote 1.0 and Quote 2.0
product product is modified via the SimplePro­
ductAdministration SOAP API, the first
value of each product attribute is prese­
lected in the Configurator.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 645
Name Description Quote engine

Use attribute value code instead of value If the paramter is set to TRUE, during Quote 1.0 and Quote 2.0
in quote serialization XML quote serialization, the content node in
the XML file is populated with the at­
tribute value code, instead of the attrib­
ute value.

Search exact product part number for Setting it to TRUE speeds up the search Quote 1.0 and Quote 2.0
promotions of promotion products on the quote
in cases when their name is not de­
fined in Setup Pricing/Calculations
Promotions/Special Pricing , but
only their part number. The default
value is FALSE. Before changing the
value to TRUE, revise the existing pro­
motions and make sure that all prod­
ucts have unique part numbers. This
parameter is available only in Quote 1.0.

Prompt user to upgrade product aliases If set to TRUE, and the option Prompt Quote 1.0 and Quote 2.0
to new versions on opening the quote Users For Update to New Product
Versions is enabled in the Workflow for
a specific action, when the user exe­
cutes that action and new product ver­
sions are available for the items in that
quote, they will be prompted to upgrade
both regular items and items created
from product aliases to new versions.
Alternatively, if set to TRUE and the
option Automatically Update Items to
New Product Version is enabled in the
Workflow, both regular items and items
created from product aliases will be au­
tomatically upgraded to new versions.
However, if set to FALSE, in both of
these scenarios, only the the items that
aren't created for product aliases will
be affected by the options set in the
Workflow.

Users

Name Description Quote engine

Check For 5-digit Zip Code Number For Determines whether Users need to en­ Quote 1.0 and Quote 2.0
Customers (USA format) ter a 5-digit zip code number in the Bill
To Details table on the Customer Info
page in order to save the page. When
set to NO, SAP CPQ allows Users to en­
ter another digit format and save the
page.

SAP CPQ Setup and Administration Guide


646 PUBLIC General Settings
Name Description Quote engine

Validity Period for Password Creation The number administrators provide Quote 1.0 and Quote 2.0
Token here determines for how many hours
the URL for password creation sent to
a newly created user’s email address is
valid.

Use End User Role Determines whether the end user role is Quote 1.0 only
used or not.

Allow Admins to Set Temporary Allow administrators to create a tempo­ Quote 1.0 and Quote 2.0
Password rary password for users which must be
shared outside SAP CPQ. For details
see Create Temporary Password [page
131].

Fill BILL TO and SHIP TO data with Determines whether the Bill To and Quote 1.0 only
default values Ship To fields are filled in with default
values.

If the User Changes the Password It Will Specifies the number of days left until Quote 1.0 and Quote 2.0
be Valid Another the password expiration date.

Max Number of Days Before Password Specifies the number of days before Quote 1.0 and Quote 2.0
Expiration Warning is Shown Users receive a warning that their pass­
word needs to be changed. Password
expiration is set for each User in the
User/Groups drop-down menu. See the
chapter on Users for more information.

User Can Change Global Customers’ Determines whether Users can mod­ Quote 1.0 only
Data ify global customer data. When set to
NO, only administrators can change the
data.

When determining permission groups Defines whether SAP CPQ uses the Quote 1.0 and Quote 2.0
based on market, use Quote selected Quote-selected market. If the Quote-se­
market if available lected market is not available, SAP CPQ
uses the default market the User chose
on the User Page. When set to FALSE,
SAP CPQ pulls the User’s default mar­
ket.

Send email to user when password is If set to TRUE, which is the de­ Quote 1.0 and Quote 2.0
changed fault value, users whose password is
changed will get an email informing
them about the password change. This
behavior applies whether the password
is changed in the application or via the
API.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 647
Name Description Quote engine

Use Global User Id as Federation Lets administrators determine how Quote 1.0 and Quote 2.0
Identifier
users are mapped when they log in via
federation:

• FALSE – Federation ID field is dis­


played in user administration and
the value of that field, or the user­
name, are used to map users.

• TRUE - Global User Id field is dis­


played instead of Federation ID in
user administration and that ID is
used to map users.

Product Catalog

Name Description Quote engine

Allow Comparing In Catalog Enables Users to compare products in Quote 1.0 and Quote 2.0
the Catalog.

Allow Paging In Catalog Defines whether products are divided Quote 1.0 and Quote 2.0
into page sections with a minimum of 5
products per page and a maximum of
100 per page. When set to FALSE, all
products within a category are grouped
on one page.

Allow view details for simple products in Enables administrators to specify the Quote 1.0 and Quote 2.0
catalogue way product details are shown in the
Catalog.

Attribute comparation display option Enables administrators to permit Users Quote 1.0 and Quote 2.0
to compare various attributes and At­
tribute Values in products.

Catalog Loading Simple Products Optimizes the loading time of simple Quote 1.0 and Quote 2.0
products. When set to FAST, the loading
time is the shortest. If a formula is used
in product price or product description,
it is not parsed. Provided that no base
price is defined, Users see the formula
expression and 0 (zero), respectively.
The following example illustrates this
point.

SAP CPQ Setup and Administration Guide


648 PUBLIC General Settings
Name Description Quote engine

Hide product price in catalogue (classic If set to Yes, product price isn’t dis­ Quote 1.0 and Quote 2.0
design) played in the Catalog in the classic de­
sign.

Example

A sample product “Warranty”


with product code “Warr-1-yrs-
extended” has its description
defined this way:Discount
factor: <* TABLE ( SELECT
Discount FROM contracts
WHERE contract_name =
'Contract 12073' ) *>
<br/> * Visitor name:
<* VisitorName *> <br/>
* Product code: <*
ProductCode *>

Its price is defined as a formula:

<*Eval(100*<* TABLE
( SELECT Discount
FROM contracts WHERE
contract_name = 'Contract
12073' ) *>)*>

The base price is not defined.

When set to WITH PARSING, formu­


las are parsed but no product detail
is loaded. If the formula contains any
product detail tag, the product detail is
not retrieved even though the tag itself
is parsed.

In the example, both product descrip­


tion and price are parsed, but product
code is not retrieved and therefore is
not displayed.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 649
Name Description Quote engine

When set to WITH DETAIL PARSING, it


instructs SAP CPQ to load product de­
tails as well, so any product detail tag is
parsed along with other formulas. With
this parameter value, the sample prod­
uct is displayed within the Catalog.

When set to WITH FULL DETAIL NO


RULES PARSING, it instructs SAP CPQ
to load all the details related to the
product except rules.

To demonstrate this option, the prod­


uct “Warranty” is modified by adding
the attribute “Payment”. This attribute
has two values — “semiannually” and
“annually”, with their prices $30 and
$50, respectively. The pricing formula is
modified as well. It now reads the attrib­
ute price and sets it as a product price.
The pricing formula is:

<*PRICE(Payment)*>

In addition, a rule which selects the


attribute value is defined, so the pric­
ing formula picks the selected attribute

SAP CPQ Setup and Administration Guide


650 PUBLIC General Settings
Name Description Quote engine

value and assigns it as a product price.


The rule condition is:

The rule action is:

<*SELECTVALUES(Payment:2)*
>

Since this option does not parse rules,


the product price is 0 (zero).

When set to WITH FULL DETAIL


PARSING, it instructs SAP CPQ to load
and execute product rules. To demon­
strate, the very same product used for
the previous option is used again, but
this time, the price is calculated and ap­
plied to the product because product
rules are executed.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 651
Name Description Quote engine

Catalog Loading Configurable Products Optimizes the loading time of configu- Quote 1.0 and Quote 2.0
rable products. When set to any value
other than FAST, a product price and
the Add to quote checkbox are shown
in the Catalog. This way it is possi­
ble to add several configurable prod­
ucts at once in the Quote. When set
to FAST, the configuration state is un­
known and assumed to be incomplete,
so no prices are shown. In addition,
when Guided Selling Product Search re­
sults are shown, if Guided Selling Prod­
uct configuration applied to a catalogue
product makes it complete, price and
Add to quote will appear. Price pars­
ing and calculations for the Guided Sell­
ing Product results are controlled by
the Catalog Loading Attribute Based
Search.

Use Default Image Determines whether a default image is Quote 1.0 and Quote 2.0
shown for products. The default image
is assigned to products that do not have
an image.

Default Product Image Name Specifies the name of the file used as Quote 1.0 and Quote 2.0
the default product image. This image
file must exist in SAP CPQ’s images
folder.

Display Products Above Subcategories Takes Users directly to the Products Quote 1.0 and Quote 2.0
page and skips subcategories.

Show Quantity in Catalogue Enables Users to set quantity in the Quote 1.0 and Quote 2.0
Catalog. When set to TRUE, products
have an input field for quantity. When
Users select the Add to Quote check
box, the quantity is 1 by default. By en­
tering quantity in the Catalog, the Add
to Quote box is automatically selected.

Show customize button for simple Removes blank space in simple prod­ Quote 1.0 and Quote 2.0
products ucts. If there are no configurable prod­
ucts, the Customize button is hidden.

Hide categories within the catalog when Defines whether the Catalog is visible Quote 1.0 and Quote 2.0
tree navigation is available on the User side. When set to FALSE,
the Catalog is visible.

When users press 'Add Item' in quote, Defines whether Users are transferred Quote 1.0 and Quote 2.0
it will take them to the top catalog to the root catalog category when they
category click Add Item in the Quote. When set to
FALSE, Users are redirected to the last
category that was visited in the Catalog.

SAP CPQ Setup and Administration Guide


652 PUBLIC General Settings
Name Description Quote engine

Always reset filters in catalog Defines whether SAP CPQ sets fil- Quote 1.0 and Quote 2.0
ters (description search, part number
search) defined during the previous
session. When set to FALSE, SAP CPQ
sets description search by default.

Remain in Catalog after adding product Determines whether Users remain in Quote 1.0 and Quote 2.0
to the quote Catalog after adding a product to
Quote. When set to FALSE, Users are
directed to the Quote.

Show product image within the Quote Defines whether the image of the prod­ Quote 1.0 and Quote 2.0
summary in Catalog uct added to Quote pops up in Sum­
mary.

Show icon within the Quote summary Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
in Catalog to clarify whether product is small orange-colored cart icon in the
already in the Quote Summary window when a product is
already in the Quote. Note that this pa­
rameter is valid only when the Remain
in Catalog after adding product to the
quote parameter is set to TRUE.

Disable category rank sort for categories allows administrators to disable the Quote 1.0 and Quote 2.0
having more than rank sort in categories, depending on
the number of products they contain.
When set to 1000, categories contain­
ing more than 1000 products do not
display the rank sort.

Default Sorting in Catalog You can choose criteria other than Quote 1.0 and Quote 2.0
Name for default sorting in the Catalog
such as Part Number, Price, Product
Type Name and Rank by changing the
value of this parameter.

Configurator

Name Description Quote engine

Attribute Values per Page Defines the number of attribute values Quote 1.0 and Quote 2.0
that are displayed in Product Attributes.
If the number of available attributes ex­
ceeds this number, SAP CPQ creates
a new page under the Attribute Values
screen.

Configurator Columns Enables administrators to enter the Quote 1.0 and Quote 2.0
number of columns the Configurator
needs to contain.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 653
Name Description Quote engine

Do Not Recycle Sequence Determines whether a sequence starts Quote 1.0 and Quote 2.0
over once the last number is generated.
When set to TRUE, an error displays
when the product code is generated.

Image Attributes Show Labels Defines whether SAP CPQ displays an Quote 1.0 and Quote 2.0
image attribute label in the Configura-
tor.

Max Column Count for Image Attributes Enables administrators to enter the Quote 1.0 and Quote 2.0
maximum number of columns that are
taken up by image attributes. The value
is 3 by default. If administrators leave
the field blank or enter 0 and 1, the de­
fault value of 3 columns is applied.

Missing Attribute Image Refers to the attributes set up to be dis­ Quote 1.0 and Quote 2.0
played as images. The missing attribute
image is displayed if the image for that
attribute is unavailable. This image file
must exist in SAP CPQ’s images folder.

Responder (right) Area Width Enables administrators to determine Quote 1.0 and Quote 2.0
the area width of the responder.

Request Transfer to Item in Configurator Determines whether items are transfer­ Quote 1.0 and Quote 2.0
red in the Configurator.

Show quantity in responder Determines whether the quantity of Quote 1.0 and Quote 2.0
each product is shown in the responder.

Show product configuration template Defines whether SAP CPQ displays the Quote 1.0 and Quote 2.0
product configuration template in the
Configurator.

Show Attribute Prices within Determines whether attribute prices Quote 1.0 and Quote 2.0
Configurator are displayed to Users during configu-
ration. Prices are displayed in brackets
next to each attribute value. When set
to Simple, each attribute value has a
price displayed next to it. When set to
Relative, prices of the sibling attribute
values are shown relative to the price of
the selected value.

Configurator Lock Period Contains the number of minutes dur­ Quote 2.0 only
ing which the item actions Delete, Edit,
Copy, Refresh and Upgrade to New
Product Version are locked for user B
while the user A is already working on
the quote. This parameter is relevant
only for the parallel work on quotes in
the Quote 2.0 engine.

SAP CPQ Setup and Administration Guide


654 PUBLIC General Settings
Name Description Quote engine

Visual Style (Responder) Determines the default responder Quote 1.0 and Quote 2.0
styles that Users see. Administrators
can override these selections by choos­
ing a new style in the User Groups ad­
ministrative section.

Show dissallowed attributes in Defines whether SAP CPQ displays dis­ Quote 1.0 and Quote 2.0
configurator allowed attributes in the Configurator.

Allow attribute value to be listed as line Enables Users to list attribute values as Quote 1.0 and Quote 2.0
item even if its extended price is zero line items, even if their extended price is
(default behavior) zero.

ResponsAbility encript key Enables administrators to enter the Re­ Quote 1.0 and Quote 2.0
sponsAbility encrypt key that appears
in the Configurator.

ResponsAbility tenant enables administrators to enter the Re­ Quote 1.0 and Quote 2.0
sponsAbility tenant that appears in the
Configurator.

ResponsAbility URL enables administrators to enter the Re­ Quote 1.0 and Quote 2.0
sponsAbility URL that appears in the
Configurator.

ResponsAbility Username enables administrators to enter the Re­ Quote 1.0 and Quote 2.0
sponsAbility username that appears in
the Configurator.

ResponsAbility Password enables administrators to enter the Re­ Quote 1.0 and Quote 2.0
sponsAbility password that appears in
the Configurator.

Show processing icon in configuration, Defines whether a processing icon ap­ Quote 1.0 and Quote 2.0
quote and catalog pears in configuration, Quote and Cata­
log to indicate that SAP CPQ is execut­
ing the selected action.

Execute rules in child products (found in Defines whether SAP CPQ executes Quote 1.0 and Quote 2.0
attribute container) when adding parent rules in child products when Users add
product to the quote parent products to the Quote

Show Next and Previous buttons in Defines whether SAP CPQSAP CPQ Quote 1.0 and Quote 2.0
product configuration displays Next and Previous buttons in
product configuration.

Show Next button in Product when only Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
one tab is displayed Next button in product configuration
when only one tab is displayed.

Execute triggers when uploading Defines whether SAP CPQ executes a Quote 1.0 and Quote 2.0
attribute file attachment with the same trigger event when uploading a new at­
name tribute file attachment with the same
name as the previous attachment.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 655
Name Description Quote engine

Display child item total price in parent This parameter is by default set Quote 1.0 and Quote 2.0
item price breakdown to TRUE. When a parent-child config-
uration is opened and the user clicks
on a parent item in the Configuration
Tree, the price displayed for the child
item in the Configuration Summary will
be the total price of the child item in­
cluding the price of its child items,
instead of only the total price of the
child item. Additionally, if the param­
eter is enabled, a new CTX tag <*
TotalPriceWithChildItems
*> becomes available, used for retriev­
ing the total price of the product to­
gether with the total price of each of
that product’s child items. This parame­
ter affects both one-time and recurring
prices in the Catalog.

Allow attribute propagation when If set to Yes, attribute values are propa­ Quote 1.0 and Quote 2.0
attribute is disallowed gated from parent to child even if the
attribute is disallowed.

Minimum level of logged API entries in The levels of Log entries are: Info, Quote 1.0 and Quote 2.0
the Log Warning, Error and Fatal. API entries
with a lower level than the one selected
here will not be logged. For example,
if Warning is selected here, Info level
will not be logged, and Error and Fatal
levels will be logged. Fatal level is al­
ways logged. After the date defined in
the Minimum level selection for log API
entries valid until parameter, this selec­
tion is disregarded and all API entries
are logged as Warning.

Minimum level selection for log API On the date which is specified here, the Quote 1.0 and Quote 2.0
entries valid until value selected for the minimum level of
logging expires (that is, defaults to the
level Warning).

Display Product in Configuration Tree You can choose whether product Quote 1.0 and Quote 2.0
using: names or product part numbers are
displayed in the Configuration Tree.

SAP CPQ Setup and Administration Guide


656 PUBLIC General Settings
Shopping Cart and Quotes

Name Description Quote engine

When updating quote item, reapply Defines whether SAP CPQ reapplies the Quote 2.0 only
default discount default discount each time a Quote is
updated. When set to FALSE, Users can
change the multiplier in the Quote and
save the change. Note that you need to
set the appropriate Visual Style for the
multiplier to appear in the Quote.

When updating quote item, reapply Defines whether SAP CPQ reapplies the Quote 1.0 only
default discount/multiplier default discount/multiplier each time a
Quote is updated. When set to FALSE,
Users can change the multiplier in the
Quote and save the change. Note that
you need to set the appropriate Visual
Style for the multiplier to appear in the
Quote.

Allow Edit List Price on the Cart Determines the conditions under which Quote 1.0 only
the List Price is editable in the Quote.
When Users make adjustments in the
Cart Fields Administration, they can set
this parameter to one of the four availa­
ble values.

Allow Edit Cost on the Cart Enables Users to edit the Cost field in Quote 1.0 only
the Quote, provided the field is made
editable in the Cart administration.

When item’s cost is edited in the quote, Defines whether SAP CPQ disregards Quote 1.0 only
upon changing item’s configuration, Users’ edits of the Cost field value in the
cost will be recalculated Quote and calculates a new value based
on the configuration changes. When set
to FALSE, SAP CPQ does not retain
Users’ manual edits of the field value
following the configuration changes and
keeps the value defined in the Setup.

Always Refresh List Price on Reconfigure Defines whether SAP CPQ disregards Quote 1.0 only
Users’ edits of the List Price field value
in the Quote and calculates a new value
based on configuration changes (con­
figuration changes trigger list price for­
mula recalculations). When set to NO,
SAP CPQ does not retain Users’ man­
ual edits of the field value following the
configuration changes and keeps the
value defined in the Setup.

Allow Reordering Items in a Cart Allows Users to reorder items in the Quote 1.0 and Quote 2.0
Cart. When ALLOW PRODUCT SORT­
ING is set, Users can reorder main and
line items. When ONLY ALLOW MAIN
ITEM SORTING is set, Users can only
reorder the main items.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 657
Name Description Quote engine

Auto reconfigure cart Defines whether the Cart is reconfig- Quote 1.0 and Quote 2.0
ured. When set to YES, the Cart is re­
configured when the Ship To info is
changed.

Calculate Auto-Reconfigure only items Defines whether SAP CPQ automat­ Quote 1.0 and Quote 2.0
with modified ItemQuantity attribute ically reconfigures only those items
whose item quantity Attribute Value is
changed.

Owner of a Copied Quote will be Enables administrators to define the Quote 1.0 and Quote 2.0
owner of the copied Quote – the Owner
of the Original Quote or the User that
Made a Copy.

Default Visual Style (Shopping Cart/ Determines the default styles Users Quote 1.0 and Quote 2.0
Quote) see.

Generate PDF Determines whether a PDF is generated Quote 1.0 and Quote 2.0
during Quote generation. When set to
FALSE, a DOC file is generated.

LineItemInfo Propagate Qty From Main Propagates quantity only to the first- Quote 1.0 and Quote 2.0
Item level children.

Propagate Quantity to Nested Products Propagates quantity from the main item Quote 1.0 and Quote 2.0
to all its descendants.

The difference between application pa­


rameters, LineItemInfo Propagate Qty
From Main Item and Propagate Quantity
to Nested Products: the difference is
in the number of levels that quantity
is propagated. The first parameter,
LineItemInfo Propagate Qty From Main
Item, will propagate quantity only to
its children on the first level, while
Propagate Quantity to Nested Products
will propagate quantity from main item
to all of its descendants, that is too all
levels below. Take a look at the following
figure below to see what application pa­
rameters we are referring to.

LineItemInfo User Can Enter Quantity Enables Users to enter the number of Quote 1.0 and Quote 2.0
individual line items in the Quote.

MULTILEVEL System Determines whether an inheritance Quote 1.0 and Quote 2.0
structure is used in SAP CPQ. When
set to FALSE, user administration, man­
aging parent, approve parent, ordering
parent, etc. are disabled. These options
are also removed from the User Defini-
tion page.

SAP CPQ Setup and Administration Guide


658 PUBLIC General Settings
Name Description Quote engine

My Quotes Tab Name Contains the tab name that replaces Quote 1.0 and Quote 2.0
the My Quotes name set by default.

Other Quotes Tab Name Contains the desired tab name that re­ Quote 1.0 and Quote 2.0
places the Other Quotes name set by
default.

Shipping is Required Ensures that every Quote includes ship­ Quote 1.0 and Quote 2.0
ping.

After setting optional, variant Defines whether SAP CPQ recalculates Quote 1.0 only
and alternative items CPQ should the Quote Custom Field formulas when
recalculate quote custom fields Users classify items as optional, variant
and alternative.

Quantity Sign Enables administrators to select if the Quote 1.0 and Quote 2.0
value entered in the Quantity field is
ONLY NON-NEGATIVE, ONLY POSITIVE
or POSITIVE AND NEGATIVE.

Visual Style Determines the default styles Users see Quote 1.0 and Quote 2.0
for specific sections. Administrators
can override these selections by choos­
ing a new style in the User Groups sec­
tion.

Waiting For Approval Tab Name Enables administrators to enter an­ Quote 1.0 and Quote 2.0
other name for the Waiting for Approval
tab.

Action ‘Send Quote Xml’ sends quote Specifies the template for the XML Quote 1.0 and Quote 2.0
xml under the name document name that is sent to the FTP
server.

When action 'Send Quote Xml' is Contains the HTTP address to which an Quote 1.0 and Quote 2.0
executed, send xml to Http Address XML document is sent.

When action 'Send Quote Xml' is Contains the FTP address to which an Quote 1.0 and Quote 2.0
executed, send xml to FTP Address XML document is sent.

Ftp Path Contains the path SAP CPQ uses to ex­ Quote 1.0 and Quote 2.0
ecute transfers to the FTP server.

Ftp Username Contains the username used to gain ac­ Quote 1.0 and Quote 2.0
cess to the File Transfer Protocol.

Ftp Password Contains the password used to gain ac­ Quote 1.0 and Quote 2.0
cess to the File Transfer Protocol.

Action ‘Send BOM Xml’ sends quote xml Specifies a template for the XML docu­ Quote 1.0 only
under the name ment name that is sent to the FTP
server.

When action 'Send BOM Xml' is Contains the HTTP address to which an Quote 1.0 only
executed, send xml to Http Address XML document is sent.

When action 'Send BOM Xml' is Contains the FTP address to which an Quote 1.0 only
executed, send xml to Ftp Address XML document is sent.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 659
Name Description Quote engine

When Creating Quotes through API, Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
shipping method is required through API have to include a shipping
method.

When Creating Quotes through API, Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
customer roles are required through API have to include customer
roles.

When Creating Quotes through API, do Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
NOT require customer's StateAbbrev via API have to include customers’ state
abbreviation. When set to NO, Users
have to enter the state abbreviation in­
put node.

When Creating Quotes through API, do Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
NOT require customer's First Name via API have to include customers’ first
name. When set to NO, Users have to
enter the first name input node.

When Creating Quotes through API, do Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
NOT require customer's Last Name via API have to include customers’ last
name. When set to NO, Users have to
enter the last name input node.

When Creating Quotes through API, do Defines whether Users creating Quotes Quote 1.0 and Quote 2.0
NOT require customer's Email via API have to include customers’
email. When set to NO, Users have to
enter the email input node.

Recalculate cart in selected currency Controls the rounding of items in the Quote 1.0 and Quote 2.0
Quote and their sum. When set to ei­
ther None or Fix Items, the prices are
rounded to the nearest whole number.

Apply Taxes on Shipping Defines whether taxes are applied to Quote 1.0 only
shipping.

Roll-Up Cart Items Enables an additional numbering Quote 1.0 and Quote 2.0
scheme for items which support roll-up.

Include child items set as 'Optional' in Determines whether SAP CPQ includes Quote 1.0 and Quote 2.0
Rolled-Up price and cost calculations optional child items in rolled-up price
and cost calculations.

Display Item Type column Defines whether the Quote includes the Quote 1.0 and Quote 2.0
Item Type column. Line items are op­
tional, variant or alternative.

Place order email Subject Displays the email subject of the order. Quote 1.0 and Quote 2.0

Place order “From” email address Displays the default email address from Quote 1.0 and Quote 2.0
which the order is sent.

Override Default Place Order Email Defines whether SAP CPQ overrides the Quote 1.0 and Quote 2.0
default order email address.

SAP CPQ Setup and Administration Guide


660 PUBLIC General Settings
Name Description Quote engine

Go to customer info tab when arrives Directs Users to the Customer Info tab Quote 1.0 and Quote 2.0
from Sales Force even if customers are when they arrive from Salesforce. In
already mapped addition, the parameter enables Users
to check if mappings are properly con­
ducted and to change data if required.

Copy Opportunity Info on Copy Quote Defines whether SAP CPQ also copies Quote 1.0 and Quote 2.0
the Opportunity info when copying the
Quote.

Time out limit for inactive users in When a user opens a quote in parallel Quote 1.0 and Quote 2.0
simultaneous work with another user, after the time period
defined in this parameter passes, the
system no longer considers that the
user is working on the quote and the
user’s name won’t be displayed in the
parallel work alert on the quote. This
parameter is applicable only when there
are multiple users working on the same
quote in parallel.

Alert users about simultaneous work on Defines if users opening a quote are Quote 1.0 and Quote 2.0
the same quote notified that there are other users al­
ready working on the same quote. Since
SAP CPQ doesn't support parallel work
of multiple users on the same quote,
this parameter enables notifying users
there are other users working on the
quote before they make any changes.
The system checks if there are already
users working on the quote only when
the session of the second user starts.
Therefore, it is possible that the noti­
fication displays on the quote even af­
ter the first user has stopped working
on the quote. In that case, the second
users needs to reload the quote and the
notification will no longer display. Addi­
tionally, in this parameter you can de­
fine the format of the notification (link
in the quote or a pop-up message after
opening a quote).

Display Quote Tabs as Read-Only Defines whether Users can only read Quote 1.0 and Quote 2.0
Quote tabs. When set to NO, Users can
make changes to Quote tabs.

Generate Notification Attachments as Enables Users to attach only PDF docu­ Quote 1.0 and Quote 2.0
PDF ments to generated notifications. When
set to NO, Users can attach other docu­
ment formats.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 661
Name Description Quote engine

Optimize queries for customers and Speeds up the loading of the customer Quote 1.0 and Quote 2.0
other users quotes list page (the Shipping Info tab) and/or
Other Quotes tab (Load Quote). When
set to YES, only the first two pages are
loaded.

 Note
If this parameter is set to
Other Quotes, or Other Quotes
and Customer List Page, the

Number of Items field on Load

Existing Project/Quotation Other

Quotes doesn't show the exact


numer of quotes until users navi­
gate to the second page. Once they
do, the number of items displays
the exact number of quotes there
are in the tab.

Discount rules for parent items in the Enables administrators to select which Quote 1.0 and Quote 2.0
quote will be applied on fields are affected by the formulas for
calculating discounts in parent items in
the parent-child configurations.

Allow only one promotion per quote Enables Users to place only one promo­ Quote 1.0 and Quote 2.0
tion per Quote. When set to NO, Users
can place more than one promotion per
Quote.

Enable product search by part number Defines whether Users can search Quote 1.0 and Quote 2.0
in ‘Add Products’ section of the quote products by part number in the Add
Products section of the Quote.

Enable product search by product name Defines whether Users can search Quote 1.0 and Quote 2.0
in ‘Add Products’ section of the quote products by name in the Add Products
section of the Quote.

Enable product search by product Defines whether Users can search Quote 1.0 and Quote 2.0
name and description in ‘Add Products’ products by name and description in
section of the quote the Add Products section of the Quote.

Show Part Number as part of product Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
search results in ‘Add Products’ section product’s part number as a part of the
of the quote product search results in the Add Prod­
ucts section of the Quote.

Show Product Name as part of product Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
search results in ‘Add Products’ section product’s name as a part of the product
of the quote search results in the Add Products sec­
tion of the Quote.

SAP CPQ Setup and Administration Guide


662 PUBLIC General Settings
Name Description Quote engine

Show Product Description as part of Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
product search results in ‘Add Products’ product’s description as a part of the
section of the quote product search results in the Add Prod­
ucts section of the Quote.

Product Search On The Quote Can Find Defines whether SAP CPQ finds con­ Quote 1.0 and Quote 2.0
Configurable Products figurable products when searching for
products in the Quote Products Search.

Product Search On The Quote Can Find Defines whether SAP CPQ finds prod­ Quote 1.0 only
Product Favorites uct Favorites when Users search for
products in the Quote Products Search.

Define prefix for generated document Enables administrators to define the Quote 1.0 and Quote 2.0
name name prefix of the document generated
by SAP CPQ.

Define suffix for generated document Enables administrators to define the Quote 1.0 and Quote 2.0
name name suffix that appears by default on
generated documents.

Name of the Document Template to Enables administrators to enter the Quote 1.0 and Quote 2.0
be automatically generated (custom name of the Document Template that
action) is automatically generated.

Share document customizations Enables administrators to share all cus­ Quote 1.0 and Quote 2.0
tomizations during Quote document
generation among all Users for each
Quote. When set to FALSE, all custom­
izations are stored only for the User
making these customizations. If mul­
tiple Users work on one Quote, cus­
tomizations are saved only for each
individual User. Users working on one
Quote cannot see each other’s custom­
izations. When set to TRUE, customiza­
tions are shared between all Users.

Display floating widget for Customize Defines whether SAP CPQ displays a Quote 1.0 and Quote 2.0
template page floating widget for the Customize tem­
plate page.

Display actions for Customize template Defines whether SAP CPQ shows ac­ Quote 1.0 and Quote 2.0
page on the bottom of the page tions for the Customize template page
at the bottom of the page.

Upload Project Summary Template (xls Enables administrators to upload a Quote 1.0 and Quote 2.0
file) project summary template.

Quotes For Project Approval and Change Enables administrators to choose which Quote 1.0 and Quote 2.0
Of Status Action Quotes are identified for Project Appro­
val and Change of Status Action.

Include Change Status Action With Defines whether the Change Status ac­ Quote 1.0 and Quote 2.0
Submit Project For Approval tion is included when a project is sub­
mitted for approval. When set to Com­
bined (Default), the Change Status Ac­
tion is included with the Submit Project
for Approval.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 663
Name Description Quote engine

Reset Quote Expiration Date on New Defines whether SAP CPQ resets the Quote 1.0 and Quote 2.0
Revision existing value of the Quote expiration
date on each new revision.

Save quote custom fields values when Defines whether values entered in Quote 1.0 and Quote 2.0
changing tabs quote custom fields are saved when the
user changes tabs.

Reconfigure products during document Enables SAP CPQ to collect the latest Quote 1.0 and Quote 2.0
generation product and configuration data so that
the data can be used during document
generation.

Users can see previously generated Defines whether Users can see docu­ Quote 1.0 and Quote 2.0
documents ments that were previously generated
in the Quote.

Allow users to download documents Defines whether Users can download Quote 1.0 and Quote 2.0
that have been generated for templates documents generated for templates
that have been deleted that have been deleted.

Allow users to download documents Defines whether Users can download Quote 1.0 and Quote 2.0
that have been generated prior to CPQ documents generated prior to the Janu­
2012 January release ary 2012 release.

When List price is zero, discount will be Defines whether SAP CPQ sets the dis­ Quote 1.0 only
set to zero count to zero when the list price is set
to zero.

When quote is copied, new quote Defines whether new Quote items re­ Quote 1.0 and Quote 2.0
items will keep same identifiers(guid) as tain identifiers (guid) of the original
original quote Quote when the Quote is copied.

Display quote number and customer Defines whether SAP CPQ displays the Quote 1.0 and Quote 2.0
name in the quote header Quote number and customer name in
the Quote header

SAP Export XML template Enables admins to select a template Quote 1.0 and Quote 2.0
used during the export of a SAP CPQ
Quote to SAP.

Show copy item, delete item and refresh Defines whether SAP CPQ displays Quote 1.0 and Quote 2.0
item actions for child products in the these actions for child products in the
quote for Parent/Child System Products Quote for Parent/Child System Prod­
ucts.

Populate customer role with company Defines whether SAP CPQ fills out the Quote 1.0 and Quote 2.0
info based on company/customer code customer role field with company info
based on the company/customer code
info.

Automatically save quote on custom Defines whether the quote is automati­ Quote 1.0 and Quote 2.0
field change cally saved every time a custom field is
changed.

Automatically save Cart Comment on If enabled, changes made in the Cart Quote 1.0 and Quote 2.0
clicking outside that field Comment quote field are automatically
saved after the user clicks outside that
field.

SAP CPQ Setup and Administration Guide


664 PUBLIC General Settings
Name Description Quote engine

Hide Transparent Background for IE8 Defines whether SAP CPQ hides the Quote 1.0 and Quote 2.0
transparent background for the IE8
browser.

Send automatic notification when quote Defines whether SAP CPQ sends an Quote 1.0 and Quote 2.0
is reassigned automatic notification each time the
Quote is reassigned.

Enable quote custom field calculation Defines whether SAP CPQ conducts a Quote 1.0 and Quote 2.0
ranking Quote custom field calculation. This is
done in the order of a hierarchical se­
quence of the custom fields determined
by the User.

Fire event “Quote custom field change” Determines whether the Quote custom Quote 1.0
only on changes performed by user field change action is triggered only
when Users make changes in the Quote.
When set to FALSE, the Quote custom
field change is triggered by a script.

Postcode lookup type Enables Users to use a postcode lookup Quote 1.0 and Quote 2.0
software to search for a postcode.

International postcode anywhere WS Specifies the URL Users can use to Quote 1.0 and Quote 2.0
URL search for the required postcode.

Postcode anywhere account code Specifies the account code which ena­ Quote 1.0 and Quote 2.0
bles Users to use the international post­
code anywhere.

Postcode anywhere license key Specifies the license key which enables Quote 1.0 and Quote 2.0
Users to use the international postcode
anywhere.

Display Quotes In Last Days Shows all Quotes created within a Quote 1.0 and Quote 2.0
specified number of preceding days set
by the administrator.

Show both user quotes and other Determines whether SAP CPQ displays Quote 1.0 and Quote 2.0
quotes on the 'Other Quotes' Tab user Quotes and other Quotes in the
Other Quotes tab.

Inherit Only Product Type Determines whether child items inherit Quote 1.0 and Quote 2.0
their product type from their parent and
whether line items inherit their product
type from the main item.

Use Additional Logging For Email Enables administrators to track the sta­ Quote 1.0 and Quote 2.0
Notification tus of email notifications in the log.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 665
Name Description Quote engine

Heading style used in generated Allows administrators to control the Quote 1.0 and Quote 2.0
documents heading styles used in the document.
Selecting Use destination styles ap­
plies the heading style of the first sec­
tion to all sections. Selecting Keep
source formatting allows each sec­
tion to maintain its individual heading
style. If Sections will inherit formatting
(header,footer etc.) from first section
in the template is active in Setup
Document Generation Templates Edit
(a multisection template) Sections ,
and Keep source formatting is the se­
lected value for this parameter, sec­
tions of the document inherit header
and footer formatting from the first sec­
tion of the template, but keep their own
individual heading styles. This parame­
ter is available only for the new docu­
ment generation engine.

Type of break used in generated Allows administrators to override the Quote 1.0 and Quote 2.0
documents default breaks between the sections
of the document and to apply the se­
lected type of break instead. Admin­
istrators can choose between the fol­
lowing breaks: Paragraph break, Page
break, Column break, Section break
continuous, Section break new column,
Section break new page, Section break
even page, Section break odd page,
Line break. This parameter is available
only for the new document generation
engine.

Allow saving custom fields if Save Quote If this parameter is set to FALSE (which Quote 1.0 and Quote 2.0
is disabled is the default value) and the Save Quote
action is disabled in the workflow, the
Save and Continue actions are no lon­
ger available in quote tabs (such as
Additional Information and Customer
Info). If the parameter is set to TRUE,
the Save and Continue actions remain
available in quote tabs and custom field
changes can be saved when Save Quote
is disabled in the workflow.

Don't copy ship-to custom fields on If users copy a quote when this parame­ Quote 1.0 and Quote 2.0
quote copy ter is set to Yes, ship-to custom fields
aren’t copied to the new quote.

Execute pre/post actions on quote copy If users copy a quote when this parame­ Quote 1.0 and Quote 2.0
ter is set to Yes, pre and post actions at­
tached to the Copy action are executed.

SAP CPQ Setup and Administration Guide


666 PUBLIC General Settings
Name Description Quote engine

Set margin health image and color If set to No, the margin health image Quote 1.0 and Quote 2.0
based on Rolled Up Gross Margin and color are based on Manufactures
Gross Margin.

Optimize product type calculations on If set to Yes, product type calculations Quote 1.0 and Quote 2.0
adding items to quote are optimized for a better performance.

Enable Quote Expiration only after If set to Yes, the Quote Expiration action Quote 1.0 and Quote 2.0
expiration date ends is enabled only after the expiration date
ends. If set to No, the action is available
when there is less than a day before the
expiration date ends.

Allow adding configurable products to If set to Yes, users can add configura- Quote 1.0 and Quote 2.0
quote from quick search ble products to quote directly from the
quick search.

Make quote actions available on all tabs If set to TRUE, quote actions are visible Quote 1.0 and Quote 2.0
on all quote tabs. If set to FALSE, the
actions are visible only in the Quotation
tab.

On Edit Item execute preactions By default set to TRUE. Setting it to Quote 1.0 and Quote 2.0
attached to Add Item FALSE prevents actions attached as pre
actions to Add Item to execute when
the Edit Item action is triggered.

Before the 2202 release, actions at­


tached as pre actions to Add Item
would execute every time the Edit Item
action was triggered (this was the de­
signed system behavior). By introduc­
ing this parameter (set to TRUE by
default) to regulate this behavior, we
are avoiding breaking changes in exist­
ing client models. Before you decide to
change the parameter value to FALSE,
you should first revise your models and
confirm that the change won’t affect
your current models.

Any added child product will inherit item When set to TRUE, the item type of any Quote 1.0 only
type from the parent product on the child product added to a parent/child
quote item on the quote is the same as the
item type of the parent product. If set to
FALSE, the item type of the child prod­
uct is Base by default. In either case,
the child product item type is editable
on the quote. This parameter is valid
only for products created in SAP CPQ in
Quote 1.0 and doesn't affect the behav­
ior of products imported or synchron­
ized from back-end systems.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 667
Security

Name Description Quote engine

Allowed origins for the CORS filter When one or more domains are entered Quote 1.0 and Quote 2.0
in this field, only the API calls originat­
ing from those domains are allowed. In
all existing tenants, the preset value of
this field will be *, indicating that all API
calls are allowed. In all new tenants, the
preset value of this field will be the URL
address of that tenant, indicating that
only API calls originating from that ten­
ant are allowed.

To integrate SAP CPQ with other appli­


cations, if the parameter is not set to
*, it is necessary to fill out the field
with both the URL of your tenant, and
the URLs of the integrated applications
to enable API communication. Multiple
values are separated with a ;. If you en­
ter only one URL, don't use ; after it.

URLs that may Embed CPQ defines URLs that may embed SAP Quote 1.0 and Quote 2.0
CPQ using <frame>, <iframe>, <ob­
ject>, <embed> and <applet>. If the
parameter is empty or * is entered,
embedding is allowed for all URLs. To
prohibit embedding on all URLs, there
should be ‘none’ in the parameter. Also,
embedding is disabled if there is an in­
correct URL in the parameter. Admin­
istrators should set trusted domains
through the application parameter to
prevent framing from other domains.
The value of the parameter must be the
exact URL on which SAP CPQ is opened
in another application.

If SAP CPQ is integrated with Sales­


force via the package, this parameter
must be populated with *, this is the
only accepted value.

Permitted sources for JavaScript contains URLs to secure sources from Quote 1.0 and Quote 2.0
which JavaScript files can be used in
SAP CPQ. Introduced as part of the
Content Security Policy [page 823].

Permitted sources for stylesheets or contains URLs to secure sources from Quote 1.0 and Quote 2.0
CSS which stylesheets and CSS files can be
used in SAP CPQ. Introduced as part
of the Content Security Policy [page
823].

SAP CPQ Setup and Administration Guide


668 PUBLIC General Settings
Name Description Quote engine

Permitted sources for images contains URLs to secure sources from Quote 1.0 and Quote 2.0
which images can be used in SAP CPQ.
Introduced as part of the Content Se­
curity Policy [page 823].

Permitted sources for font resources contains URLs to secure sources from Quote 1.0 and Quote 2.0
which sont resources can be used in
SAP CPQ. Introduced as part of the
Content Security Policy [page 823].

Permitted sources that can be used as contains URLs to secure sources that Quote 1.0 and Quote 2.0
an HTML < form > action can be used in SAP CPQ as an HTML
<form> action. Introduced as part
of the Content Security Policy [page
823].

10.2 Deploy / Send Changes

The Deploy / Send Changes functionality enables you to send changes made in one SAP CPQ environment
(such as sandbox or test) to another (such as production).

For example, imagine that you made several changes to a product in your sandbox environment (for instance,
you added formula rules, attribute triggers and global scripts). After running tests and concluding that the
changes will not break your existing customizations in the production, you can use the Deploy / Send Changes
feature to send and deploy the product to the production environment.

To access this feature, go to Setup General Deploy Send Changes . The page that displays contains
the following tabs:

• Deployment Setup [page 698]


• Deployment Packages [page 670]
• Deployment Templates [page 699]

 Note

Products and attributes synchronized from the back end can’t be sent or deployed using this feature.
However, they can be referenced in the deployment package using their system ID. For example, if a
synchronized product is referenced in the container of a product bundle, this container will keep the
reference to that synchronized product after deployment, but that referenced product should already exist
in the target tenant. It is expected that these synchronized products exist in the target tenant and that they
are in the correct state (that is, that they have the same attributes as the synchronized products in the
source tenant).

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 669
10.2.1 Deployment Packages
Deployment packages enable you to combine one or more SAP CPQ objects (such as products, users,
templates, and so on) into a package, which you can then deploy to the target environment.

SAP CPQ objects that can be combined into a package are referred to as package components or change
types. Additionally, you can make changes to the deployment package as many times as needed, which makes
the deployment process more flexible. You can create a deployment package in SAP CPQ or upload an existing
deployment package. Details are provided in the following sections. Deploying an object that already exists in
the target environment overwrites the existing object.

 Note

When products, attributes, attribute values, categories, product types, tabs, configuration templates,
details templates, user types, shipping methods, global scripts, custom actions, custom calculations,
product-level scripts, or Responsive Design templates are deployed/sent to other environments, their
system ID remains the same. If an entity with several versions is deployed to another environment, all
versions will have the same system ID, and the entity can be filtered according to the creation dates of its
versions.

Create a Deployment Package

To define a deployment package, follow the steps below.

1. Go to Setup General Deploy / Send Changes Deployment Packages .


2. Click Create Package.
A new page displays.
3. In the Create New Package section, enter a name for the deployment package.
• (Optional) Enter a description of the deployment package in the dedicated fields.
• (Optional) If you’re deploying a Change Set [page 781] to the destination environment, select the
change set to which changes within that package are assigned in the Change Set dropdown list.
• In Destination Environment, select the target environment to which you want to deploy the package.
If you previously set up only one target environment on the Deployment Setup tab, this environment
is selected by default. Otherwise, you can choose your destination environment by selecting the
appropriate radio button.
4. In the Deployment Package Component section, select the SAP CPQ object you want to add to the package
from the Package Component dropdown list. There is no limit to the number of components you can add to
the deployment package.
• The Select Components radio button is selected by default when creating a deployment package. This
option allows you to select and add package components.
• The Apply Template radio button allows you to select and add a deployment template. Once you add a
template, the product components from the template display in the grid.
5. Click Add.
A Product Sending Checklist opens, corresponding with the component you have previously chosen. Click
on a specific component in the list below to see the next step.

The following is a list of package components that can be added to the deployment package and deployed.
Click the appropriate link to learn how to add a particular component.

SAP CPQ Setup and Administration Guide


670 PUBLIC General Settings
• Deploying Approval Rules [page 673]
• Deploying Cart Level Aggregates [page 674]
• Deploying Categories [page 675]
• Deploying CRM Integration [page 676]
• Deploying Currencies [page 677]
• Deploying Custom Actions [page 677]
• Deploying Custom Calculations [page 678]
• Deploying Custom Fields [page 679]
• Deploying Custom Tables [page 680]
• Deploying Global Scripts [page 682]
• Deploying Guided Selling [page 683]
• Deploying Item Actions Workflow [page 684]
• Deploying Markets [page 685]
• Deploying Notifications [page 686]
• Deploying Permissions [page 687]
• Deploying Products [page 688]
• Deploying Quote Item Custom Fields [page 690]
• Deploying Quote Tables [page 691]
• Deploying Responsive Templates [page 693]
• Deploying Territories [page 693]
• Deploying User Types [page 694]
• Deploying Workflow [page 695]

Once you add a package component, save your changes. The newly created package is displayed in the grid on
the Deployment Packages tab. You can perform the following actions on the package:

• clone
• edit
• download
• send
• delete

The grid displays the following columns: Package Name, Package Description, Source Environment, Destination
Environment, Comment, Status Date and Status. You can sort the columns in an ascending or descending order
by clicking the arrows next to the column name. Additionally, values in columns can be searched by entering a
query in the dedicated box and clicking on Search or by pressing Enter.

 Note

The system uses System ID to match entities in the source and the target environment. If there is an entity
with the same System ID but a different name in both environments, the system will display an error and
the deployment will be unsuccessful. The message in the user interface states the name of the entity that
caused the issue. To fix the issue, you should change the System ID or the name of the scripts. To update
the existing entity, adjust the name and System ID so they match. If you want to create a new entity in
the target environment, make sure that the name and the System ID of the entities are different in the two
environments.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 671
Upload a Deployment Package

Apart from creating a deployment package from start to finish, you can also upload an existing package from
your computer. Uploaded packages can be managed the same way as any packages made in SAP CPQ.

1. Go to Setup General Deploy / Send Changes Deployment Packages .


2. Click Upload Package.
A pop-up displays.
3. In the Comment field, enter a comment for the package. This field is mandatory.
4. Click Choose File to browse and select the package you want to upload.
5. Click Upload.
The uploaded package displays in the grid on the Deployment Packages tab. The status of the package is
Uploaded.

 Note

Only .zip files can be uploaded.

Decompressing a .zip file creates a folder of the same name. If you decompress a .zip file and subsequently
decide to compress it again in order to upload it back to SAP CPQ, you should open the folder, compress
the contents into a .zip file and upload the file. Compressing the folder (as opposed to opening the folder
and compressing the contents) prevents the .zip file from properly uploading.

Deploy a Package

To deploy a package to the destination environment, follow the steps below.

1. Click next to the package name in the current environment.


The package is automatically sent to the destination environment.
2. Log into the destination environment.
3. Go to Setup General Deploy / Send Changes Deployment Packages .
4. Find the package you sent to the destination environment.
The status of the package in the destination environment is Received, so you can search by Status to find
the package more easily.

5. Click next to the package name to deploy the package.


A new page displays.
6. In the Deployment Package Component section, define or change the deployment order of components:

1. Click next to the package component.


A pop-up displays.
2. In Deployment Order, enter a number to define the order in which the component is deployed.
3. Click Update.
7. In the Deployment Questionnaire section, answer additional questions about the package components. The
questions are specific to the package component that is being deployed.
8. Click Deploy.

SAP CPQ Setup and Administration Guide


672 PUBLIC General Settings
A message displays, notifying you whether the deployment was successful. The deployed package is
displayed in the grid and has the status Deployed. You can view the content of the deployed package by

clicking next to its name

 Note

The size limit for deployment packages is 200 MB.

10.2.1.1 Deploying Approval Rules

To add approval rules to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Approval Rules that will be sent, select the approval rules you want to add to the package.
1. All Approval Rules: all available approval rules are added to the package and sent to the destination
environment.
2. Selected Approval Rules: only the approval rules you select are added to the package and sent to the
destination environment.
To move approval rules from All Approval Rules to Selected Approval Rules, use the right arrow.
Alternatively, to remove approval rules from Selected Approval Rules, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing approval rules as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying approval rules, the following data is sent to the destination environment:

• approval rules
• custom approvers selection logic
• selected approvers
• delegation of approvals
• user types
• companies

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 673
 Note

New users will not be created in the destination environment for the selected approvers.

Related Information

Approval Rules [page 464]

10.2.1.2 Deploying Cart Level Aggregates

To add cart level aggregates to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Cart Level
Aggregates in Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Cart Level Aggregates that will be sent, select the cart level aggregates you want to add to the package.
1. All Cart Level Aggregates: all available cart level aggregates are added to the package and sent to the
destination environment.
2. Selected Cart Level Aggregates: only the cart level aggregates you select are added to the package and
sent to the destination environment.
To move aggregates from All Cart Level Aggregates to Selected Cart Level Aggregates, use the right
arrow. Alternatively, to remove approval rules fromSelected Cart Level Aggregates, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing cart level aggregates as a package component displays in the grid on the
Deployment Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying cart level aggregates, the following data is sent to the destination environment:

• name
• expression

SAP CPQ Setup and Administration Guide


674 PUBLIC General Settings
Related Information

Cart Level Aggregates [page 378]

10.2.1.3 Deploying Categories

To add categories to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Categories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Categories, select the categories you want to add to the package.
1. All Categories: all categories are added to the package and sent to the destination environment.
2. Selected Categories: only the categories you select are added to the package and sent to the
destination environment.
Select the checkboxes next to the categories you want to add to the package.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing categories as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying categories, the following data is sent to the destination environment:

• categories
• images
• permissions
• parent categories

 Note

Subcategories need to be manually copied to the destination environment. In addition, if manually created
permission groups consist of users that exist in the destination environment, new users will not be created
in the destination environment.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 675
Related Information

Categories [page 98]

10.2.1.4 Deploying CRM Integration

To add CRM integration to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select CRM Integration in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Selected CRM Integration data, select the integration data you want to add to the package.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing CRM integration as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying CRM integration, the following data is sent to the destination environment:

• CRM objects
• custom field mappings (custom fields flagged as personally identifiable information and information with
suppressed logging retain these flags after the deployment)
• customer role mappings (customer standard fields are always flagged as personally identifiable
information)
• opportunity status
• CRM item mappings
• CRM quote

 Note

Pricebook market mappings, user mappings, CRM administrator account, CRM quote parameters and
general parameters need to be manually copied to the destination environment. In addition, all custom
fields mappings and customer roles mappings in the destination environment will be replaced by the new
mappings from the source environment.

SAP CPQ Setup and Administration Guide


676 PUBLIC General Settings
10.2.1.5 Deploying Currencies

To add currencies to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Currencies in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
5. Click Save.
The package containing currencies as a package component displays in the grid on the Deployment
Packages tab.
6. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying currencies, no data other than currencies is sent to the destination environment.

Related Information

Currencies [page 517]

10.2.1.6 Deploying Custom Actions

To add custom actions to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Categories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Action selection, select the custom actions you want to add to the package.
1. All Custom Actions: all available custom actions are added to the package and sent to the destination
environment.
2. Selected Custom Actions: only the categories you select are added to the package and sent to the
destination environment.
To move available custom actions to Selected Custom Actions, use the right arrow.
Alternatively, to remove custom actions from Selected Custom Actions, use the left arrow.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 677
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing custom actions as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying custom actions, the following data is sent to the destination environment:

• name
• system ID
• placement
• primary flag
• image
• conditions tied to a custom action
• script

 Note

When custom actions are deployed to other environments, the system ID remains the same. If an entity
with several versions is deployed to another environment, all versions will have the same system ID, and the
entity can be filtered according to the creation dates of its versions.

Related Information

Categories [page 98]

10.2.1.7 Deploying Custom Calculations

To add custom calculations to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Categories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Selected Custom Calculations, select the custom calculations you want to add to the package.
1. All Custom Calculations: all available custom calculations are added to the package and sent to the
destination environment.

SAP CPQ Setup and Administration Guide


678 PUBLIC General Settings
2. Selected Custom Calculations: only the custom calculations you select are added to the package and
sent to the destination environment.
To move available custom calculations to Selected Custom Actions, use the right arrow.
Alternatively, to remove custom calculations from Selected Custom Actions, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing custom calculations as a package component displays in the grid on the
Deployment Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying custom calculations, no data other than custom calculations is sent to the destination
environment.

Related Information

Categories [page 98]

10.2.1.8 Deploying Custom Fields

To add custom calculations to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Categories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Select Custom Fields that will be sent, select the custom fields you want to add to the package.
1. All Custom Fields: all available custom fields are added to the package and sent to the destination
environment.
2. Selected Custom Fields: only the custom fields you select are added to the package and sent to the
destination environment.
To move available custom fields to Selected Custom Fields, use the right arrow.
Alternatively, to remove custom fields from Selected Custom Actions, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 679
The package containing custom fields as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying custom fields, the following data is sent to the destination environment:

• custom fields (custom fields flagged as personally identifiable information and/or custom fields with
suppressed logging of values retain these flags after the deployment process).
• user types
• attributes (attributes flagged as personally identifiable information and/or attributes with suppressed
logging of values retain these flags after the deployment process)
• tabs

 Note

Quote custom tabs need to be manually copied to the destination environment.

Related Information

Custom Quote Fields [page 360]

10.2.1.9 Deploying Custom Tables

To add custom tables to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Categories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Table selection, select the custom tables you want to add to the package.
1. All Custom tables: all available custom tables are added to the package and sent to the destination
environment.
2. Selected Custom tables: only the custom tables you select are added to the package and sent to the
destination environment.
To move available custom fields to Selected Custom tables, use the right arrow.
Alternatively, to remove custom fields from Selected Custom tables, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.

SAP CPQ Setup and Administration Guide


680 PUBLIC General Settings
6. Click Save.
The package containing custom tables as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

 Note

Custom tables flagged as personally identifiable information and/or information with suppressed logging
retain these flags after the deployment process.

Data Sent to the Destination Environment

When deploying custom tables, no data other than custom tables is sent to the destination environment.

 Note

The maximum size limit of custom tables that are sent to the destination environment is 20MB.

 Note

If you are deploying a custom table to an environment that already contains a table with the same name,
the outcome depends on whether you select Yes (all Quote tables will be updated) or No in the deployment
questionnaire. If you select Yes, and a table with the same name already exists, the existing table is deleted
and the new table with the same name is inserted. However, if you select No, existing tables aren't updated
and new tables aren't created.

Access Rights

On source environments, you can:

• Create deployment packages containing custom tables if the visibility of those tables is enabled for you
with the Access Rights feature.
• Send packages containing those custom tables to target environments.

On target environments you can:

• Deploy packages containing custom tables only if you have editing access rights for them.
• Create or update the existing custom tables from the package if you have editing access rights for custom
tables. To do this, the visibility of custom tables needs to be granted to you with the Access Rights feature.
If the package contains custom tables you can’t see, it can’t be deployed.

Related Information

Custom Tables [page 102]

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 681
10.2.1.10 Deploying Global Scripts

To add global scripts to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. On the Scripts tab, define a name for the package component in the Name field.
You can view the events that are attached to global scripts on the Events tab.
3. (Optional) In Description, enter a description for the package component.
4. In Script Selection, select the scripts you want to add to the package.
1. All Scripts: all available scripts are added to the package and sent to the destination environment.
2. Selected Scripts: only the scripts you select are added to the package and sent to the destination
environment.
To move scripts to Selected Scripts, use the right arrow. Alternatively, to remove approval rules from
Selected Scripts, use the left arrow.
5. For each script in Selected Scripts, select which version of the script is sent to the destination environment.
1. Click on the script.
Available versions of the script display in the Scripts Sending Checklist, and the active version is
preselected.
2. Select the checkboxes next to the versions you want to send.
Hover over the script version to view its content.
The most recent script version you select in the source environment will be active in the destination
environment.
6. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
7. Click Save.
The package containing approval rules as a package component displays in the grid on the Deployment
Packages tab.
8. Deploy the package as explained in Deployment Packages [page 670].

On the destination environment, in Setup Develop Global Scripts , locate the script you deployed and

click to view it.

On the History tab, you can see when the script was created and on what environment, as well as whether there
are various versions of the script. You can also view description changes for each version in the Description
column.

Data Sent to the Destination Environment

When deploying approval rules, the following data is sent to the destination environment: page: select

• scripts
• events
• script history

SAP CPQ Setup and Administration Guide


682 PUBLIC General Settings
Related Information

Approval Rules [page 464]

10.2.1.11 Deploying Guided Selling

To add guided selling products to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package.
The name of the package component is automatically added as a prefix to each guided selling product
name in the package, making it easier to discern which products belong to which package component.
You can view the events that are attached to global scripts on the Events tab.
3. (Optional) In Description, enter a description for the package.
4. In Guided Selling Product, click Add Product.
A pop-up appears, displaying all guided selling products in the system.
1. Select the checkboxes next to the guided selling products you want to add
2. Click Add Selected.
The selected guided selling products are displayed in Guided Selling Product.
5. Click Checklist next to each selected guided selling product to view the Product Sending Checklist for the
product in question.
6. (Optional) In Product Sending Checklist, deselect the items you want to exclude from the package.
Rules, messages, images and styles, scripts and shipping methods can be safely excluded from the
package.
7. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
8. Click Save.
The package containing guided selling products as a package component displays in the grid on the
Deployment Packages tab.
9. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying guided selling products, the following data is sent to the destination environment:

• product name
• product description
• product part number
• permissions and effectivity dates
• additional formulas

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 683
• configuration layout (tabs, order of attributes)
• responder layout
• product details layout
• rules (you can choose not to send them)
• messages (you can choose not to send them)
• images and styles (you can choose not to send them)
• scripts (you can choose not to send them)
• attributes (attributes flagged as personally identifiable information and/or information with suppressed
logging retain these flags after the deployment process)
• attributes values
• categories
• product types
• user types
• shipping methods (you can choose not to send them)
• replacement products

 Note

Container attributes are sent to the destination environment for all newly created containers. However,
if you make changes to the existing container attributes, you will have to manually update them in the
destination environment.

Related Information

Guided Selling [page 95]

10.2.1.12 Deploying Item Actions Workflow

To add item actions workflow to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Select item actions workflow per tab, select the e item actions you want to add to the package.
1. My Quotes: item actions defined for the My Quotes tab are added to the package and sent to the
destination environment.
2. Waiting for approval: item actions defined for the Waiting for approval tab are added to the package and
sent to the destination environment.
3. Other Quotes: item actions defined for the Other Quotes tab are added to the package and sent to the
destination environment.

SAP CPQ Setup and Administration Guide


684 PUBLIC General Settings
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing item actions workflow as a package component displays in the grid on the
Deployment Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying item actions workflow, the following data is sent to the destination environment:

• item actions
• item actions workflow

 Note

New users will not be created in the destination environment for the selected approvers.

Related Information

Item Actions Workflow [page 477]

10.2.1.13 Deploying Markets

To add markets to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Markets in Package
Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
5. Click Save.
The package containing markets as a package component displays in the grid on the Deployment Packages
tab.
6. Deploy the package as explained in Deployment Packages [page 670].

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 685
Data Sent to the Destination Environment

When deploying markets, the following data is sent to the destination environment:

• markets
• market visibility
• user types
• companies
• currencies

 Note

If market visibility is defined for users that exist in the destination environment, new users will not be
created.

Related Information

Markets [page 519]

10.2.1.14 Deploying Notifications

To add notifications to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Notifications that will be sent, select the notifications you want to add to the package.
1. All Notifications: all available notifications are added to the package and sent to the destination
environment.
2. Selected Notifications: only the notifications you select are added to the package and sent to the
destination environment.
To move approval rules from Notifications to Selected Notifications, use the right arrow. Alternatively,
to remove approval rules from Selected Notification, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing notifications as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

SAP CPQ Setup and Administration Guide


686 PUBLIC General Settings
Data Sent to the Destination Environment

When deploying notifications, the following data is sent to the destination environment:

• notifications
• parsable attachments
• non-parsable attachments
• email lists
• user types

 Note

Users need to be manually copied to the destination environment.

Related Information

Notifications [page 439]


Notification Implementation [page 441]

10.2.1.15 Deploying Permissions

To add permissions to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Permissions in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Permission groups that will be sent, select the groups you want to add to the package.
1. All Permission Groups: all groups displayed in System Permission Groups are added to the package and
sent to the destination environment.
2. Permission Groups
Selected Permission Groups: only the permission groups you select are added to the package and sent
to the destination environment.
To move permission groups from System Permission Groups to Selected Permission Groups, use the
right arrow. Alternatively, to remove permission groups from Selected Permission Groups, use the left
arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package displays in the grid on the Deployment Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 687
Data Sent to the Destination Environment

When deploying permission groups, the following data is sent to the destination environment:

• custom permission groups


• user types
• companies
• markets
• brands

 Note

If manually created permission groups contain users specified in the destination environment, new users
will not be created in the destination environment. Additionally, permission groups that are set for some
company may not exist in the destination environment. In this case, permission groups that do not exist in
the destination environment will not be created.

Related Information

Permission Groups [page 138]

10.2.1.16 Deploying Products

To add products to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Product in Package
Component and click Add.
A new page displays.
2. In Name, define a name for the package.
The name of the package component is automatically added as a prefix to each product name in the
package, making it easier to discern which products belong to which package component.
3. (Optional) In Description, enter a description for the package.
4. In Select Product, click Add Product.
A pop-up appears, displaying all products in the system.
1. Select the checkboxes next to the guided selling products you want to add
2. Click Add Selected.
3. The selected products are displayed in Select Product.
5. From the Select version dropdown list, select a product version for each product
6. Click Checklist next to each selected product to view the Product Sending Checklist for the product in
question.
7. (Optional) In Product Sending Checklist, deselect the items you want to exclude from the package.
Rules, messages, images and styles, scripts and shipping methods can be safely excluded from the
package.

SAP CPQ Setup and Administration Guide


688 PUBLIC General Settings
8. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
9. Click Save.
The package containing products as a package component displays in the grid on the Deployment
Packages tab.
10. Deploy the package as explained in Deployment Packages [page 670].
11. In Deployment Questionnaire, select whether or not the product will be automatically activated in the
destination environment. If the No (default option) radio button is selected, the product will be inactive
in the destination environment and will not display in the catalog. In this case, you will need to find the
deployed product in Setup Products and make it active by enabling the Active toggle switch.

Data Sent to the Destination Environment

When products, the following data is sent to the destination environment:

• product name
• product description
• product part number
• permissions and effectivity dates
• additional formulas
• configuration layout (tabs, order of attributes)
• responder layout
• product details layout
• rules (you can choose not to send them)
• messages (you can choose not to send them)
• images and styles (you can choose not to send them)
• scripts (you can choose not to send them)
• attributes (attributes flagged as personally identifiable information and/or information with suppressed
logging retain these flags after the deployment process)
• attributes values
• categories
• product types
• user types
• shipping methods (you can choose not to send them)
• replacement products

 Note

Container attributes are sent to the destination environment for all newly created containers. However,
if you make changes to the existing container attributes, you will have to manually update them in the
destination environment.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 689
Related Information

Products [page 54]


Create Products [page 56]

10.2.1.17 Deploying Quote Item Custom Fields

To add quote item custom fields to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Quote Item Custom
Fields in Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Selected quote item custom fields, select the quote item custom fields you want to add to the package.
1. All quote item custom fields: all available quote item custom fields are added to the package and sent
to the destination environment.
2. Selected quote item custom fields: only the quote item custom fields you select are added to the
package and sent to the destination environment.
To move available quote item custom fields to Selected quote item custom fields, use the right arrow.
Alternatively, to remove quote item custom fields from Selected quote item custom fields, use the left
arrow.
5. In Quote layout permissions selection, select the quote layout permissions you want to add to the package
1. All quote layout permissions: all available quote layout permissions are added to the package and sent
to the destination environment.
2. Selected quote layout permissions: only the quote layout permissions you select are added to the
package and sent to the destination environment.
To move available quote layout permissions to Selected quote layout permissions, use the right arrow.
Alternatively, to remove quote layout permissions from Selected quote layout permissions, use the left
arrow.
3. Don’t deploy quote layout permissions: quote item custom fields are deployed without quote layout
permissions.
6. (Optional) In the Optional section, if you are deploying quote item custom fields sourced from quote or
custom tables and you want to also deploy those source tables, select the checkbox Quote Tables or
Custom Tables.
The selected type of tables is now deployed together with the quote item custom fields which reference
them.
7. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
8. Click Save.
The package containing quote item custom fields as a package component displays in the grid on the
Deployment Packages tab.
Quote item custom fields display in the user’s selected language. If a field hasn’t been translated to the
selected dictionary, the name in English displays with the QuoteLayout.Columns. prefix.

SAP CPQ Setup and Administration Guide


690 PUBLIC General Settings
9. Deploy the package as explained in Deployment Packages [page 670].

 Note

Quote item custom fields flagged as personally identifiable information and/or sensitive information retain
these flags after the deployment process.

Data Sent to the Destination Environment

When deploying approval rules, the following data is sent to the destination environment: page: select

• quote item custom fields


• quote layout permissions
• custom permission groups
• user types
• companies
• markets
• brands
• quote tables and custom tables (they are deployed if they are used as source tables for the deployed quote
item custom fields, and the checkbox Quote Tables or Custom Tables is selected in the Optional section)

 Note

The following data needs to be manually copied to the destination environment:

• quote custom tabs


• users (if manually created permission groups have users specified in them)
• quote tables (if they are referenced by a deployed custom field whose type is autocomplete attribute)
• custom tables (if they are referenced by a deployed custom field whose type is autocomplete attribute)

Additionally, if a deployed quote item custom field contains CTX tags, it is necessary to check the fields
included in the package, in case the formula contains fields that are not included by default.

Related Information

Quote Item Custom Fields [page 391]

10.2.1.18 Deploying Quote Tables

To add quote tables to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Quote Tables in
Package Component and click Add.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 691
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Table selection, select the quote tables you want to add to the package.
1. All Quote Tables: all available quote tables are added to the package and sent to the destination
environment.
2. Selected Quote Tables: only the quote tables you select are added to the package and sent to the
destination environment.
To move approval rules to Selected Quote Tables, use the right arrow. Alternatively, to remove approval
rules from Selected Quote Tables, use the left arrow.
5. In Sending Checklist, select the checkboxes for Actions, Validations or Permissions if you want to include
them in the package.
If you decide to deploy only one element (for example, Actions) of a quote table that does not exist on
the destination environment, the system will first create the table in the destination environment and then
create the action.
6. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
7. Click Save.
The package containing quote tables as a package component displays in the grid on the Deployment
Packages tab.
8. Deploy the package as explained in Deployment Packages [page 670].

 Note

Quote tables flagged as personally identifiable information and/or information with suppressed logging
retain these flags after the deployment process.

Data Sent to the Destination Environment

When deploying quote tables, the following data is sent to the destination environment:

• quote tables
• attributes
• permissions - all permission groups are always sent to the destination environment. Additionally, by
selecting/deselecting the Permissions checkbox in the Sending Checklist, you control whether the
permissions related to the quote table that is being deployed will be included in the package.

 Note

When you deploy a quote table that is in a quote tab that only exists on the source environment, that
quote tab is automatically created on the target environment and can be found under General Tabs
in Setup. However, since custom quote tabs are not sent to the target environment, you must manually
activate it by adding it as a new tab in Custom Quote Tabs .

SAP CPQ Setup and Administration Guide


692 PUBLIC General Settings
Related Information

Quote Tables [page 347]

10.2.1.19 Deploying Responsive Templates

To add responsive templates to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Responsive
Templates in Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Template Selection, select the responsive templates you want to add to the package.
1. All Responsive Templates: all available responsive templates are added to the package and sent to the
destination environment.
2. Selected Responsive Templates: only the responsive templates you select are added to the package
and sent to the destination environment.
To move available responsive templates to Selected Templates, use the right arrow.
Alternatively, to remove responsive templates from Selected Templates, use the left arrow.
5. Click on a template in Selected Templates.
Checkboxes display in the Responsive Templates Checklist, allowing you to select the version of the
template you wish to deploy. The active version will be selected by default.
6. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
7. Click Save.
The package containing responsive templates as a package component displays in the grid on the
Deployment Packages tab.
8. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying responsive templates, the following data is sent to the destination environment:

• responsive templates
• responsive templates history

10.2.1.20 Deploying Territories

To add territories to the deployment package and deploy them, follow the steps below.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 693
1. Create a deployment package as explained in Deployment Packages [page 670]: select Territories in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
5. Click Save.
The package containing territories as a package component displays in the grid on the Deployment
Packages tab.
6. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying territories, no data other than territories is sent to the destination environment.

Related Information

Countries/Regions, States and Territories [page 700]

10.2.1.21 Deploying User Types

To add user types to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Approval Rule in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In User Types that will be sent, select the user types you want to add to the package.
1. All User Types: all available user types are added to the package and sent to the destination
environment.
2. Selected User Types: only the user types you select are added to the package and sent to the
destination environment.
To move approval rules from All user types to Selected user types, use the right arrow. Alternatively, to
remove approval rules from Selected user types, use the left arrow.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.

SAP CPQ Setup and Administration Guide


694 PUBLIC General Settings
The package containing user types as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

Data Sent to the Destination Environment

When deploying user types, the following data is sent to the destination environment:

• start category
• XSL and XSLT files

 Note

New users will not be created in the destination environment for the selected approvers.

Related Information

User Types [page 144]

10.2.1.22 Deploying Workflow

To add workflow to the deployment package and deploy them, follow the steps below.

1. Create a deployment package as explained in Deployment Packages [page 670]: select Workflow in
Package Component and click Add.
A new page displays.
2. In Name, define a name for the package component.
3. (Optional) In Description, enter a description for the package component.
4. In Select workflow per tab, select the workflow you want to add to the package.
1. My Quotes: workflow actions defined for the My Quotes tab are added to the package and sent to the
destination environment.
2. Waiting for approval: workflow actions defined for the Waiting for approval tab are added to the package
and sent to the destination environment.
3. Other Quotes: workflow actions defined for the Other Quotes tab are added to the package and sent to
the destination environment.
5. Click Add to Package.
The package component displays in the Deployment Package Component section on the Deployment
Packages tab.
6. Click Save.
The package containing workflow as a package component displays in the grid on the Deployment
Packages tab.
7. Deploy the package as explained in Deployment Packages [page 670].

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 695
Excluding Objects from Workflow Deployment

When deploying a workflow, administrators can exclude the following objects from the Workflow Sending
Checklist:

• custom actions
• notifications
• email lists

If custom actions are excluded from the checklist, notifications and email lists that are attached to the
excluded custom actions are not deployed. However, notifications and email lists attached to the standard
actions in the workflow are deployed in a regular way (unless notifications and email lists are excluded from
deployment).

Additionally, if custom actions are excluded from the checklist, the system decides whether to send the custom
actions attached as pre/post actions to the target environment depending on whether the actions already
exists in the source/target environments:

• if the same custom action is attached as a pre/post action in both the source and destination environment,
the action is sent to the destination environment (the existing action in the destination environment is
updated).
• if the same custom action exists on both environments, but it’s attached as a pre/post action only in the
source environment and not in the target environment, after deploying the workflow, the custom action will
be attached as a pre/post action in the target environment.
• if a custom action exists only in the source environment and it’s attached as a pre/post action, after the
deployment, the post action in the target environment will not have the custom action attached.

When deploying a workflow, administrators can choose between two buttons:

• Update all workflows - current settings are overwritten by the settings from the source environment.
• Only create new workflows - settings from the source environment are added to the current settings.

Data Sent to the Destination Environment

When deploying workflow, the following data is sent to the destination environment:

• statuses
• actions
• IronPython custom actions
• workflow permissions
• pre-actionspost-actions
• workflow conditions
• workflow flags
• notifications
• email lists
• required fields by workflow action

SAP CPQ Setup and Administration Guide


696 PUBLIC General Settings
Related Information

Workflow-Approvals [page 416]

10.2.1.23 Troubleshooting Common Issues During


Deployment

The two most common issues you can encounter during deployment are as follows:

• The shipping name already exists.


In this case, a shipping method with the same name, but different system ID, exists on both the source and
destination environment.
• The user type group name is already in use.
In this case, a user type with the same group name, but different system ID, exists on both the source and
destination environment.

To fix the issues, you need to change the system ID of the conflicted shipping method or user type in the source
environment.

To change the system ID of the shipping method:

1. In the source environment, go to Setup Pricing/Calculations Shipping .

2. Find the shipping in question and click to edit it.


A new page displays.

3. In Shipping Method System Id, click to change the system ID.


The field becomes editable.
4. Enter the system ID that matches the ID of the same shipping method in the target environment.
5. Click Save.

To change the system ID of the user type group name:

1. In the source environment, go to Setup Users User Types .


2. Find the group name in question and click the Edit button.
A new page displays.

3. In System ID, click to change the system ID.


The field becomes editable.
4. Enter the system ID that matches the ID of the same user type in the target environment.
5. Click Save.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 697
10.2.2 Deployment Setup

On the Deployment Setup tab, you connect your current environment, also known as source environment, to
the environments to which you want to deploy changes.

Set Up the Current Environment

To set up your current environment, follow the steps below.

1. In Current Environment, click Add Current Environment.


A pop-up displays.
2. Environment Type, URL (without http prefix) and Domain are prepopulated with the current environment
information.
3. Click Save.
Your current environment displays in the Current Environment section, where it can be edited or deleted.

Set Up the Target Environment

Users can send changes made in the current environment to a target environment. To connect your current
environment to a target environment, follow the steps below.

1. In Connected Environment, click Add Connected Environment.


A pop-up displays.
2. Select the destination environment type from the Environment Type dropdown list.
Test, Production and Sandbox environment types are available.
3. In URL (without http prefix), enter the URL of the destination environment without the http prefix (for
example, v60test.webcomcpq.com).
4. In Domain, enter your tenant name on the destination environment (for example, webcomqa).
5. The Username field is prepopulated with your current user ID.
6. The Password field is prepopulated with your current password.
7. Click Save.
The destination environment displays in the Connected Environment section.

 Note

You can connect multiple target environments to your current environment.

SAP CPQ Setup and Administration Guide


698 PUBLIC General Settings
10.2.3 Deployment Templates

Deployment templates enable you to create templates that contain as many products as you need. Templates
can be applied to any package and reused in future deployments. As a result, the deployment process is more
streamlined.

Create a Deployment Template

As an example, this procedure shows you the steps to create a deployment template named January
Deployment that contains the following products: Project Management, Software Evaluation and Software
Implementation.

1. Go to Setup General Deploy / Send Changes Deployment Templates .


2. Click Create Template.
A new page displays.
3. In Name, enter a name for the template (January Deployment).
4. Click Add Product.
A pop-up appears, displaying all available products.
5. Select the checkboxes next to the above-mentioned products: Project Management, Software Evaluation
and Software Implementation.
6. Click Add Selected.
The selected products display in the Select Product field.
7. Select a version for each product from the Select version dropdown list. Admins can create new product
versions (See Create Product Version [page 87] ) in the Products tab while leaving the original products
intact.
8. Click Checklist next to each product to view the Product Sending Checklist for the product.
9. On the Product Sending Checklist, deselect the checkboxes next to the items you want to exclude. For
example, exclude scripts from the checklist that is sent with the Software Implementation product.
10. Save the template.

You can inspect the content of the template by clicking next to the template name. Additionally, you
can download or delete the template.

Apply the Deployment Template

Applying the newly created template to a package will populate the package with the products listed in the
template.

1. Go to Setup General Deploy / Send Changes Deployment Packages .


2. Click Create Package.
3. In the Create New Package section, enter a name for the template (January).
4. In Destination Environment, select the environment you want to deploy the package to.
5. In the Deployment Package Component section, select Apply Template.
The Select Template dropdown list appears.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 699
6. Select the template you want to apply (January Deployment).
7. Click Add.
Products from the list you applied are listed in the package.
8. Click Save.
The package displays in the grid on the Deployment Packages tab.

9. Click to send the package to the destination environment.

Reapply the Template

If you edit the products which are a part of a previously created template and wish to send these product
changes to the destination environment, you can reapply the existing template to which these products belong,
instead of manually creating a completely new deployment package. Reapplying the template causes the
template to automatically obtain the latest product updates from SAP CPQ and populate the package with
those product updates.

The procedure for reapplying a deployment template is the same as the procedure for applying a deployment
template for the first time as described above. Since reapplying the template causes it to automatically obtain
product updates from SAP CPQ, you do not need to edit the template in any way.

The previous example shows how to create a deployment template named January Deployment that contain
the following products: Project Management, Software Evaluation and Software Implementation. For the current
example, imagine that in February you decide to attach a global script to the Project Management product.
Instead of manually creating a completely new package to send the product change to the destination
environment, you can reapply the template you created for January deployment. Doing that will cause the
template to automatically obtain the global script you added to the Project Management product and populate
the package.

To view the package deployed in January as well as the one deployed in February, go to the Deployment

Packages tab. In addition, a package can also be downloaded. To download a package, click next to the
package name.

 Note

When you download both packages, you can upload them to Git and compare their XML files to see what
changed.

10.3 Countries/Regions, States and Territories

To define countries/regions, states and territories in SAP CPQ, access the Countries/Regions, States and
Territories sections in Setup, respectively. The created entities will be available in the system when managing
some other features (for example, when defining users).

For countries/regions, it is required to define a three-letter abbreviation and a two-letter abbreviation, both of
which are mandatory. For states, you need to define only one abbreviation, with either two or three letters. Use
the abbreviations defined by the ISO standard .

SAP CPQ Setup and Administration Guide


700 PUBLIC General Settings
Names of countries/regions can be translated into different languages by clicking the translation icon in the
row of the country/region whose name you want to translate. On the following page, you can select more than
one language in the language dropdown menu. For every selected language, a field appears, where you are
prompted to enter a translation for the selected language country/region name.

If no other country is selected in the dedicated fields in the user interface, the system pulls the default
country defined in the application parameter Default Country/Region ( Application Parameters General
Parameters ). However, if making updates via scripting, and no country is defined in the script, the system
disregards the parameter and sets the United States as the country by default.

States

State abbreviations are not unique in the system, but they need to be unique within a country/region. You
can create multiple states with the same state abbreviation as long as the states pertain to different countries/
regions.

States are treated separately throughout SAP CPQ. When managing users, customers and companies in Setup,
the system displays only the states that pertain to the selected country/region.

Territories

When defining territories, you need to enter their name and system ID. The System id is generated
automatically from the territory name, but you can override it by clicking . Territories are treated separately
from countries/regions and states in the system. When managing users, for example, you can select any of the
territories, even if their actual geographical position is not within the selected country/region and state.

10.4 Tabs

Tabs are components that help organize information on some of the SAP CPQ pages. You can customize tabs
to display the information best suited to your business needs.

Creating a General Tab

General tabs are invisible until you use them in product configuration or in quote tab creation. To create a
general tab:

1. Go to Setup General Tabs .


A page with all existing tabs is displayed.
2. Click Add New.
Enter a name of the tab in Tab name.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 701
Tab system Id is automatically created based on the tab name you entered.
3. Enter the rank in Default tab rank.
The defined rank is applied to the tabs in the configurator and it determines the order in which they are
displayed. The default rank will also be applied to custom quote tabs until you override it with a more
specific rank.
4. (Optional) Select Show tab header in configurator.
If selected, the tab header is displayed in the product configurator.
5. Click Save.
The page with all existing tabs is displayed.

After you create a tab, you can use it for product configuration [page 74] and custom quote tab creation
(Create Quote Tab [page 397]).

10.5 Dictionaries

A dictionary in SAP CPQ contains a set of keys and their values that are applicable on tenant level. Keys are
only used in the code to reference key values that are visible in the application and refer mainly to UI content
(button labels, tooltips, etc.).

The system distinguishes two types of dictionaries:

• System - there is a system dictionary in SAP CPQ for each supported language. System dictionaries cannot
be changed and no keys can be added. You can only compare and export system dictionaries. Names
of system dictionaries appear in both English and the language of the dictionary (for example: Español /
Spanish). These dictionaries are uploaded by default on all new tenants. If your business model does
not require creating custom key/value pairs, you do not need to manage dictionaries at all. The system
dictionaries are managed and updated by the SAP CPQ team and administrators have no authorization to
change them.
Custom - dictionaries that administrators create. Custom dictionaries are best to be used for overriding key
values in default dictionaries. Administrators are advised not to change the existing keys or add new ones
as this will require additional configuration in SAP CPQ so that the system could recognize them. Custom
dictionaries are created in the following scenarios:
• If you need to translate custom messages on products. Custom product messages are defined in
product definition in the Rules and Messages tab and can be translated via custom dictionaries.
You need to enter the key for the message in the Message Text field inside {{}} brackets in product
definition. In the custom dictionary, the key is entered without the {{}} brackets. In case you are using
the dictionary to translate custom messages, the ISO code is the same as for the system dictionary.
• If you need to create region-specific dictionary for a language (for example English – Australia). In
this case, a new ISO code should be used (for example, the ISO code for the English language system
dictionary is EN, but for English – Australia, it will be EN-AU).

More details on dictionaries and how-to procedures are described in the following sections:

• Comparing Dictionaries [page 703]


• Exporting/Importing Dictionaries [page 703]
• Creating Custom Dictionary [page 703]
• Defining Key Values [page 704]
• Which Dictionaries will SAP CPQ Retrieve for my Users? [page 705]

SAP CPQ Setup and Administration Guide


702 PUBLIC General Settings
10.5.1 Comparing Dictionaries

You can compare two dictionaries to see the difference in values for the keys contained in both dictionaries.
After opening a dictionary, select in the top of the page the dictionary with which you wish to compare it. The
list automatically displays common keys with different values. The Comparison Dictionary Value (CDV) column
shows the key values in the target dictionary.

Related Information

Exporting/Importing Dictionaries [page 703]

10.5.2 Exporting/Importing Dictionaries

You can either export the current dictionary or both the current dictionary and the dictionary that is being
compared, if any. You can also filter and export the dictionary entries that have been updated after a specified
date.

You can access import and export functions by clicking the icon next to dictionaries in Setup General
Dictionaries .

The Filter records modified since field is located above the list of dictionary entries. You can specify a date by
either typing it in the field or by clicking the calendar icon and picking a date in the calendar pop-up. If you are
entering the date manually, bear in mind that it needs to be in the user format. Clicking Export visible items and
Export all items exports the items currently visible on the page and all items in the dictionary, respectively.

The system exports dictionary values in the XML format and the same format should be used when importing
values.

These options are available for importing dictionaries:

• Add New and Update Existing Values - keys in the source dictionary will be updated with the values of
matching keys in the import file and new keys will be added.
• Add non-existing keys - only the keys that exist in the import file and do not exist in the source dictionary
will be imported.
• Add newer values - for matching keys, if the value in the import file is more recent, it will replace the value in
the source dictionary. Also, new keys are added through this option.

10.5.3 Creating Custom Dictionary

To access all dictionaries on a tenant and manage custom dictionaries, go to General Dictionaries . The
page lists all dictionaries and lets you delete and edit dictionary details and pertaining keys.

1. Click Add New.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 703
2. Fill out these fields on the new page:
• Name - the name of the dictionary. This is the only required field.
• Rank - used for sorting out multiple default dictionaries.
• Type - prepopulated with Custom.
• Parent Dictionary - the new dictionary inherits values from the parent dictionary. The parent key/value
pairs are not copied directly to the child dictionary, but they are stored in the background. To override
the value of a key, copy it to the child dictionary and change its value.

• Visibility Condition - enter 1 to make a dictionary visible to all users. Otherwise, you can click to
restrict the visibility to certain users.
• Condition for Defaulting to this Dictionary - the system retrieves values from this dictionary if no default
dictionary is selected for a user on User Page and in user configuration. To set a dictionary to default,

enter 1 in the box. Alternatively, click to create a more complex condition.


• Language ISO Code - assign a language ISO code to the dictionary as defined by the ISO standard. You
need to assign language ISO codes here before you can successfully synchronize languages from SAP
Variant Configuration and Pricing. The language ISO code is used in the HTML for the value of the lang
attribute.
3. Click Save.
The dictionary is created and it displays on the last page of the dictionary list.

Related Information

Defining Key Values [page 704]

10.5.4 Defining Key Values

You can easily change values of custom dictionaries in General Dictionaries .

1. Click next to the dictionary you wish to update.


2. Use the search fields to filter dictionaries.
3. Click Add new key.
4. Define the key and its value.
Please note that for an optimized usage of dictionaries, you should only copy/paste the keys whose values
you wish to override in the existing dictionaries, not define new ones.
5. Click Save.
The key and its value are added to the list from which you can always delete and edit them. Dedicated
columns show you when each key was created and when it was last modified.

SAP CPQ Setup and Administration Guide


704 PUBLIC General Settings
Related Information

Which Dictionaries will SAP CPQ Retrieve for my Users? [page 705]

10.5.5 Which Dictionaries will SAP CPQ Retrieve for my


Users?

When users log into SAP CPQ, the system first checks which dictionary is set as default in Setup Users a
user Additional Settings tab. The values from that dictionary will be used for naming buttons, tooltips, etc.
Users can always override the administrator's selection in User Page User details Default Dictionary
by selecting a different dictionary. In that case, the system disregards the selection you made in Setup and
reaches for the default dictionary. When multiple dictionaries have a defaulting condition evaluating to TRUE,
the system will use rank to sort them out (the dictionary with the lowest rank is retrieved first). Aditionally, if
the default rule is not defined for a dictionary, SAP CPQ considers that the defaulting condition is fullfiled.

You can always limit which dictionaries display to users by applying the right visibility conditions.

Related Information

Comparing Dictionaries [page 703]

10.5.6 Translations

There are certain entities in SAP CPQ that you can create on your own, such as individual products and custom
fields. These entities can be translated so that administrators and users from other countries can understand
what they are and how they can be used.

• Products, Attributes, Categories, Guided Selling and Product Types in Product Catalog.
• Shipping and Promotions/Special Pricing in Pricing/Calculations.
• Document Generation Templates, Custom Fields, Search Fields and Column Headings in Quotes.
• User Custom Fields in Users
• Statuses, Actions, Item Actions and Approval Rules in Workflow/Approval
• Customer Custom Fields in Customers/Customer Roles
• Custom Actions in Develop
• Countries/Regions and Tabs in General

You can translate an item by clicking the Translate this item action next to it., then select a language, or
languages, you wish to translate it to.

 Note

Multilanguage translations can't be added to SAP CPQ via API. You need to add them manually.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 705
10.6 Manage Generated Documents

The Manage Generated Documents section gives administrators an insight into all the documents that their
underlying users have generated in SAP CPQ. The list of documents shows when the document was generated,
which user generated it, the name of the file and its size. Additionally, the Sent To Customer and the Viewed
By Customer columns show whether a document is sent to the customer and if the customer has viewed it,
respectively.

 Note

Non-administrative users with privileges for viewing and deleting generated documents, have the Manage
Generated Documents page available in user pages.

The only action that you can perform on generated documents is deletion:

• To delete an individual document, click the delete icon next to the file.
• To delete multiple documents at once, select the corresponding checkboxes in the Delete column and click
Delete Selected. Alternatively, click Select All to select all documents in the current page.
Clicking Delete All deletes all the generated documents in the application. You can switch to a different
page right away because the deletion process is handled in the background. This way administrators can
uninterruptedly manage other sections in Setup while the generated documents are being deleted. This
action does not delete the additional files.
To delete both the generated documents and the additional files, click Clean Up. This action is available
only to administrative users.

Related Information

Document Generation [page 152]


Manage Content Documents [page 192]
Create Document Generation Template [page 179]

10.7 File Management

File Management stores images and files that can be retrieved throughout Setup (when creating products,
categories, and so on).

You can upload files to the following folders:

• Product Images - images for products.


• Category Images - images for categories.
• Attribute Images - images for attributes.
• Actions - images for quote action icons.
• Lightning Actions - images for quote action icons in lightning branding [page 563].

SAP CPQ Setup and Administration Guide


706 PUBLIC General Settings
• Top Menu - images for icons in the top menu in the old SAP CPQ design.
• Additional Files - the only folder to which you can upload files other than images and reorganize them into
subfolders. You can retrieve files from this folder in responsive templates and through scripting.

To manage files (upload, download, copy, preview, and so on), access the Home tab. In the View tab, choose
how files display and whether the navigation pane with a list of folders shows up on the left.

 Note

The format of images that can be uploaded in File Management is set through the Allowed Image Extensions
application parameter.

<*DOMAIN*> Tag in File URLs

To determine your domain (tenant) name when constructing URLs for files uploaded to SAP CPQ, you can
use the <*DOMAIN*> tag. For example, to place the ChairProd image into a display-only text attribute
in the configurator, you need to use the following HTML code: <img src=”../mt/<*Domain*>/images/
productimages/Product1.png”/>. By using the <*DOMAIN*> tag, you don’t have to go back to every
field that contains a formula referring to images from the file system and manually replace the hard-coded
domain of the old environment with the name of the new environment. The system retrieves the domain name
automatically.

Upload Files [page 707]


Before you initiate the upload, click the destination folder to which you wish to upload the file in the
left-hand navigation pane.

10.7.1 Upload Files

Before you initiate the upload, click the destination folder to which you wish to upload the file in the left-hand
navigation pane.

Procedure

1. Click Upload.

The Upload Files window pops up.


2. Click Add….

A window for browsing your local computer displays.


3. Select the file for upload and click Open.

You can repeat this step to select multiple files. All files are listed in the Upload Files window.
4. Click Upload.

The progress bar visually shows the time remaining for upload.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 707
The file is uploaded to the selected folder.

10.8 Time Zones

If your company has departments in different countries/regions, in different time zones, or simply your users
are scattered around the world, SAP CPQ can be set up SAP CPQ to display information in their own time zone.

SAP CPQ administrators can set time zone globally - at the tenant level or at the user level. Once set globally,
the time zone is applied for each user. If some user needs different time zone it can be set by SAP CPQ
administrator, or by the user if they are allowed.

Setting Time Zone at tenant level

To set default time zone at the tenant level, go to Setup General Application Parameters , then under
“General Parameters” tab find the parameter “Default Time Zone” and make the desired selection. This will
apply the defined default time zone to all users.

Setting Time Zone at user level

As an SAP CPQ administrator you are allowed to set time zone for each user separately. You can decide
whether the user can change time zone on its own or not.

SAP CPQ Setup and Administration Guide


708 PUBLIC General Settings
Administrators can also set the time zone for multiple users in bulk - using the import/export feature. The user
import/export template contains two columns for this purpose: timezone and Allow timezone change.

In user import/export template there is a sheet labeled ”timezones”. This sheet contains information about
all SAP CPQ system timezones that you can enter in the sample template column Timezone under the users
sheet.

Users that are allowed to change their time zone can change it by selecting the desired time zone from the
drop-down list on the User Page.

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 709
Users that are not allowed to change their time zone by the administrator will have the user time zone field
disabled in the User Page.

When a user creates a quote, all date information will be presented in their selected time zone. When user goes
to the load quote page, they will see the list of quotes - their own and from the others. For each quote, ”Date
Created” field will be presented to the user is in their selected time zone.

Example
User1 has created the quote in PST time zone on 06JUL2016 at 23:57:16.

User2 is in CET time zone. User2 will see that User1’s quote was created on 07JUL2016 at 08:57:16.

The same rule applies for Date Modified field. Otherwise, you can disable timezone conversion for fields
which contain date-only information (to ensure that the same date is displayed to all users regardless of their
timezones) via General Application Parameters General Parameters Disable timezone conversion for
date field . Timezone conversion is always disabled for those fields in Quote 2.0.

SAP CPQ Setup and Administration Guide


710 PUBLIC General Settings
CTX Tags and Time Zones

Time zones are supported by the CTX tag. CTX Tag can be instructed to return the time zone value of a Quote
custom field that is of type Date.

CTX Tag Description

<*CTX( Date(09/13/2011).InUsertimezone)* Displays provided time in user time zone


>

<*CTX( Quote.CustomField(QuoteCustomFiel Displays value of QuoteCustomField in user time zone


d).InUsertimezone )*>

<*CTX(Quote.CurrentItem.CustomField(Quot Displays value of QuoteItemCustomField in user time


eItemCustomField).InUsertimezone)*> zone

Iron Python Scripting and Time Zones

Iron Python Scripting now exposes the timezone property in the IUser interface. It can be used in scripts to
ensure that the result of the script execution will be presented to the user in the selected time zone.
The next line of Iron Python code will return the users time zone and set the content of the custom field named
Quote message:

Quote.GetCustomField('Quote message').Content = User.timezone.Id

SAP CPQ Setup and Administration Guide


General Settings PUBLIC 711
11 Scripting

Administrators can manage scripts in Setup under Develop Global Scripts .

A global script in SAP CPQ is a custom piece of code written in IronPython and attached to a certain event.
When such an event occurs in SAP CPQ, the global script attached to it is executed in the system.

For each global script, you have access to script definition [page 712], overview of events [page 716] and the
script history.

Create a Script [page 712]


A script contains a series of commands that can be executed without being compiled. SAP CPQ
provides a user-friendly interface for administrators to create and manage scripts.

Global Script Events [page 716]


Global script events are events that happen on quotes and they trigger the scripts attahce dto them to
be executed in the system.

Custom Actions [page 720]


SAP CPQ offers flexible way to meet custom demands for various functionalities that are not part of
the standard software version. This is achieved by implementing custom actions – parts of code that
contain processing logic for appropriate functionalities.

Custom Calculations [page 722]


Administration for custom quote calculations can be found under SAP CPQ Setup Develop
Custom Quote Calculations .

Script Workbench [page 723]


Script Workbench is available for administrators to help them debug and develop their scripts. It can be
accessed through Scripts developing and editing page within SAP CPQ Setup, or from user view under
the top menu.

11.1 Create a Script

A script contains a series of commands that can be executed without being compiled. SAP CPQ provides a
user-friendly interface for administrators to create and manage scripts.

1. In Setup, access Develop Global Scripts .


2. Click Add New.
A page with three tabs displays:
• Script - for creating and editing scripts
• Events - for tying a script to an event
• History - for displaying all the versions of the script and the time and date of its creation/editing
3. Define Rule Name.
System ID is generated automatically.

SAP CPQ Setup and Administration Guide


712 PUBLIC Scripting
4. (Optional) Describe the script in Description.
5. Select Active if you wish the script to be active in the system.
6. Select Module to use the code in other scripts.
Scripts that have this option selected cannot be used independently, but only as a part of other scripts.
7. (Optional) Check CSRF Protection to add another layer of protection from CSRF attacks for global scripts
that are executed via the Custom API. If the checkbox is enabled, SAP CPQ checks whether a valid CSRF
token is provided in the API request for additional protection from unwanted attacks.
8. Define the start and end date of the script.
These fields are disabled if Module is selected.
The Modified by and Modified on are disabled and the system automatically populates them once the script
is saved.
9. In the Scripting Code section, choose the script engine type.
SAP CPQ currently supports IronPython for creating scripts.
10. (Optional) Select Force Proxy Generation to load and refresh the WSDL web services as the system does
not do it by default.
The checkbox needs to be selected only once when the script is saved for the first time.
11. Write your script in the Script box.
Use the instructions in the dedicated Scripting documentation. Also, take a look at the scripting general
guidelines [page 713].
12. Click Attach to Event.
The script is now saved and you are directed to the Events tab.

11.1.1 Scripting General Guidelines

Using IronPython in SAP CPQ is limited as the system does not support standard IronPython modules. You
cannot add external .NET and complex IronPython modules to SAP CPQ scripts. However, in basic user
scenarios, you can paste the content of a simple module (without dependencies on other modules) into the
SAP CPQ script module and the system will process it properly.

 Note

The flag ITrace.IsOn, which is available in scripting, indicates whether tracing is turned on or off. With the
help of this flag, users can organize the logic that is related to tracing and thus optimize script execution
time.

The screenshot below shows the interface when the script syntax is correct:

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 713
The following screenshots show the interface when a script contains errors:

 Note

The EventLog and ConsoleLog description in scripts can contain no more than 10000 characters.

SAP CPQ Setup and Administration Guide


714 PUBLIC Scripting
Saving Quotes on Events

The table below shows which elements of quotes are automatically saved after some events are triggered. The
data in the table is useful when creating scripts so you know when to include the Save action.

Events Custom Fields Line Items Product Types Totals Quote Tables

After adding Saved Saved Saved Saved


products to quote

After editing Saved Saved Saved Saved


products in quote

After deleting Saved


products from
quote

After copying Saved


products in quote

After changing
value of custom
fields

Quote creation

Quote edit Saved

On user Login

On customer
change

Document Sent To
Customer

On Quote Tab
Changed

On Involved Parties Saved Saved Saved Saved Saved


Changed

When Excel is
uploaded into a
Quote Table

Exceptions for Quote.Save() Pipeline Execution

When certain parts of a quote are changed, calculations need to be performed and changes saved. As this does
not require all events from the pipeline to be triggered, some of them can be skipped. This is determined by
the Quote.Save() parameter. This parameter is by default set to True, which causes the entire pipeline to be
executed whenever changes on quote are saved. If the Quote.Save() parameter is set to False, the following
events will not be triggered:

• Quote creation
• Before custom field calculation

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 715
• After custom field calculation
• Every time quote is changed
• When user is on quotation tab

Forbidden .NET Classes and Namespaces

The following .NET namespaces and classes are forbidden in IronPython scripts:

• System.IO
• System.Data
• System.Configuration
• Webcom.Configurator.Util.ConnectionStringProvider
• System.Environment
• System.GC
• System.Type
• System.Web.WebPages.Razor
• System.Reflection
• System.Web
• System.Diagnostics

If there are scripts that contain System import * and Webcom.Configurator.Util import * and any of the words
from the forbidden classes, the system disables saving scripts (for example, saving is disabled if there is
System import * and Data in the same script).

For troubleshooting, please contact the SAP CPQ Support team.

11.2 Global Script Events

Global script events are events that happen on quotes and they trigger the scripts attahce dto them to be
executed in the system.

Global Script Events


Execution time de­
Event name Subevent name scription Available in Quote 1.0 Available in Quote 2.0

Quote creation/edit Quote creation Immediately after a Yes Yes


quote is created

Quote edit After the action Edit Yes Yes


quote is executed.

Custom fields Before custom fields Before the formula is Yes No


calculation calculation
calculated.

SAP CPQ Setup and Administration Guide


716 PUBLIC Scripting
Execution time de­
Event name Subevent name scription Available in Quote 1.0 Available in Quote 2.0

After custom fields After the formula is Yes No


calculation
calculated.

Before adding products Before adding products Just before a product No Yes
to quote to quote
is added to quote
items.

Before updating Just before a quote No Yes


products in quote
item is updated from
the quote.

After adding products After adding products Each time an item Yes Yes
to quote to quote
is added. If several
items are added at
once (from catalog or
through adding items
in bulk), the scripts are
executed after the last
item (not after each
item is added).

After updating After a user finishes Yes Yes


products in quote
editing a product in the
quote.

After copying products After a user copies a Yes Yes


in quote
product in the quote.

After deleting products After a user deletes Yes Yes


from quote
an item in the quote.
If several items are
deleted at once, the
scripts are executed
after all items are de­
leted.

After changing the / When a particular cus­ Yes Yes


value of custom fields
tom field is changed.
For events that are
triggered when a cus­
tom field is altered, you
are able to select the
custom field from the
system.

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 717
Execution time de­
Event name Subevent name scription Available in Quote 1.0 Available in Quote 2.0

On CRM Item / When sending items Yes Yes


Mappings
from SAP CPQ to
Salesforce. Applicable
only when SAP CPQ is
integrated with Sales­
force.

On user Login / When users log into Yes Yes

SAP CPQ.

Every time quote is / After each change on Yes Yes


changed
the quote that affects
the Date Modified field.

When a user is on / When a user is on a Yes Yes


quotation tab
particular tab in the
quote. As soon as a
user clicks on the par­
ticular tab, SAP CPQ
executes the scripts
specified for the tab.
When the user clicks
Save on this tab,
the scripts specified
for the tab are exe­
cuted. The event is
executed in the follow­
ing tabs: Additional
Info, Customer Info,
Documents, Quotation
and Quotation.

When quote layout is / When the customiza­ Yes No


rendered
tion related to the lay­
out of the quote (mod­
ify XML and add addi­
tional data) that can­
not be accomplished
with simple changes
to quote XSLT is per­
formed. The event is
deprecated in the new
SAP CPQ layout.

When catalog layout is On product xml Before the xml seriali­ Yes No
rendered serialization start
zation starts.

SAP CPQ Setup and Administration Guide


718 PUBLIC Scripting
Execution time de­
Event name Subevent name scription Available in Quote 1.0 Available in Quote 2.0

On product xml When the xml serializa­ Yes No


serialization end
tion finishes.

On Arrive From CRM On Customer When creating and as­ Yes No


Mappings
signing customers to
quotes.

On Quote Fields When retrieving differ- Yes No


Mappings
ent quote fields from
CRM.

On Landing From CRM / Chronologically, hap­ Yes No

pens before arriving


from CRM and af­
ter the authentication
handshake. This event
has the request con­
text.

On Asset Created / After the action Create Yes No

Assets is triggered.

On customer change On Customer Bill To When the Bill To, Ship Yes No
changed
To and End User cus­
On Customer Ship To tomers are changed.
changed

On Customer End User


changed

Document sent / In the last step of Yes Yes


to customer/business
the Document Gener­
partner
ation process. Admin­
istrators can define a
script that changes the
status of the quote to
Sent to Customer.

On Quote Tab Changed / When moving to a Yes Yes

quote tab (e.g. a script


can be executed to cre­
ate a quote table in the
current tab).

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 719
Execution time de­
Event name Subevent name scription Available in Quote 1.0 Available in Quote 2.0

Before Quote / Every time a user Yes Yes


Rendering
makes any change on
a quote. For example,
if the visibility of a cus­
tom field is set in a
script, administrators
can attach that script
to this new event. That
way, they make sure
the field is always visi­
ble, regardless of the
changes that users
make on the quote.

On Involved Parties / When an involved party No Yes


Changed
is added, updated and
deleted either in the
application, or using
scripting, or via the
API .

When Excel is uploaded / When users upload an Yes Yes


into a Quote Table Excel file to a quote ta­
ble.

 Note

A more detailed documentation for scripting is available on the dedicated Scripting page.

11.3 Custom Actions

SAP CPQ offers flexible way to meet custom demands for various functionalities that are not part of the
standard software version. This is achieved by implementing custom actions – parts of code that contain
processing logic for appropriate functionalities.

Custom actions can be used in the quote workflow as any other standard quote action, they can be set up as
pre or post action. Also email notifications can be attached to them.

Typically , these actions are used for integration with other external systems – like ERP system. For example,
one custom action could contain code that would send relevant quote information to the product manufacturer
and/or distributor software, after the order is placed on that quote in SAP CPQ.

Administration for custom actions can be found under SAP CPQ Setup Develop Custom actions . When
user clicks on sub-menu Custom actions, table with all custom actions developed by the admin is displayed.
Admin is able to translate action names by clicking on the ‘Translate’ icon, edit action by clicking on the ‘Edit’

SAP CPQ Setup and Administration Guide


720 PUBLIC Scripting
action button, delete action by clicking on ‘Delete’ action button and create new action by clicking on the ‘Add
New’ button.

No standard SAP CPQ actions is displayed on this page. Custom actions defined by the admin are not
displayed in SAP CPQ Setup Workflow/Approvals Actions .

Admin is able to use these actions in SAP CPQ Setup Workflow/Approvals Workflow and to define
permissions for the action in SAP CPQ Setup Workflow/Approvals Workflow Permissions .

 Note

When defining Workflow transition for some custom action, in order to change quote status that action as
last row should include WorkflowContext.ChangeQuoteStatus = True.

When admin adds new/edits custom action, page is displayed where admin is able to:

• Define action name (required)


• Order within quote
• Whether it is a primary action or not (selected by default)
• Image for the action

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 721
• Global condition for action (empty by default)
• Pre-action condition (empty by default)
• Post-action condition (empty by default)
• Script engine type (currently only Python)
• Script

Action is always set up so that it can be set as pre or post action. Placement is set to the quote (Cart)
automatically, and admin is able to change that.

 Note

If a custom action causes and error, the system stops the workflow execution.

11.4 Custom Calculations

Administration for custom quote calculations can be found under SAP CPQ Setup Develop Custom
Quote Calculations .

 Note

Documentation for scripting can be found on this page.

When user clicks on sub-menu Custom Quote Calculations, table with all custom quote calculations is
displayed. Admin is able to edit calculation by clicking on the ‘Edit’ action button, delete calculation by clicking
on the ‘Delete’ action button or create new calculation by clicking on the ‘Add New’ button.

Administrator will be able to define:

• Calculation name (required)


• Active (checked by default)
• Row Type (Cart Item selected by default, Product Type Item or Cart Total)
• Script Engine Type (only Python available currently)
• Description
• Script

SAP CPQ Setup and Administration Guide


722 PUBLIC Scripting
11.5 Script Workbench

Script Workbench is available for administrators to help them debug and develop their scripts. It can be
accessed through Scripts developing and editing page within SAP CPQ Setup, or from user view under the top
menu.

Iron Python Scripts have always been a powerful tool for SAP CPQ customization, so they’re well adopted
by SAP CPQ administrators and used frequently to complete a various kinds of tasks. Writing Iron Python
(IP) script can be exhaustive due to its syntax and indentation rules. Therefore, SAP CPQ introduces Script
Workbench along with some additional features that make writing scripts easier.

Note that if an administrator is in the middle of editing or developing a script, once the link Workbench is
clicked, the script is loaded into the workbench. There’s no fear that the script will be lost.

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 723
On the setup side, there are two more links beside link for starting the workbench. Clicking on the first
link “Open in new window” will open the API explorer in a new window. API explorer is a helpful reference
on Scripting API for SAP CPQ administrators. Clicking on the link “Open”, API explorer is open next to the
workbench window. “API explorer” represents a helpful Scripting reference with the descriptions on each
method that can help you while trying to recall how to retrieve some information.

Workbench is available in both – Classic and Responsive Design.

SAP CPQ Setup and Administration Guide


724 PUBLIC Scripting
There are two modes under which the workbench can operate. One mode is “Standard” and another is “Test”.
Standard mode should be used when writing, editing and debugging any script, since it provides more useful
snippets than the “Test” mode.

“Test” mode should be used when writing tests for your model and when executing them. Note that in this
mode, many API objects aren’t available since you’re able to only test your model, not the particular quote.
Therefore, if you open workbench in order to help you during writing the script, make sure that you select
“Standard” mode. This way you will be able to use all objects that are exposed through Scripting API. If you are
in “Test” mode, some objects (for example Quote) are not available and you will get an error when executing
the script.

While debugging, useful information is displayed under script edit area. All local variables are automatically
traced. Any syntax error you might have in your script is going to be displayed as well. This helps you a lot to
find the root cause of script problems, and shortens time to develop the script.

 Note

Script execution in the Script Workbench is limited to 3 minutes (180000 ms). Scripts whose execution
exceeds this limit are automatically cancelled.

API Snippets

Beside the previously mentioned API explorer, you are introduced with API snippets. In the screenshot below
we wrote IP command to retrieve a custom field’s content with the help of “API snippets”. “API snippets” is
a practical way to quickly create chunks of API code by selecting through a series of drop down boxes and
inserting it to the editor. Note that “API snippets” is available in both, “Test” and “Standard” mode.

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 725
Alias Snippets

“Alias snippets” provides you with the most used functions on different SAP CPQ entities (products, attributes,
customer, etc.). Similar to “API snippets”, you are able to select the appropriate function from the list and then
narrow your selection by selecting through the rest of drop down boxes. As soon as you construct the desired
method, you can insert it into the script editor using either “Insert at cursor” or “Add as new line” button.

SAP CPQ Setup and Administration Guide


726 PUBLIC Scripting
Python Snippets

“Python snippets” provides you with the list of simple Iron Python language specific constructions that are
frequently used while writing a script. For example, if you want to write an “if else if” statement, you can pick it
from the list and insert into the editor.

SAP CPQ Setup and Administration Guide


Scripting PUBLIC 727
Writing Tests

From time to time, it might be very convenient to have a test that you can execute and therefore test your
model. Now you can write a test in the workbench and execute it. Once the execution is complete, you are
informed on the execution result. If test fails you are informed on the reason through the information displayed
in the workbench. When you write tests, you must be in “Test” mode.

A new Scripting object has been introduced that comprises a list of useful methods for writing tests. The
objects name is IAssert. A detailed documentation on this object can be found at this location in SAP CPQ
scripting help: IAssert Interface.

 Note

Whenever a quote is edited via the Script Workbench, all changes are logged in Audit Trail User
Actions .

SAP CPQ Setup and Administration Guide


728 PUBLIC Scripting
12 SAP CPQ Tags

This section contains the list of all CTX tags, as well as ways in which various types of tags can be used in SAP
CPQ.

Conditional Statements [page 729]


Conditional statements are an integral part of SAP CPQ modeling and configuration. These statements
can be used in any part of SAP CPQ.

Tags and Expressions [page 731]


Tags are used to obtain values from different SAP CPQ entities. The expressions are used for
generating text or calculating values based on the configuration data.

CTX Tags [page 731]


CTX tags are used for retrieving certain values from various parts of SAP CPQ.

Product Tags [page 740]

QuoteTags [page 747]


These tags are generally used in visibility and approval rules. They can only be used outside of product
configuration and they will not work in product rules, descriptions, and so on.

Tags for Rules and Triggers [page 752]

Main Item Price Tag [page 758]


The purpose of this feature is to develop new product tag that will return product price excluding line
items.

XWS Tag [page 759]


XWS tag may have one or more parameters. First parameter is function name. Other parameters
are optional and represent parameters passed to the specified function. Other than that, it supports
several standard functions it’s a gateway from Configurator to external resources like web services from
another systems.

Global Information (GI) Variables [page 760]


Global Information (GI) variables contain values that can be read by any product or quote.

Formula Validator [page 762]


Tags and expressions are a powerful part of SAP CPQ. To help reduce errors and simplify the process,
the Formula Builder is available to create expressions.

12.1 Conditional Statements

Conditional statements are an integral part of SAP CPQ modeling and configuration. These statements can be
used in any part of SAP CPQ.

This includes product modeling areas (rules, hidden calculations, labels, pricing expression, attribute
descriptions), workflow areas (approval rules, discounting rules, visibility rules, actions conditions) and any
other area of SAP CPQ that has an input area.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 729
Conditional statements are written in an “IF” format: [If](condition){expression if true}
{expression if false –note this is optional}[ENDIF]

A basic statement must have a beginning [IF] tag that ends with an [ENDIF] tag. The condition area must
contain an expression that will resolve to true or false. If true then any expression in the first set of curly
brackets will be used or performed, depending on what is included. If the condition statement is false then any
expression in the second set of curly brackets will be used or performed. Since the second set of curly brackets
is optional, though, if they are not used when a statement is false then no action will be performed.

 Note

Standard mathematical and programming operators such as >, <, =, = cannot be used in conditional
statements. SAP CPQ uses its own operators [page 730] to perform these actions.

12.1.1 Operators

Operator Description Syntax

[AND] Joins multiple conditions. When used, [AND](condition 1,condition


all conditions must be true for 2,condition 3)
expression if true section to be
performed.

[OR] Joins multiple conditions. When used, [OR](condition 1,condition 2,condition


at least one condition must be true 3)
for expression if true section to be
performed.

[LT] Equivalent to the ”<” operator, this [LT](value 1,value 2)


returns whether one value is less than
another value.

[GT] Equivalent to the ”>” operator, this [GT](value 1,value 2)


returns whether one value is greater
than another value.

[GEQ] Equivalent to ”>=”, this returns whether [GEQ](value 1,value 2)


one value is greater than or equal to
another value.

[LEQ] Equivalent to ”⇐”, this returns whether [LEQ](value 1,value 2)


one value is less than or equal to
another value.

[INR] Returns whether a value is between a [INR](value, bottom value,top value)


bottom value and a top value. If the
value equals the bottom or top value,
then true will be returned.

[IN] Returns whether a value equals a value [IN](value, value 1,value 2,value 3,…)
in a list of values.

[LIKE] Returns 1 if the second value is [LIKE](value 1, value 2)


contained in the first value.

SAP CPQ Setup and Administration Guide


730 PUBLIC SAP CPQ Tags
Operator Description Syntax

[BEGW] Returns 1 if the first value begins with [BEGW](value 1, value 2)


the second value.

12.2 Tags and Expressions

Tags are used to obtain values from different SAP CPQ entities. The expressions are used for generating text or
calculating values based on the configuration data.

Tags can be used in many areas of SAP CPQ. Three major areas are a product model, quote, and document
generation templates. They’re used for obtaining values from the following SAP CPQ entities - Products,
Attributes, Customers, and so on. Tags can also provide other useful information that could be used in
expressions.

Expressions are used for dynamically generating text or calculating values based on the configuration data.
Expressions can use string data, numeric data, math functions, if/then statements, and SAP CPQ tags.

12.3 CTX Tags

CTX tags are used for retrieving certain values from various parts of SAP CPQ.

CTX tag should be formed in a standard way:

<*CTX(parameter)*>

The parameter is a specification of what value should be returned. It is a dot separated list of objects, sub
objects and property names. Each object may have sub objects and properties. Properties are terminals – this
means that CTX tag param may end with it.

 Note

CTX tags can't be processed successfully if parentheses are used in the names of elements referenced in
CTX formulas (such as attributes, attribute values, or products).

In short this is the CTX param object structure:

• Quote
• Total
• CurrentItem
• KeyAttribute
• ProductType
• Customer
• Revision
• Owner

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 731
• UserType
• Company
• Territory
• ManagingParent
• OrderingParent
• ApprovalParent
• SelectedMarket
• SelectedShipping
• SFDC
• Opportunity
• Account
• SOD
• Account
• Opportunity
• Visitor
• UserType
• Company
• Territory
• ManagingParent
• OrderingParent
• ApproveParent
• Date
• Container
• MyContainer
• Product
• PartNumber
• SystemId
• Pricebook
• Name
• DistributionChannel
• Code

Each of these objects has corresponding properties. Quote sub objects have cart cells as sub objects, for
example Quote.Total.CartComment. Cart cell objects that are decimals, like prices, have fixed four sub tags:

• DefaultDisplay – returns decimal in default currency formatted as displayed on cart


• DefaultDecimal – returns decimal in default currency in numeric en-US format without 1000 separators
and with two decimals
• MarketDecimal – returns decimal in cart currency formatted as displayed on cart
• MarketDisplay – returns decimal in cart currency in numeric en-US format without 1000 separators and
with two decimals

For example, display is on three decimals, cart is in Euro currency, default is US Dollar:

<*CTX(Quote.Total.TotalAmount.DefaultDisplay)*> 2,345.678

<*CTX(Quote.Total.TotalAmount.DefaultDecimal)*> 2345.68

SAP CPQ Setup and Administration Guide


732 PUBLIC SAP CPQ Tags
<*CTX(Quote.Total.TotalAmount.MarketDisplay)*> 1,503.639

<*CTX(Quote.Total.TotalAmount.MarketDecimal)*> 1503.64

Several tags, like:

• Quote.ProductType()
• Quote.CustomField()
• Quote.Customer()

Have a parameter in the brackets. With this parameter you may specify which instance of the object should be
returned.

Example

Quote.ProductType(Software).ListSubTotal.MarketDecimal will return total list price of the


“Software” product type.

Quote.CustomField(Terms) will return the value of the “Terms” quote custom field (sc param).

Quote customers should be referred by the role name:

• BillTo
• ShipTo
• EndUser

Involved Parties CTX Tags

To get data from involved parties [page 344], you can build CTX tags using CurrentInvolvedParty
and PartnerFunctionKey. However, the tags with CurrentInvolvedParty are used only for document
generation [page 176] while PartnerFunctionKey are used for formulas only.

For example, Quote.Involved Parties.PartnerFunctionKey(SP).Address1 returns all primary


addresses of all Sold-to parties on the quote.

Example

Quote.Customer(BillTo).FirstName will return first name of the quote bill to customer.

Quote.CurrentItem.CartItemGuid will return unique identifier for an item in the cart.

Quote.DocumentFormat will return the file format (PDF, DOCX) of generated document.

Date tag returns current date/time.

Date/Time fields have optional Format child tag. It expects format string in argument that affects the way value
is shown.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 733
For example, for January 19th 2009:

Date.Format(yyyy.MM.dd) 2009.01.19

Quote.DateCreated.Format(MM-dd-yy) 01-19-09

The CTX Date tag works only with the US date format, which is why .InUSDateFormat must be specified.

Container tag should be used in a product to access its container attributes.

Example

Use <*CTX(Container(Users).Rows.GetCount)*> in a product that has “Users” attribute container to get


number of rows in that container, or

Use <*CTX(Container(Users).Property(X).Set(<*Value(memory)*>)*> in a product that has


“Users” attribute container to set its property “X” to a value of “Memory” attribute of that same product.

The MyContainer tag should be used in an attribute container to access its own members, or in the product
that will be used as a container row to access parent container.

Your other option is to use it to define basic product info in the product by accessing the container in which the
product is located.

The parent container can be accessed from the child product, but only the basic info. By basic info we mean the
following: description, part number, etc. The product attribute or container of a child product cannot evaluate
the MyContainer tag in order to pull values from the parent container info.

Example

Use <*CTX(MyContainer.CurrentRow.Column(A).Get)*> in a column B calculation formula to set B


column to the same value as A column, or

Use <*CTX(MyContainer.Property(X).Get)*> in a column B calculation formula to set B column to the


same value as property X

 Note

Use the MyContainer tag only when you have a product in the container, otherwise you might end up with
unexpected behavior.

SFDC and SOD objects exists only if the SAP CPQ tenant is set to use them. They are exclusive – a tenant can
integrate with only one of them at once. If integration is not set usage of these tags will make syntax error in the
formula – using these tags is invalid if integration is not set.

SAP CPQ Setup and Administration Guide


734 PUBLIC SAP CPQ Tags
Sample 1

Free form attribute in configuration to have a value of some SOD Opportunity field. Make a rule with following
action <*ASSIGNFF(SomeAttribute:<*CTX(SOD.Opportunity.Description)*>)*>

Sample 2

Action depends on an SOD Account field In the workflow condition for the action put following formula
<*CTX(SOD.Account.Description)*>

12.3.1 CTX Date Format Strings

This topic contains format specifiers accepted by the Date Time Format string.

d Represents the day of the month as a number from 1


through 31. A single-digit day is formatted without a leading
zero

dd Represents the day of the month as a number from 01


through 31. A single-digit day is formatted with a leading
zero.

f Represents the most significant digit of the seconds


fraction; that is, it represents the tenths of a second in a
date and time value.If the f format specifier is used without
other format specifiers, it is interpreted as the f standard
date and time format specifier.

ff Represents the two most significant digits of the seconds


fraction; that is, it represents the hundredths of a second in
a date and time value.

fff Represents the three most significant digits of the seconds


fraction; that is, it represents the milliseconds in a date and
time value.

h Represents the hour as a number from 1 through 12, that


is, the hour as represented by a 12-hour clock that counts
the whole hours since midnight or noon. A particular hour
after midnight is indistinguishable from the same hour after
noon. The hour is not rounded, and a single-digit hour is
formatted without a leading zero. For example, given a time
of 5:43, this custom format specifier displays “5”.

hh Represents the hour as a number from 01 through 12, that


is, the hour as represented by a 12-hour clock that counts
the whole hours since midnight or noon. A particular hour
after midnight is indistinguishable from the same hour after
noon. The hour is not rounded, and a single-digit hour is
formatted with a leading zero. For example, given a time of
5:43, this format specifier displays “05”.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 735
H Represents the hour as a number from 0 through 23, that
is, the hour as represented by a zero-based 24-hour clock
that counts the hours since midnight. A single-digit hour is
formatted without a leading zero.

HH Represents the hour as a number from 00 through 23, that


is, the hour as represented by a zero-based 24-hour clock
that counts the hours since midnight. A single-digit hour is
formatted with a leading zero.

m Represents the minute as a number from 0 through 59. The


minute represents whole minutes that have passed since
the last hour. A single-digit minute is formatted without a
leading zero.

mm Represents the minute as a number from 00 through 59.


The minute represents whole minutes that have passed
since the last hour. A single-digit minute is formatted with a
leading zero.

M Represents the month as a number from 1 through 12. A


single-digit month is formatted without a leading zero.

MM Represents the month as a number from 01 through 12. A


single-digit month is formatted with a leading zero.

s Represents the seconds as a number from 0 through 59.


The result represents whole seconds that have passed since
the last minute. A single-digit second is formatted without a
leading zero.

ss Represents the seconds as a number from 00 through 59.


The result represents whole seconds that have passed since
the last minute. A single-digit second is formatted with a
leading zero.

tt Represents the AM/PM designator.

y Represents the year as a one or two-digit number. If the


year has more than two digits, only the two low-order digits
appear in the result. If the first digit of a two-digit year
begins with a zero (for example, 2008), the number is
formatted without a leading zero.

yy Represents the year as a two-digit number. If the year


has more than two digits, only the two low-order digits
appear in the result. If the two-digit year has fewer than two
significant digits, the number is padded with leading zeros
to achieve two digits.

yyy Represents the year with a minimum of three digits. If


the year has more than three significant digits, they are
included in the result string. If the year has fewer than three
digits, the number is padded with leading zeros to achieve
three digits.

yyyy Represents the year as a four-digit number. If the year has


more than four digits, only the four low-order digits appear
in the result. If the year has fewer than four digits, the
number is padded with leading zeros to achieve four digits.

SAP CPQ Setup and Administration Guide


736 PUBLIC SAP CPQ Tags
Copies any other character to the result string, without
affecting formatting.

In order for Salesforce to receive data in SF Date Time type fields, the valid format must be as follows:
yyyy-MM-ddTHH:mm:ss.ff

Example: <*CTX( Quote.DateCreated.Format(yyyy-MM-ddTHH:mm:ss.ff) )*>

12.3.2 CTX Objects and Lifetime

A CTX tag returns the value of an object property only if that object is already loaded. If the object doesn’t exist
or is not loaded the returned value will be empty string.

The Quote object is loaded in the edit action. It exists on the quote, quote property, customers, and all other
cart tab pages. The Quote object is also present in the Configurator, with the exception that it doesn’t exist if
the user clicked new quote and is configuring the first item. The Quote object exists in the Catalog, but only if
add item was executed.

The Quote.CurrentItem object refers to the cart item being iterated in the loops. If used outside of the loop it
will use the first cart item. It can be used in discount rules and CRM mappings. It can be used only if the Quote
object is loaded.

The SFDC object exists if the Salesforce integration is enabled and the user came through the Salesforce
backdoor from an opportunity.

The SOD object exists if the SOD integration is enabled and current quote is attached to an opportunity.

The Visitor object is created after the user logs in. It is present the whole all time while user session is valid.

12.3.3 Enhanced Language Tags

New CTX tags have been developed to help support companies with multiple languages.

• Product Name Translated - CTX(Product.Name.Translated)


• Product Description Translated - CTX(Product.Description.Translated)
• Long Product Description Translated - CTX(Product.LongDescription.Translated)
• Product Quote Description Translated - CTX(Product.QuoteDescription.Translated)
• Attribute Value Translated - CTX(Product.Attribute(Attribute Name).Value.Translated)
• Attribute Label Translated - CTX(Product.Attribute(Attribute Name).Label.Translated)
• Attribute Description Translated - CTX(Product.Attribute(Attribute
Name).Description.Translated)
• Attribute Value Description Translated - CTX(Product.Attribute(Attribute
Name).ValueDescription(AttributeValue).Translated)

If the value is not found in current dictionary, value from default dictionary will be returned.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 737
12.3.4 Salesforce Details

When a user enters SAP CPQ from a SalesForce opportunity, by using


CTX(SFDC.Opportunity.FieldName), the value of the opportunity FieldName will be obtained. Every
FieldName the user has privileges to read can be obtained by using this tag.

When a user enters SAP CPQ from SalesForce opportunity, by using CTX(SFDC.Account.FieldName), the
value of the opportunity account FieldName will be obtained. Every FieldName the user has privileges to read
can be obtained by using this tag.

 Note

The current integration with Salesforce will be deprecated in the 2211 release of SAP CPQ. Customers will
be able to continue using it until June 2023. To learn more about the steps you need to take as a user of this
integration, please refer to the SAP CPQ 2211 Breaking Changes and Announcements.

Two new tags for Salesforce are developed:

<*CTX( Quote.LastGeneratedDocument.Link )*> - returns link to last generated quote document

<*CTX( Quote.LastGeneratedDocument.Name )*> - returns name of last generated document

The purpose of these tags is that users will be able to download generated documents (proposals, SOWs, and
so on) from the external system without having to log into SAP CPQ.

In order for Salesforce to receive data in SF Date Time type fields, the valid format must be as follows:
yyyy-MM-ddTHH:mm:ss.ff

Example: <*CTX( Quote.DateCreated.Format(yyyy-MM-ddTHH:mm:ss.ff) )*>

12.3.5 SOD Details

SOD tag refers to the CRM objects current quote is attached to.

Once the CRM object is loaded to associate with quote and/or execute mappings it is stored in the session level
cache. After Update Opportunity finishes this cache is cleared.

SAP CPQ Setup and Administration Guide


738 PUBLIC SAP CPQ Tags
12.3.6 SAP Billing and Revenue Innovation Management CTX
Tags

The following CTX tags are available in SAP CPQ when it's integrated with SAP Billing and Revenue Innovation
Management:

Contract Changes CTX Tags

• <*CTX(Quote.CurrentItem.ChangeProcessGroupCode)*>
• <*CTX(Quote.CurrentItem.SubscriptionContractNumber)*>
• <*CTX(Quote.CurrentItem.SubscriptionContractItemNumber)*>
• <*CTX(Quote.CurrentItem.CancellationReasonId)*>
• <*CTX(Quote.CurrentItem.CancellationReason)*>
• <*CTX(Quote.CurrentItem.CancellationRequestDate)*>
• <*CTX( Quote.CurrentItem.ContractExtension.ValueCode )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Unit )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Unit.Translated )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Value )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Value.Translated )*>
• <*CTX( Quote. CurrentItem.ContractChangeActivationDate )*>

Autorenewals CTX Tags

• <*CTX(Quote.CurrentItem.ContractAutoRenewalIndicator)*>
• <*CTX( Quote.CurrentItem.ContractExtension.ValueCode )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Unit )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Unit.Translated )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Value )*>
• <*CTX( Quote.CurrentItem.ContractExtension.Value.Translated )*>

Totals CTX Tags

• <*CTX( Quote.Total.EstimatedContractTotalValue.Display )*>- gets the value of the


estimated total contract value field from the quote in the user’s selected format.
• <*CTX( Quote.Total.EstimatedContractTotalValue.Value )*>- gets the value of the estimated
total contract value field from the quote.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 739
12.4 Product Tags

Arithmetic Tags [page 740]

Attribute Data Tags [page 741]

External Source Tags [page 743]

Logged in User Data Tags [page 744]

Product Data Tags [page 745]

Sequence Tags [page 746]

12.4.1 Arithmetic Tags

Tag Description Type Returned Example

<*EVAL(math Evaluates a math expression. Result of evaluation <* EVAL( [IF](<*


expression)*> The expression can contain IsSelected(Operatin
operators and conditions
g System.Linux 10)
that need to be evaluated.
*>){<*
This tag initiates the
VBScript engine, so all Price(Operating
VBScript functions can be System) *> * 0.10}
used. See Appendix A for {<* Price(Operating
more information. System) *> * 0.05}
[ENDIF] ) *> - if Linux
10 is selected from the
attribute Operating
System then multiply the
price of the selected
attribute value in the
Operating System
attribute by 0.10, otherwise
multiply it by 0.05. The
EVAL tag evaluates the
entire expression and
returns the result.

<*Round (value, Rounds a value. The number Number <*


decimal places)*> of decimal places can be Round(<*EVAL(13/2)*
specified; otherwise the
>)*> - returns 6 <*
value is rounded to the whole
Round(<*EVAL(13/2)*
number.
>,2)*> - returns
6.5 <*
Round( <*EVAL(<*Pri
ce(Maint)*>/
<*Value(Months))*>*
>) *> - returns the

SAP CPQ Setup and Administration Guide


740 PUBLIC SAP CPQ Tags
Tag Description Type Returned Example

quotient of the Maint price


divided by the value of the
Months attribute.

12.4.2 Attribute Data Tags

Tag Description Type Returned Example

<*Quantity(attribut Gives the value of the Number <*Quantity(Network


e name)*> quantity entered for an Cable)*> - returns 2 from
attribute. Att. Quantity must the attribute Network Cable
be selected for the attribute
in order for users to enter a
quantity.

<*Price(attribute Gives the price of the current Number <*Price(Memory)*> -


name)*> attribute selection returns the price from the
attribute Memory.

<*ATTRIBUTECOST(Att Returns Attribute cost Number <*ATTRIBUTECOST(Har


ributeName)*> d Drive)*> -
returns the cost of
the selected
attribute value for
Hard Drive.

<*ATTRIBUTEVALUECOS Returns Attribute Value cost Number <*ATTRIBUTEVALUECOS


T(AttributeName:Att T(Hard
ributeValueCode)*> Drive:250GB)*> -
returns the cost of the
attribute value 250GB from
the attribute Hard Drive.

<*Value(attribute Gives the display value of the String/Number Depends on <*Value(Hard


name)*> current attribute selection. what the attribute contains Drive)*> - returns the
This will also return the display value or hidden
value of a hidden calculated calculation value from the
expression if it is being used.
attribute Hard Drive.

<*ValueCode(attribu Gives the value of the String/Number Depends on what


te name)*> current attribute selection. the attribute contains
This is what is entered with <*ValueCode(CD or
the display value when an DVD Drive #1)*> -
attribute is created. returns the value of the
attribute CD or DVD Drive
#1.

<*ValueCode(attribu Gives the value of the String/Number Depends on what


te name)*> current attribute selection. the attribute contains
This is what is entered with <*ValueCode(CD or

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 741
Tag Description Type Returned Example

the display value when an DVD Drive #1)*> -


attribute is created. returns the value of the
attribute CD or DVD Drive
#1.

<*CatCode(attribute Gives the value catalog code String/Number Depends on <* CatCode(CD or
name)*> of the current attribute what the catalog code DVD Drive #1) *>:
selection contains returns the catalog code
value of the attribute CD or
DVD Drive #1.

<*IsSelected(attrib Gives whether or not the True/False <*IsSelected(Proces


ute name.attribute specified attribute value of sor.Amtel 9 3GHz
an attribute is selected.
display value)*> Processor)*>: returns
whether Amtel 9 3GHz
Processor is selected.

<*AttDef(attribute Gives whether the attribute True/False <* AttDef(Hard


name)*> is currently selected. Similar Drive) *> - returns
to <*AttSel( )*> but whether any value has been
checks a status flag and selected in the attribute
is faster for a long list of Hard Drive.
attribute values.

<*AttSel(attribute Gives whether the attribute True/False <* AttSel(Hard


name)*> is currently selected. Similar Drive) *> - returns
to <*AttDef( )*> but whether any value has been
checks every selection of an selected in the attribute
attribute. Hard Drive.

<*GETATVUPC(attribu Gives the price of the Number <*


te name : attribute specified attribute value. GETATVUPC(Color:Blu
Value will only be returned if
value)*> e) *> - returns the price of
it has been selected.
the value Blue from the
attribute. Color

<*SETQTY(attribute Sets a specified quantity to Number <*SETQTY(Color,5)*> -


name, quantity)*> the entire attribute. Note: sets the quantity of the
Can only be used in Triggers. attribute Color to 5

<*SETATVQTY(attribu Sets a specified quantity to Number <*SETATVQTY(Color:B


te name : attribute the specified attribute value. lue,5)*> - sets the
display value, quantity of the attribute
quantity )*> value Blue from the
attribute Color to 5

<*GETATVQTY(attribu Gives the quantity of the Number <*GETATVQTY(Color:B


te name : attribute specified attribute value. lue)*> - returns the
Value will only be returned if
value)*> quantity of the attribute
it has been selected.
value Blue from the
attribute. Color

SAP CPQ Setup and Administration Guide


742 PUBLIC SAP CPQ Tags
Tag Description Type Returned Example

<* Returns sum( attribute


EXTENDEDPRICE(attri values extended prices )
* (attribute quantity )s
bute name) *>
Attribute value extended
price = attribute value price
* attribute value quantity
Attribute quantity = 1 or else
if “user may enter quantity”

<*AttributeValueXco Returns cost multiply by Number <*AttributeValueXco


st(attribute:attrib attribute value quantity. st(Monitor:F19)*> -
Value will only be returned if
ute_value)*> returns cost*quantity of the
it has been selected.
attribute Monitor which
value code is F19.

<*AttributeValueXPr Returns attribute value unit Number <*AttributeValueXPr


ice(attribute:attri price multiplied by attribute ice(Monitor:F19)*> -
value quantity. Value will only
bute_value)*> Gives unit price multiply by
be returned if it has been quantity of attribute Monitor
selected. which value code is F19.

<*AttributeValueDes Returns parsed attribute String


cription(attribute: value description builder
field. Value will only be
attribute_value)*>
returned if it has been
selected. Returns empty
string if designated attribute
value is not selected.

12.4.3 External Source Tags

Tag Description Type Retuned Example

<*XValue(Subproduct This is used for product String/Number Depends on <*XValue(Nested


/Attribute)*> hierarchy (nested products). what the part number Printer/Toner)*> -
It allows you to access contains returns the selected value
the attributes of the nested
of Toner attribute in the
or parent product. The
child attribute Printer.
subproduct part of the tag
The attribute referencing
will be the attribute in
the parent product that is Printer is called Nested
referencing the child/nested Printer.
product. If using this tag
from the child product then
the subproduct part of the
tag will be replaced with ../

<*XWS(getProductPri Retrieves the total price of Number <*XWS(getProductPri


ce,NestedProductNam the nested product. ce,Nested
e)*> Printer)*> - returns the

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 743
Tag Description Type Retuned Example

total price of the Nested


Printer product.

<*XWS(getProductDes Retrieves the product String <*XWS(getProductDes


cription,NestedProd description of the nested cription,Nested
product.
uctName)*> Printer)*> - returns the
product description of the
Nested Printer product.

<*XWS(getProductCat Retrieves the product String/Number <*XWS(getProductCat


Code,NestedProductN catalog code of the nested Code,Nested
product.
ame)*> Printer)*> - returns the
product cat code of the
Nested Printer product.

12.4.4 Logged in User Data Tags

Tag Description Type Retuned Example

<*VISITORGROUP*> Gives the name of a user String [EQ](<*


group that the currently VisitorGroup *>,
logged in user belongs to.
Webcom) – resolves to true
if the currently logged in user
is from the Webcom group.

<*VISITORNAME*> Gives the real name of the String Hello <*


currently logged in user. VisitorName *> -
displays Hello and the user’s
full name.

<*VISITORGROUPID*> Gives the group id of the Number [EQ](<*


currently logged in user. VisitorGroupID *>,
9) – resolves to true if the
currently logged in user’s
group id is 9.

<*VISITORID*> Gives the user id of the Number [EQ](<* VisitorID


currently logged in user. *>, 112) – resolves to
true if the currently logged in
user’s id is 112.

SAP CPQ Setup and Administration Guide


744 PUBLIC SAP CPQ Tags
12.4.5 Product Data Tags

Tag Description Type Returned Example

<*ProductCode*> Gives the part number of the String/Number Depends on <* ProductCode *>:
current configuration what the part number returns the current part
contains number from whichever
product the tag is used in.

<*ProductName*> Gives the product’s name String <* ProductName *> -


returns the product name of
the product the tag is used
in.

<*ProductDescriptio Gives the product String <*


n*> description entered in the ProductDescription
Product Definition
*> - returns text in the
Product Description field.

<*LongProductDescri Gives the long product String <*


ption*> description entered in the LongProductDescript
Product Definition.
ion *> - returns text in the
Long Product Description
field.

<*ProductLink*> Gives the link or URL from String <* ProductLink *> -
the product link field returns the text from the
Product Link field.

<*ProductImage*> Gives the product image file String <* ProductImage *> -
name used for a product returns the file name used
for the product image for the
product the tag is used in.

<*LargeProductImage Gives the large product String <*


*> image file name used for a LargeProductImage
product
*> - returns the file name
used for the large product
image for a product.

<*PRODUCTINFO(produ Gives defined product type String <*


ct type)*> name. This can be used PRODUCTINFO(Product
when defining specifics
Type_CD) *> - returns CD
correlated with product type
from the system
using Custom Tables.

<*PRODUCTDEFINED*> Gives whether configuration True/False [IF](<*


is complete on a product or ProductDefined *>)
not.
{<*SELATV(Status:Ac
tive)*>}{}[ENDIF] –
sets the Status attribute to
Active when the product has
a complete configuration

<*Price(*)*> Gives the sum of all Number <* Price(*) *> -


prices for all currently returns the prices of all
selected attributes but

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 745
Tag Description Type Returned Example

doesn’t include base price. selected attributes without


This would be different than adding in the base price of
TotalPrice if there is the product.
a base price and/or if
TotalPrice is calculated
using Product Price building
sequence.

<*TotalPrice*> Gives the price of the Number <* TotalPrice *> -


current configuration. This returns the total price of the
includes items designated product configuration.
as separate line items.
Calculations using Product
Price building sequence may
produce a different value.

<*BasePrice*> Gives the base price of the Number <* BasePrice *> -
product. This is the amount returns the base price of the
entered in the product price product the tag is used in.
field.

<*TotalPriceWoLi*> Gives the total product Number <* TotalPriceWoLi


price of the configuration *> - returns the price of the
excluding prices of attributes configuration without adding
that are designated as line any line item prices.
items.

<*ITEMCODE*> Returns part number of String


the current cart item while
calculating discount rules
and aggregates. In all other
cases it returns empty
string. It should be used
for aggregates and discounts
only.

<*TotalCost*> Gives the cost of the current Number <* TotalCost*> -


configuration. This includes returns the total cost of the
the cost of all selected product configuration.
attributes.

12.4.6 Sequence Tags

Tag Description Type Returned Example

<*PSEQ(sequence Product sequence, which A Sequence value Product 1 = ABC <*


name)*> allows several products to PSEQ(productSeq) *>
use the same sequence
Product 2 = XYZ <*
independently of each other.
PSEQ(productSeq) *>
- sequence is ABC001,

SAP CPQ Setup and Administration Guide


746 PUBLIC SAP CPQ Tags
Tag Description Type Returned Example

XYZ001, ABC002, XYZ002,


and so on.

<*GSEQ(sequence Global sequence, which A Sequence value Product 1 = ABC <*


name)*> allows several products to PSEQ(productSeq) *>
share the same sequence.
Product 2 = XYZ <*
GSEQ(productSeq)*> -
sequence is ABC001,
XYZ002, ABC003, and so
on.

<*SSEQ(sequence 1 Nested sequences, which A Sequence value Sequence ABC =


name,sequence 2 allow sequences to be used A,B,C; Sequence
with another sequence.
name, …, sequence n Three = 1,2,3 <*
name)*> SSEQ(ABC,Three) *> -
returns A1, A2, A3, B1, B2,
B3, and so on.

<*CXSUB(intelligent Used with serial numbers A Sequence Value See chapter on Sequences
sequence and substituting a number [page 107] for more
to replace long string of information.
substitution
attribute values for a product
name)*>
number.

12.5 QuoteTags

These tags are generally used in visibility and approval rules. They can only be used outside of product
configuration and they will not work in product rules, descriptions, and so on.

The first three tables provide information about a quote owner (CO), current user (CU), bill to information (BT),
or customer information (CO_ST). Tag syntax for these tables is similar. The quote owner and current user
information use the same column names. The bill to information is pulled from the Bill To and End User role in
the Billing/Shipping tab of a quote. Customer information is pulled from the Ship To role.

EXAMPLE: [EQ](<*CU_INFO(TERRITORY_ID*>, <*CO_INFO(TERRITORY_ID)*>) – returns whether the


current user’s territory Id matches the territory Id of the cart owner. This expression can be used in quote
visibility rules to allow users to only see quotes from their own territory.

12.5.1 Other Quote Tags

Tag Description Type Returned Example

<*CARTAMOUNT*> Gives total amount of the Number See below…


cart.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 747
Tag Description Type Returned Example

<*USERAMOUNT*> Gives max approval amount Number [GT]


for the currently logged in (<*CARTAMOUNT*>,
user.
<*USERAMOUNT*>) –
returns whether the total
amount of the cart is greater
than the approval amount
set for the current user.

<*USERID*> Gives the currently Number See below…


logged in user’s ID.
Functions the same as
<*CU_INFO(ID)*>.

<*CARTOWNER*> Gives the user Id for cart’s Number [EQ](<*USERID*>,


owner. Functions the same <*CARTOWNER*>) –
as <*CO_INFO(ID)*>). returns true if the currently
logged in user’s Id and the
cart owner’s Id are equal.
This can be used behind an
action for a cart or visibility
rules.

<*SAMETERRITORY*> Gives whether the currently True/False <*SAMETERRITORY*> -


logged in user and the cart can be used for visibility
owner are in the same rules or behind an action for
territory. Checks against the a cart.
territory Id. Functions the
same as [EQ]
( <*CU_INFO(TERRITO
RY_ID)*>,
<*CO_INFO(TERRITORY
_ID)*>)

<*TERRITORY*> Gives the cart owner’s String [EQ](<*TERRITORY*>,


territory name. Functions <*CU_INFO(TERRITORY
the same as
_NAME)*>) – returns true
<*CO_INFO( TERRITOR if currently logged in user
Y_NAME)*>. belongs to the same territory
as the cart owner’s.

<*SAMEGROUP*> Gives whether the currently True/False <*SAMEGROUP*> - can be


logged in user and the cart used for visibility rules or
owner are in the same group. behind an action for a cart.
Functions the same as [EQ]
(<*CU_INFO(USER_TYP
E_NAME)*>,<*CO_INF
O(USER_TYPE_NAME)*>
).

<*GROUP*> Gives the cart’s owner group String [EQ](<*GROUP*>,


name. Functions the same as <*CU_INFO(USER_TYPE
<*CO_INFO(USER_TYPE _NAME)*>) – returns true
_NAME)*>. if currently logged in user

SAP CPQ Setup and Administration Guide


748 PUBLIC SAP CPQ Tags
Tag Description Type Returned Example

belongs to the same group


as the cart owner’s.

<*ISRESPAPPROV*> True/False

<*CHILDREN*> Is currently logged in user True/False


ordering parent for cart’s
owner?

<*CHILD*> Is currently logged in user True/False


direct ordering parent for
cart’s owner?

<*FIRSTAPPROVEC*> Is currently logged in user True/False


approve parent for cart’s
owner?

<*ALLAPPROVEC*> Is currently logged in user True/False True/False


direct approve parent for
cart’s owner?

<*SAMEZIPCODE*> Are the ZIP codes of True/False


currently logged in user and
cart’s owner the same? (Cart
Visibility) and Is the ZIP
codes of currently logged
in user and customer the
same? (Customer Visibility).

<*ZIPCODE*> Returns user ZIP code. Number

<*SAMESHIPZIPCODE*> Is ZIP code of currently True/False


logged in user the same as
ZIP code of the city where
quote is delivered?

<*SHIPZIPCODE*> Returns ZIP code of Ship to Number


address.

<*SAMECUSTOMERZIPCO Is ZIP code of currently True/False


DE*> logged in user the same as
customer’s ZIP code?

<*CUSTOMERZIPCODE*> Returns customer ZIP code. Number

<*CUSTOMERCOUNTRY*> Returns customer’s country/ String


region.

<*CUSTOMERCOMPANY*> Returns customer’s String


company

<*APPROVALREQUIRED* This tag is often used as True/False


> Condition for showing up
Submit for approval button.
Condition is true (1) if there
is needed to execute
Approval process for the
loaded quote. For example, if
administrator doesn’t want
to execute Generate Quote

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 749
Tag Description Type Returned Example

action if is necessary to
execute Approval Process
before then the condition for
Generate Quote action will be
[NOT]<*APPROVALREQU
IRED*> .

<*ISAPPROVED*> This tag is used for checking True/False


if a quote is approved
(quote passed through
approval process and now is
approved) or not.

<*ISREJECTED*> This tag is used for checking True/False


if quote is rejected (quote
passed through approval
process and now is rejected)
or not.

<*ISWAITING*> This tag is used for checking True/False


if quote is into approval
process but is neither
approved nor rejected.

<*CUSTOMERTERRITORY Customer’s territory. String


*>

<*GETATTNUMVAL*> Returns numeric value of Number


attribute.

<*SAMEUSERCOMPANY*> If the current user works True/False


for the same company as
the user who created a cart
(quote) this expression will
evaluate to 1, otherwise it is
0.

<*USERCOMPANY*> Returns name of user String


company.

<*AUX(AUXTABLE, See below, after description


…)*> of XWS tags.

<*QUOTEPROPERTY(Quo Returns the value of the String <* QUOTEPROPERTY


teCustomFieldName)* quote custom field from (Expiration Date)
database.
> *>

<*CSIGN*> Returns current currency


sign as defined in database.

<*MFACTOR*> Returns market factor.

<*MCODE*> Returns market code - if


needed to access additional
price books via AUX tags.

SAP CPQ Setup and Administration Guide


750 PUBLIC SAP CPQ Tags
Tag Description Type Returned Example

<*CRATE*> Returns current currency


rate (related to default
currency as administered).

<*USER_CO_CRM_ACCOU Returns CRM ID for a CRM Account Number Example of a formula in


NT_ID*> company that a user belongs discounting rules for default
to. This tag is used in a field discount: AUX(some
for default discount, in side table, discount
of a AUX tag to find a default
column, crm id
discount for a company that
column,<*USER_CO_CR
user belongs to.
M_ACCOUNT_ID*> – used
in a discounting rule for a
default discount.

<*TotalItemsAmount* Returns Total Items


> Amount before shipping or
commission costs.

<*TotalItemsCost*> Returns Total Items


Cost before shipping or
commission costs.

<*TotalGrossMargin* Returns Total Gross


> Margin before shipping or
commission costs.

<*FREIGHTAMOUNT*> Returns freight amount. [if]([GT]


(<*FREIGHTAMOUNT*>,
0)){1}{0}[endif]

12.5.2 User and Customer Information

<* CO_INFO(column name) *> <* BT_INFO(column name) *> <* CO_STINFO(column name)
Column Name Column Name *> Column Name

TERRITORY_NAME CUSTOMER_NAME (last and first CUSTOMER_NAME (last and


name) first name)

USER_TYPE_NAME COUNTRY_NAME SHOP_CART_ID (quote number)

COMPANY_NAME TERRITORY_NAME SHIP_E_MAIL_ADDR

APPROVE_PARENT_NAME CUSTOMER_E_MAIL_ADDR SHIP_TITLE

ORDERING_PARENT_NAME CUSTOMER_TITLE SHIP_COMPANY

MANAGING_PARENT_NAME CUSTOMER_COMPANY SHIP_CITY

NAME CUSTOMER_CITY SHIP_STATE

EMAIL CUSTOMER_STATE SHIP_PROVINCE

EXPDATE (password expiration) CUSTOMER_PROVINCE SHIP_ZIP_CODE

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 751
<* CO_INFO(column name) *> <* BT_INFO(column name) *> <* CO_STINFO(column name)
Column Name Column Name *> Column Name

COMPANYID CUSTOMER_ZIP_CODE SHIP_BUSINESS_PHONE

ID (user’s Id) CUSTOMER_BUSINESS_PHONE SHIP_BUSINESS_FAX

USER_ZIP_CODE CUSTOMER_BUSINESS_FAX SHIP_PRIMARY_INDUSTRY

USER_CITY CUSTOMER_PRIMARY_INDUSTRY SHIP_ID

USER_STATE CUSTOMER_ID SHIP_COUNTRY

MULTIPLIER TERRITORY_ID

PHONE ACTIVE (true/false)

FAX CUSTOMER_CODE

COUNTRY

TITLE

TERRITORY_ID

12.6 Tags for Rules and Triggers

Action Tags [page 752]

Condition Tags [page 756]

12.6.1 Action Tags

Tag Description Result

<*allowatt(standard Parameters: attribute names. More Allows all values from all specified
attribute name)*> than one attribute can be entered. attributes.
Each separated from the other a
comma.

<*AllowAttributes(standard Parameters: attribute names. More Allows all values from all specified
attribute name)*> than one attribute can be entered. attributes.
Each separated from the other a
comma.

<*allowatv(standard Parameters: attributes with their Allows all values from the entered list
attribute name:standard values, separated by colon. More
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

SAP CPQ Setup and Administration Guide


752 PUBLIC SAP CPQ Tags
Tag Description Result

<*AllowValues(standard Parameters: attributes with their Allows all values from the entered list
attribute name:standard values, separated by colon. More
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

<*assignff(attribute Parameters: the name of the free-form Every free input value is assigned to
name:value)*> attribute, and the value to be assigned appropriate free form attribute. If free
to the attribute, separated by colon. input value contains function, the
More than one free form attribute/free function is executed before
input value pairs can be entered. Every assignment. For example:
pair is separated from other pairs by a <*assignff(attribute_name:
comma. <*catcode(other_attribute
)*>)*> gives as the result the
CatCode string from the
other_attribute, assigned to free form
field in the attribute_name
attribute.
<*assignff(attrib_name:Web
com)*> assigns the string Webcom to
the “attrib_name” attribute. Non-free-
form attributes can’t accept the
assigned values.

<*AssignValue(attribute Parameters: the name of the free form Every free input value is assigned to
name:value)*> attribute, and the value to be assigned appropriate free form attribute. If free
to the attribute, separated by a colon. input value contains a function, the
More than one free form attribute/free function is executed before the
input value pairs can be entered. Every assignment. For
pair is separated from other pairs by a example:<*AssignValue(attrib
comma. ute_name:<*catcode(other_a
ttribute)*>)*> gives as the result
the CatCode string from the
other_attribute, assigned to
FreeForm field in the
attribute_name attribute.
<*AssignValue(attrib_name:
Webcom)*> assigns the string
Webcom to the attrib_name
attribute. Non-free-form attributes
can’t accept the assigned values.

 Note

If you wish to assign date to an attribute of type Date via this tag, you should use
<*ASSIGNVALUE(TestDate:<*CTX( Date.AddMonths(1).InUSDateFormat )*>)*> since the date
needs to be converted from the user format to the US format when the AssignValue tag is used. If the
user's date format is set to anything other than the US format, and the <CTX( Date.AddMonths(1) )>
is used, the date value will be assigned incorrectly.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 753
Tag Description Result

<*assignpc(attribute Parameters: attributes with their prices The same as previous, except that
name:value)*> to be assigned, separated by a colon. it assigns “standard attribute value”
More than one attribute/price pair can to the Price field of the “standard
be entered. Every pair is separated attribute name”.
from other pairs by a comma.

<*AssignPrice(attribute Parameters: attributes with their prices The same as previous, except that
name:value)*> to be assigned, separated by a colon. it assigns “standard attribute value”
More than one attribute/price pair can to the Price field of the “standard
be entered. Every pair is separated attribute name”.
from other pairs by a comma.

<*disallowatv(standard Parameters: attributes with their Disallows every specified value in every
attribute name:standard values, separated by a colon. More attribute in the list.
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

<*DisallowValues(standard Parameters: attributes with their Disallows every specified value in every
attribute name:standard values, separated by colon. More attribute in the list.
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

<*disallowatt(standard Parameters: attribute names. More If condition is TRUE, all listed attributes
attribute name)*> than one Attribute can be entered. are disallowed. If condition, during
Each separated from other by a some of the following steps become
comma. FALSE, the attributes are NOT re-
allowed. Here, it's recommended
to create complementary rules: for
every rule made as condition -
> disallowatt(attribute_list) create
another as [not]condition - >
allowatt(attribute_list). Additionally,
make sure that every complementary
Rule has its rank higher than the rank
of the primary rule.

<*DisallowAttributes(stand Parameters: attribute names. More If condition is TRUE, all listed


ard attribute name)*> than one attribute can be entered. attributes are disallowed. If condition,
Each separated from other by a during some of the following steps
comma. become FALSE, the attributes are
NOT re-allowed. Recommended here
is to create complementary Rules:
for every Rule made as condition
- > DisallowAttributes(attribute_list)
create another as [not]condition
- > AllowAttributes(attribute_list).
Additionally, make sure that every
complementary rule has its rank higher
than the rank of the primary rule.

<*DisallowAllValuesExcept( Parameters: attributes with their Sets all attribute values to not allowed,
Attribute_Name : Value1, values, separated by colon. More except for the listed values. This may
than one attribute/value pair can be be used when there is a large number
Attribute_Name :
entered. Every pair is separated from of attribute values, but only a couple of
Value2, ..)*>
other pairs by a comma. them needs to be allowed.

SAP CPQ Setup and Administration Guide


754 PUBLIC SAP CPQ Tags
Tag Description Result

<*resetatt(standard Parameters: attribute names. More Resets every value of every listed
attribute name)*> than one Attribute can be entered. attribute.
Each is separated from other by a
comma.

<*resetatv(standard Parameters: attributes with their Resets every listed attribute value.
attribute name:standard values, separated by colon. More
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

<* SELATV (attribute1: Selects attribute values. By default Attribute values included in tag will be
value1 I value2 I value3, the system resets the attribute selected.
when a selection is made
attribute2: value 1)*>
with SELATV. With the use
of <*DONOTRESETATT*> and
<*DORESETATT*> (see description
below) more than one attribute value
will be selected without the other
values being unselected.

<* SelectValues Selects attribute values. By default Attribute values included in tag will be
(attribute1: value1 I the system resets the attribute selected.
when a selection is made with
value2 I value3,
SelectValue. With the use
attribute2: value 1)*>
of <*DONOTRESETATT*> and
<*DORESETATT*> (see description
below) more than one attribute value
will be selected without the other
values being unselected.

<* SelectValue Selects attribute values. By default Attribute values included in tag will be
(attribute1: the system resets the attribute selected.
when a selection is made with
value1,attribute1:value2 ,
SelectValue. With the use
attribute1:value3)*>
of <*DONOTRESETATT*> and
<*DORESETATT*> (see description
below) more than one attribute value
will be selected without the other
values being unselected.

<*ResetValue(standard Parameters: attributes with their Resets every listed attribute value.
attribute name:standard values, separated by colon. More
than one attribute/value pair can be
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

<*DONOTRESETATT*> Tells the system not to reset Switches the system to not reset
the attribute values when another attributes when SELATV tag is used.
selection is made. By default the
system resets the attribute when a
selection is made with SELATV. Use in
conjunction with <*DORESETATT*>
(see description below)

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 755
Tag Description Result

<*DORESETATT*> Tells system to reset attribute values Switches the system to reset attributes
when another selection is made. when the SELATV tag is used.
Generally this is used after the
<*DONOTRESETATT*> tag in the
same expression. For example:
<*DONOTRESETATT*><*SELATV(
attr1:value1)*><*DORESETAT
T*>

<* ResetAttribute(standard Parameters: attribute names. More Resets every value of every listed
attribute name) *> than one attribute can be entered. attribute.
Each is separated from other by a
comma.

<*DONOTREVERSERULES*> Tells the system not to reverse a rule Switches the system to not reverse
when the rule becomes not true. By rules when the condition is no longer
default the system will reverse a rule true.
when the condition is no longer true.
Use <*DONOTREVERSERULES*> to
turn this function off.

<*REVERSERULES*> Tells the system to reverse the rule Switches the system to reverse rules
when the rule becomes not true. when the condition is no longer true.
Generally this is used after the
<*DONOTREVERSERULES*> tag in
the same expression. For
example:<*DONOTREVERSERULES*
><*DISALLOWATT(attr1)*><*
REVERSERULES*>

<*SETREQUIRED(AttName)*> Sets an attribute to be required. Sets the specified attribute as


Useful when attributes only need to required.
be required under certain conditions.
When it is used, another rule needs to
be created to set the same attribute as
optional under the reverse conditions.

<*SETOPTIONAL(AttName)*> Sets an attribute to be optional. Sets the specified attribute as


Generally used in conjunction with required.
<*SETREQUIRED()*> as a separate
rule.

12.6.2 Condition Tags

Tag Description Result

<*anysel(standard Parameters: attributes with their If any value from the entered list is
attribute name:standard values, separated by a colon. More selected the result is TRUE, otherwise
than one attribute/value pair can be it’s FALSE.
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

SAP CPQ Setup and Administration Guide


756 PUBLIC SAP CPQ Tags
Tag Description Result

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*IfAnyValue(standard Parameters: attributes with their If any value from the entered list is
attribute name:standard values, separated by a colon. More selected the result is TRUE, otherwise
than one attribute/value pair can be it’s FALSE.
attribute value)*>
entered. Every pair is separated from
other pairs by a comma. This tag
should be used for product rules only.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*anyselatt(standard Parameters: attribute names. More If any value from the specified
attribute name)*> than one attribute can be selected. attributes is selected the result is
Separate them by commas. TRUE, otherwise it’s FALSE.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*IfAnyAttribute(standard Parameters: attribute names. More If any value from the specified
attribute name)*> than one attribute can be selected. attributes is selected the result is
Separate them by commas. TRUE, otherwise it’s FALSE.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*allsel(standard Parameters: attributes with their If all of the specified values are
attribute name:standard values, separated by a colon. More selected the result is TRUE, otherwise
than one attribute/value pair can be it’s FALSE.
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*IfAllValues(standard Parameters: attributes with their If all of the specified values are
attribute name:standard values, separated by a colon. More selected the result is TRUE, otherwise
than one attribute/value pair can be it’s FALSE.
attribute value)*>
entered. Every pair is separated from
other pairs by a comma.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*allselatt(standard Parameters: attribute names. More If every specified attribute has its
attribute name)*> than one Attribute can be entered. selection the result is TRUE, otherwise
Each separated from the other a it’s FALSE.
comma.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 757
Tag Description Result

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*IfAllAttributes(standard Parameters: attribute names. More If every specified attribute has its
attribute name)*> than one attribute can be entered. selection the result is TRUE, otherwise
Each separated from the other a it’s FALSE.
comma.

This tag can be used in formula rules,


but it can't be used in the Formula
Validator in the Configurator.

<*IsNull(check_expression, Parameters: check_expression is the The value of check_expression is


replacement_value ) *> expression to be checked for NULL. returned if it is not NULL; otherwise,
check_expression can be of any type. replacement_value is returned after
replacement_value is the expression it’s implicitly converted to the type
to be returned if check_expression is of check_expression, if the types are
NULL. replacement_value must be of a different.
type that is implicitly convertible to the
type of check_expression.

12.7 Main Item Price Tag

The purpose of this feature is to develop new product tag that will return product price excluding line items.

On user side of the application, implemented tags return:

• Unit Price of the main item without line items. The tag is <*MainItemUnitPrice*> and it returns the
same value as <*TotalPriceWoLI *>.
• Extended Price of the main item without line items. Tag is <*MainItemPrice*> and it returns
{<*TotalPriceWoLI *> * <* ItemQuantity *>}.

Description Tag

Main Item Price Without Line Items (Unit) <*MainItemUnitPrice*>


Main Item Price Without Line Items (Extended) <*MainItemPrice*>

In Debugger opened for product configuration, tag can be found under Variables.

SAP CPQ Setup and Administration Guide


758 PUBLIC SAP CPQ Tags
12.8 XWS Tag

XWS tag may have one or more parameters. First parameter is function name. Other parameters are optional
and represent parameters passed to the specified function. Other than that, it supports several standard
functions it’s a gateway from Configurator to external resources like web services from another systems.

The standard XWS functions are:

• Candy - <*XWS(Candy)*> Always returns the same constant. Parameters - none. Returns - 100.
• GetProductPrice - <*XWS(GetProductPrice, ProductName)*> applies current product configuration
to the specified product and returns its price. Parameters - ProductName – a name of the product that’s
price is queried. Returns - Price of the specified product after current configuration has been applied to it.
• GetProductCatCode - <*XWS(GetProductCatCode, ProductName)*> applies current product
configuration to the specified product and returns its catalogue code. Parameters - ProductName – a
name of the product that’s catalog code is queried. Returns - Catalog code of the specified product after
current configuration has been applied to it.
• GetProductDescription <*XWS(GetProductDescription, ProductName)*> applies current product
configuration to the specified product and returns its description. Parameters - ProductName – a name
of the product that’s description is queried. Returns - Description of the specified product after current
configuration has been applied to it.
• Iterate - <*XWS(Iterate, Data, Formula)*> applies formula expression from the hint of the Formula
attribute to each part of the comma-separated values (CSV) in the value of the Data attribute and returns
sum of all evaluations. Parameters - Data – name of the attribute that in its value contains the data that
needs to be iterated - Formula – name of the attribute that in its hint contains the formula that needs to be
evaluated on each CSV value from Data attribute. Formula may contain all standard tags and new special
tag {{CurrentValue}} that will be replaced by the current iteration value. Returns - Sum of all evaluated
formulas

Example

<*XWS(Iterate, Data, Formula)*> Value of attribute Data is 1,2,3,4,5 Hint of


attribute Formula is {{CurrentValue}} Will return 15 Sum = 0 Iteration 1 - Sum =
Sum + 1 = 0 + 1 = 1 Iteration 2 - Sum = Sum + 2 = 1 + 2 = 3 Iteration 3 - Sum =
Sum + 3 = 3 + 3 = 6 Iteration 4 - Sum = Sum + 4 = 6 + 4 = 10 Iteration 5 - Sum =
Sum + 5 = 10 + 5 = 15

<*XWS(Iterate, Data, Formula)*> Value of attribute Data is 1,2,3,4,5 Hint


of attribute Formula is <*eval({{CurrentValue}}+1)*> Will return 20 Sum = 0
Iteration 1 - Sum = Sum + <*eval(1+1)*> = 0 + 2 = 2 Iteration 2 - Sum = Sum
+ <*eval(2+1)*> = 2 + 3 = 5 Iteration 3 - Sum = Sum + <*eval(3+1)*> = 5 + 4 = 9
Iteration 4 - Sum = Sum + <*eval(4+1)*> = 9 + 5 = 14 Iteration 5 - Sum = Sum +
<*eval(5+1)*> = 14 + 6 = 20

<*XWS(Iterate, Data, Formula)*> Value of attribute Data is


09/01/2008,09/03/2008,09/08/2008 Hint of attribute Formula is <*Table(select
top 1 Price from Table where StartDate⇐‘{{CurrentValue}}’ and
EndDate>=‘{{CurrentValue}}’)*> Will return sum of prices for selected dates in
Data attribute.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 759
12.9 Global Information (GI) Variables

Global Information (GI) variables contain values that can be read by any product or quote.

This comprehensive way of holding information allows values to be passed among quotes and products
through the simple use of a tag. GI variables can be defined as a quote property, within a product model, or
as a separate cart level aggregate. No matter where the GI was defined, it is available across all categories and
products.

Create GI Variables [page 760]


GI Variables can be created in two ways: explicitly and implicitly.

Retrieve GI Variables [page 761]


Once a GI has been created, it is accessible from any category, product, or generated document.

GI Tags [page 761]

12.9.1 Create GI Variables

GI Variables can be created in two ways: explicitly and implicitly.

• Explicitly, GI variables are created by using the tag setGI in product rules, triggers, and so on.
To create a GI variable within an expression, use the tag <*setGI(key,value)*>. This tag can be used
anywhere that an expression can be built: rules, triggers, calculated fields, and so on. To create the GI,
enter a key by which the value is retrieved, then enter the value that the GI holds. The value can be text or
numeric, from a static value to a dynamic value using another expression. For example, to create a GI in an
expression, enter this formula: <*setGI(k100,100)*> (key = k100, value = 100).
• Implicitly, GI variables are created via cart aggregates and quote custom fields.
To create GI variables this way, go to Setup Quotes Cart Level Aggregates . By clicking Add New, the
window for creating a new GI variable displays. Specify the following:
• GI Name – The key name by which the value of GI is retrieved.
• Expression – Enter value for GI. It can be any text, numerical value, or expression.

A GI variable is also created implicitly when a quote custom field is created in Setup Quotes Custom
Fields (see the chapter on Custom Quote Fields [page 360]).

Related Information

Retrieve GI Variables [page 761]


GI Tags [page 761]

SAP CPQ Setup and Administration Guide


760 PUBLIC SAP CPQ Tags
12.9.2 Retrieve GI Variables

Once a GI has been created, it is accessible from any category, product, or generated document.

Retrieving a value can be done by simply using the tag <*GI(key)*>. This tag can be used anywhere where
the value of the GI is needed. In addition, GI variables are accessible by Microsoft Word generated documents
(see Create Document Generation Template [page 179]). This is done by using the tag «ST_GI(key)». Using
this tag in a word quote document will display the value of the specified GI variable.

Retrieve Customer Information

The only way to get customer info for the configuration is using the <*AUX*> tag, customer info table and
<*GI(customerID)*> as a condition. When a user does not select a customer, but when the customer gets
populated from CRM, it is possible to get customer ID using GI tag <*GI(CUSTOMERID)*>.

Related Information

GI Tags [page 761]

12.9.3 GI Tags

Tag Description

<*setGI(key,value)*> Sets Global Info value in a map with key.

<*GI(keyV)*> Gets Global Info from global cashe under key, evaluates to
null if there is no info under key.

<*GI*> Sets Global Info value in a map.

<*remGI(key)*> Removes key.

<*clearGI*> Removes all globals.

<*TESTGI(keyValue)*> Returns 1 if GI(keyValue) is defined else returns 0


purpose: it is more convinient to test for the existence of
a variable before using it in calculations/conditions.

<*GI(CUSTOMERID)*> Return Customer ID.

<*getAttNumVal(attribute name)*> Read attributes numeric value directly from the database
(from the cart items table).

<*GI(QUOTESTATUS)*> Returns information about Quote Status. If the quote


is not yet created then ‘default status’ (order status
marked as default) will be returned. If a user changes
the status of a quote and performes an action that is

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 761
Tag Description

not marked as autoreconfigure, GI(QUOTESTATUS) will


remain unchanged.

Related Information

Create GI Variables [page 760]


Retrieve GI Variables [page 761]

12.10 Formula Validator

Tags and expressions are a powerful part of SAP CPQ. To help reduce errors and simplify the process, the
Formula Builder is available to create expressions.

To access the Formula Builder, click the button next to the field where the expression is applied.

This button is available anytime an expression can be used. Clicking a Formula Builder button brings up the
Formula Builder window. Formula Builder changes according to the settings the expression is created for.

For example, if an expression is being added for a rule or trigger [page 69], then an additional Triggers/Rules
box will be displayed with the Formula Builder. In addition, if you are building an expression that is related to a
quote, such as quote visibility rules, then the window will look like the figure on the left. The basic principles for
using the Formula Builder are the same despite what setting the expression is being created for.

The Formula Builder window is divided into two sections. The main box at the bottom is where the expression
is formed. Expressions can be typed in manually, if necessary, and in certain instances, phrases can be entered
into the box to be displayed to the user. The Check Syntax button checks the expression to ensure that the tags
have been joined correctly and that all punctuation is correct. Any errors are displayed at the bottom of the
window. It's a good idea to check an expression before inserting it to ensure it functions correctly and that it
doesn’t produce an error for the user. When finished, the Update button inserts the created expression into the
field.

SAP CPQ Setup and Administration Guide


762 PUBLIC SAP CPQ Tags
The top section of the Formula Builder windows contains boxes to build the expression. In most cases, to
build an expression, you select the attribute, value, sequence, and so on, that an action is performed on, then
select the action. The top section is also categorized. To the right, you have operators, and to the left you
have context-sensitive options divided into 3 tabs (Variables, Actions / Conditions (depends on the context),
Sequences). Note that you sometimes see Actions, while other times you see Conditions as the second tab,
depending on the context. Sometimes both are unavailable. When the Syntax Checker opens, it activates the
tab that contains the most appropriate options for the given context.

An Select Operator box is available in every Formula Builder window to create conditional statements
and Boolean logic. Click the operator in the box and then click Insert Operator into the expression. In
most cases, the operator is added in its full syntax, with all parenthesis, and you only need to fill in
the parameters. This formula is an example of an expression using an operator: [AND](<*ANYSEL(Hard
Drive:HD200)*>,<*ANYSEL(Memory:2GB)*>). It states that the Hard Drive attribute with the value
HD200 AND the Memory attribute with the value 2GB need to be selected in order for this expression to be true.

To create an expression in the Formula Builder, select an action/condition/variable, then (if needed) select
attributes. Attribute values can also be selected for the expression if necessary. Click the Insert button to

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 763
add the new tag to the expression. Sequences can also be used in expressions by selecting the sequence
from the Select Operator box in the Sequence tab, then selecting the sequence for it (see the chapter on
SequencesSequences [page 107]).

The attributes displayed in the box are only the ones selected for that product or category, depending on what
you are creating the expression for (applies to all Formula Builder windows. If a certain object, attribute or an
attribute value isn’t available, make sure it’s checked, selected, or even created for the settings the expression
is being created for.

The actions are also different for each Formula Builder window. For information on what an action does, check
Attribute Data TagsAttribute Data Tags [page 741]. This topic also contains information on the proper way to
join tags and create expressions. While the Formula Builder aids in the process of creating expressions, tags
need to be joined and built correctly in order for the expression to function accurately.

Note that building some variables is complicated if you use syntax checker alone. Such is the case with <*
CTX(…) *> and <* TABLE(…) *> objects. When you need to insert these variables, select them from the list.
A new button appears (for example Construct TABLE tag), and clicking it brings up a new popup window where
you can build your complex tag.

Once you have finished building your complex tag, you can insert it into syntax builder window and continue
building the rest of your formula. For more information on complex tags and their builders, refer to Table and
List Tags [page 766] and CTX Syntax BuilderCTX Syntax Builder [page 765].

CTX Tag Visualization

Each Formula Builder also has a Visualize button that can ease formula creation.

Since SAP CPQ formulas are essentially expressions and not the algorithm (the program), a tree control can be
used to display them. Tag names are colored blue and operators are colored green.

Tags are displayed as nodes that can have children nodes if the tag has arguments. If another tag is in the
argument of a tag, same definition is recurrently applied.

<*AUX(price, Price, Part_Number,<*ValueCode(Cell Kits)*>)*>

As exception, tags that take comma/colon and comma/colon/bar arguments are shown differently.

<*ANYSEL(Bulkhead Connector:IE6MTImp,Housing Material:Delrin)*>

Operators are shown as a node with parameters as child nodes.

[OR](a,b,c)

Special operator IF is shown as a main node with tree child nodes representing condition, true and false
branches.

[IF](some condition){do if true}{do if false}[ENDIF]

A real, complex formula can look like this:

[IF]([OR]([EQ](<*VALUECODE(Product Code Identifier)*>,A0200B),[EQ]


(<*VALUECODE(Product Code Identifier)*>,A0200B),[EQ](<*VALUECODE(Product Code
Identifier)*>,A0200B))){0}{<*AUX(Prices, ListPrice, ProductPartCode, CON-
H0004-1)*>}[ENDIF]

SAP CPQ Setup and Administration Guide


764 PUBLIC SAP CPQ Tags
CTX Syntax Builder [page 765]
CTX syntax builder is a page on which you can generate your CTX expressions. It’s accessed from the
Formula Builder when CTX is selected from the list of available variables.

Table and List Tags [page 766]


The <* TABLE (…) *> and <* LIST (…) *> tags are used to fetch data from data tables uploaded
by customers. Users can use SQL aggregate functions: MIN, MAX, AVG, SUM, COUNT, as well as match
upper and match lower. You can also retrieve records greater than some entered value.

12.10.1 CTX Syntax Builder

CTX syntax builder is a page on which you can generate your CTX expressions. It’s accessed from the Formula
Builder when CTX is selected from the list of available variables.

It only allows you to select tags and objects that make a valid formula. CTX objects are selected from dropdown
lists, until you select all required elements. As you select objects, the CTX formula is dynamically rebuilt to
display your CTX formula.

As you select CTX objects from the dropdown lists, there’s a possibility that you encounter objects, which
require an argument to be entered. You can easily spot these types of objects as another dropdown list (or free
input text field) displays to the right of the one you've selected.

Some objects don't have predefined argument values available. For these objects, a free input textbox is shown
instead of a dropdown list. You need to enter the argument in that textbox. You can switch the argument type
between textbox and dropdown list at any given time, by clicking the button next to the dropdown list/textbox.
If there are no predefined arguments, when you switch to a dropdown list from a textbox, it can contain no

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 765
values to select from. When you’re typing an argument into the textbox, you need to click the Refresh button
in order to see the resulting formula with the new argument. This scenario doesn't occur with the dropdown
arguments – the formula refreshes as soon as you select it.

When you've finished building your formula, click Insert to have it transferred to the syntax checker (that
invoked CTX syntax builder). Make sure that you've made selections in every offered dropdown list. If you
leave any dropdown in –select– state, your formula is incomplete. If you try to insert such a formula, an error
message displays, and CTX syntax builder window can't be closed, leaving you the opportunity to fix your
selection. This way, there’s small possibility that you manage to build a CTX formula that isn’t valid.

12.10.2 Table and List Tags

The <* TABLE (…) *> and <* LIST (…) *> tags are used to fetch data from data tables uploaded by
customers. Users can use SQL aggregate functions: MIN, MAX, AVG, SUM, COUNT, as well as match upper and
match lower. You can also retrieve records greater than some entered value.

 Note

The only difference between the table tag and the list tag is that the table tag retrieves data from a table cell
while the list tag retrieves data from an entire column. For example, if you are retrieving names of customer
whose country/region of origin is Spain, the list tag will retrieve all matching names, and the table tag will
retrieve just the first name whose country/region of origin is Spain.

Additionally, both tags retrieve all types of data (dates, numbers, strings, and so on).

The descriptions and explanations on this and the following pages apply to both the list tag and the table tag.

Supported Functions for TABLE and LIST Tags

The TABLE and the LIST tags support the following functions:

• EXACT
A default function. It returns anything that is selected, without any data filtering. It's similar to the AUX tag
behavior - the difference is that AUX must use the = operator for conditions. The typical TABLE tag based
on the EXACT function looks like this:
<* TABLE (SELECT price FROM priceBook WHERE productId = 5 ) *>
The EXACT function reveals a classic SQL Select statement. If the statement returns more than one record
from the database, only the first one returned is the result of the <* TABLE(…) *> tag. If you need the last
one, you can change sorting direction. Since there’s no guarantee on order SQL server return records, if
you don't use sorting, it's best to prepare data and use queries in such way that they return unique records.
• MIN
A function that returns minimal value from all the results that are meeting the given criteria. The typical
TABLE tag based on MIN function looks like this:
<* TABLE (SELECT MIN (price) FROM priceBook WHERE productId = 5 ) *>
The MIN function returns one record, the minimal one among all the records that satisfy given conditions.
• MAX
A function that returns maximal value from all the results that are meeting the given criteria. The typical
TABLE tag based on MAX function looks like this:
<* TABLE (SELECT MAX (price) FROM priceBook WHERE productId = 5 ) *>

SAP CPQ Setup and Administration Guide


766 PUBLIC SAP CPQ Tags
The MAX function returns one record, the greatest one among all the records that satisfy the given
conditions.
• COUNT
A function that counts all records that meet the given conditions. The typical TABLE tag based on the
COUNT function looks like this:
<* TABLE (SELECT COUNT (price) FROM priceBook WHERE productId = 5 ) *>
The COUNT function returns one record.
• AVERAGE
A function that selects all records that meet the given conditions, and then calculates average value from
the results. The typical TABLE tag based on AVERAGE function looks like this:
<* TABLE (SELECT AVG (price) FROM priceBook WHERE productId = 5 ) *>
The AVERAGE function returns one record.

The returned results can be sorted Ascending, Descending, or not sorted at all. Only the column that contains
results can be sorted. When match upper or match lower condition operator is used, sorting is first
performed by the column that is used in condition, and then by resulting column.

Construct Table and List Tags [page 767]


Table and list tag builders are invoked from the Formula Builder.

Table and List Tag Conditions [page 769]


The <* TABLE(…) *> tag and the LIST tag support adding multiple conditions to your data query.
The typical condition is defined by the name of the column being tested, and by the matching criteria.

Table and List Tag Operators [page 769]


Operators are words or characters typically used in SQL statements as conjunctions for several
conditions.

SETLISTSEPARATOR Tag [page 771]


SETLISTSEPARATOR tag is used for setting the desired separator between the values retrieved via the
list tag.

12.10.2.1 Construct Table and List Tags

Table and list tag builders are invoked from the Formula Builder.

On the list of tags, there’s a TABLE tag listed. When it’s selected, a Construct TABLE tag button appears. This
button is visible only when the TABLE tag is selected in the list of tags.

 Note

Everything described here is applicable for the LIST tag as well, but we’ll use the TABLE tag as an example.

Clicking Construct TABLE tag opens the Table Tag Builder window.

In Table Tag Builder, you first need to select a table from which you’re fetching the data. It's the dropdown
labeled From Table. Next to the dropdown is the Preview Table Data button, which enables you to preview the
first 25 rows of your uploaded table. It's meant to allow administrators to construct TABLE tags by showing
them data sample of the selected table.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 767
The table shows only first 25 records. It's meant to preview table structure rather than check table data. Since
custom tables can be huge, it's not recommended to fetch large amounts of data since it tends to result in
timeouts and stress to server.

After selecting the table, you need to select a function that returns data. The dropdown list you need is labeled
Return. The default is EXACT function. Afterwards, you need to choose a column from which you wish to fetch
the data from the From Column dropdown list.

The data can be sorted by that column, but it's optional. If you like, you can choose the sorting type to be
ascending, descending, or to leave it as None, which is a default option. If you want sorting to be precise, you
need to define the data type in that column (numbers, text, or dates). The data type needs to be set correctly,
or else you can get incorrect sorting. For example, f you sort numbers as if they were text, the output is: 1,
10, 2, 3, 4, 5,…

When you define the column you wish to use, you need to set the conditions on that column, in order to fetch
only the rows that you need. You can add as many conditions as you wish. New conditions are added by clicking
on Add New Condition link under the previous condition. Another set of fields that you need to populate is
added and, in this way, another condition is defined. A typical condition is built by selecting a column name
from the source table, choosing an operator used for data comparison, and, finally, defining a reference value.
For example, if you wish to get all records where part number is abcd, the reference value can be a constant –
abcd, or it can be a dynamic formula, like <* CATCODE(attribute) *>.

You have a Syntax Builder button there, so you can easily construct formulas for your conditions. Every
condition has a Column Type. It’s necessary because the SQL that fetches your data is different depending on
whether the comparison is done with numeric values, text values, or date values. If an error message displays
when you test the formula, recheck your column types. There’s a possibility that you’re fetching a column
whose values can’t be converted to the data type you wish. For example, you can't convert abc to the numeric
type, but you can enter numbers that correspond to that string.

After defining the data and the conditions, you can click Build Formula link, and you can preview the resulting
TABLE tag constructed. The area that displays your generated TABLE tag is editable, so you can alter the SQL
yourself. However, if you alter SQL manually, and then click Build Formula again, your complete formula is lost
and replaced by newly generated TABLE tag formula, based on what you selected from dropdown lists. Thus,
make sure that you alter SQL manually only once you've defined it enough with the Table Tag Builder. You can
use the Test Formula link when you finish editing the TABLE tag. When you click on it, your SQL is executed and
you’re presented with the data it returned. If you had an error in your SQL, it doesn't return any data. Instead,
an error message displays, giving you a clue what you did wrong.

While testingTABLE tags, if you used any formulas in your conditions, you must replace them temporarily with
values you expect formulas to evaluate to. For example, if you had a condition that contains “product_color
= ';#;<* CATCODE(selected_color_attribute) *>;#;'”, you must alter your condition to state:
-“product_color = 'blue'“. This alteration is necessary, since the CATCODE formula (and all other
formulas) is context-dependent, and can't be parsed in the Table Tag Builder. In the sample above, it simply
doesn’t know about the “selected_color_attribute” attribute, so it can't return its catalog code. Once
you're satisfied with the results, you can click on Use This Formula button, and your TABLE tag is checked for
errors. If it's OK, it's transferred to the Syntax Checker that invoked the Table Tag Builder.

Related Information

Table and List Tag Conditions [page 769]

SAP CPQ Setup and Administration Guide


768 PUBLIC SAP CPQ Tags
Table and List Tag Operators [page 769]
SETLISTSEPARATOR Tag [page 771]

12.10.2.2 Table and List Tag Conditions

The <* TABLE(…) *> tag and the LIST tag support adding multiple conditions to your data query. The typical
condition is defined by the name of the column being tested, and by the matching criteria.

 Note

Everything described here is applicable for the LIST tag as well, but we’ll use the TABLE tag as an example.

The typical example is: “give me price of the product that has a catalog code ABC”. Price is defined in one
column, and every price has its catalog code in the catalog_code column. So, our criteria instructs that
catalog_code is ABC. Use the following query in SQL:

SELECT price FROM table WHERE catalog_code='abc'

Now, we can use multiple conditions. For example, if quantity affects the price, we need to treat the quantity
column in the same table. The SQL now looks like this:

SELECT price FROM table WHERE catalog_code='abc' AND quantity>5

In this way, we can add as many conditions as we like. They’re all concatenated with AND operator, meaning
that all the conditions must be met in order to fetch the data.

Related Information

Table and List Tag Operators [page 769]


SETLISTSEPARATOR Tag [page 771]
Construct Table and List Tags [page 767]

12.10.2.3 Table and List Tag Operators

Operators are words or characters typically used in SQL statements as conjunctions for several conditions.

 Note

Everything described here is applicable for the LIST tag as well, but we’ll use the TABLE tag as an example.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 769
Depending on data types you expect in a condition column, not all condition operators are available. The
supported operators are:

Operators Data Types

= Text; number; Date

> Number; Date

< Number; Date

>= Number; Date

⇐ Number; Date

begins with Text

ends with Text

matches LIKE clause in SQL (for strings); Text

match lower (inclusive) Number; Date

match lower (noninclusive) Number; Date

match upper (inclusive) Number; Date

match lower (noninclusive) Number; Date

• begins with
This operator is typically used to search string columns. It’s used to search if there’s data in a column that
begins with string provided as a parameter. This only works on text column types. It’s translated to the SQL
LIKE clause, with % at the end - searching for strings that begin with preset parameter and can end with
anything.

 Example

SELECT price FROM products WHERE product_name like 'ab%'

• ends with
This operator is typically used to search string columns. It’s used to search if there’s data in a column that
ends with string provided as a parameter. This only works on text column types. It’s translated to the SQL
LIKE clause, with % at the beginning – searching for strings that end with preset parameter and can begin
with anything.

 Example

SELECT price FROM products WHERE product_name like '%ab'

• matches
This operator is typically used to search string columns. It’s used to search if there’s data in a column that
contains string provided as a parameter. This only work on text column types. It’s translated to the SQL
LIKE clause, with % at the beginning and with % on the end – searching for strings that begin with anything
and end with anything, but must contain provided string.

 Example

SELECT price FROM products WHERE product_name like '%ab%'

• match lower

SAP CPQ Setup and Administration Guide


770 PUBLIC SAP CPQ Tags
This only works on numeric and date column types. This operator is typically used for doing some sort of
rounding of the input parameter in condition.

 Example

There's a table that contains prices for products. It typically has 3 columns: product_catalog_code,
order_quantity, and price. For a given product, price varies depending on quantity. However, in
the prices table, there are prices defined for quantities 1, 5, 10, 50. So, since there isn't “7” as a
value for quantity in prices table, you need to set up a condition that uses the nearest lower value for
the quantity column. In this case, select column order_quantity and the match lower operator.
Enter a formula that reads quantity attribute. (that is the source of “7” in the previous example). If
you click the Rebuild button, you get SQL that looks like: SELECT TOP 1 price FROM table WHERE
quantity<7 ORDER BY quantity DESC. This way you have set up the condition to form a price
based on quantity. You still need additional condition that identifies the product by part number (that
condition uses the typical = operator). When this condition is added, you have a complete query:

SELECT TOP 1 price FROM table WHERE quantity<7 AND product_catalog_code='abc'


ORDER BY quantity DESC

The query finally fetches the price for a given catalog code and quantity “5”. (first one less than the
input value - 7).

• match upper
This only works on numeric and date column types. This operator is similar to match lower. The only
difference is that it gets the first record that has greater value than the given reference. If you use the
example for match lower as reference, match upper selects the row with quantity value of 10 (the first
one greater than 7).

 Example

SELECT TOP 1 price FROM table WHERE quantity>7 ORDER BY quantity ASC

• Inclusive and noninclusive options define if you use < operator or < = operator. The choice between these
options depends on whether you wish the formula to include a boundary from a condition, or not.

Related Information

SETLISTSEPARATOR Tag [page 771]


Table and List Tag Conditions [page 769]
Construct Table and List Tags [page 767]

12.10.2.4 SETLISTSEPARATOR Tag

SETLISTSEPARATOR tag is used for setting the desired separator between the values retrieved via the list tag.

<*SETLISTSEPARATORTAG(…)*> tag should always be used in pair: the first tag sets the desired separator,
and the second tag resets to the default separator “|”.

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 771
This tag separates all types of data contained in a table (numbers, dates, characters, strings, and so on).

Example

The list tag <* LIST ( SELECT Name FROM Customer_Address WHERE Country = 'Spain' ORDER
BY Name ASC ) *> retrieves the list of names from the custom table Customer_Address when the country/
region equals Spain, and sorts the names in ascending order.

The results are retrived and displayed as in the image:

To change the default separator in the list in this example, add the SETLISTSEPARATOR tag:
<*SETLISTSEPARATOR(;)*> <* LIST ( SELECT Name FROM Customer_Address WHERE Country
= 'Spain' ORDER BY Name ASC ) *> <*SETLISTSEPARATOR(“|”)*>.

SAP CPQ Setup and Administration Guide


772 PUBLIC SAP CPQ Tags
The results are retrieved and displayed as in the image:

Related Information

Construct Table and List Tags [page 767]


Table and List Tag Conditions [page 769]
Table and List Tag Operators [page 769]

SAP CPQ Setup and Administration Guide


SAP CPQ Tags PUBLIC 773
13 Audit Trail

In this section, you can learn more about the logging of actions performed by administrators and users. You
can also learn about change sets, which are used for tracking changes performed by administrators.

Audit Trail Logs [page 774]


SAP CPQ tracks all actions that administrators and users perform throughout the application and logs
them in the dedicated section of the Setup. The audit trail logs changes that are performed either
directly in the application or via API.

Change Set [page 781]


Change Set is a feature that increases traceability of changes (in Setup or via scripting) and ensures
that appropriate recording of changes occurs in the relevant change management procedures.

13.1 Audit Trail Logs


SAP CPQ tracks all actions that administrators and users perform throughout the application and logs them
in the dedicated section of the Setup. The audit trail logs changes that are performed either directly in the
application or via API.

Any logged information can be found in the following tabs in Setup Audit Trail Audit Trail :

• Admin Actions Audit Trail [page 776]


• User Actions Audit Trail [page 776]
• Products Audit Trail [page 777]
• Attributes Audit Trail [page 778]
• Pricebooks Audit Trail [page 779]
• Custom Tables Audit Trail [page 779]

The audit trail permanently retains records. However, if you want logged information to be automatically and
permanently deleted, you can specify data deletion intervals in Setup Security Data Deletion Audit Trail
Deletion . See Audit Trail Deletion [page 803] for more information.

Filtering and Searching

You can search the audit trail records by performing a global search, an advanced search or by using the

quick filter. Additionally, you can select which audit trail columns are visible by clicking , selecting or
unselecting individual columns and clicking Save.

 Note

The timeout for searching audit trail data is 5 minutes. If you filter audit trail records, but there is an
extensive number of records logged, the search automatically ends after 5 minutes if it wasn't completed in

SAP CPQ Setup and Administration Guide


774 PUBLIC Audit Trail
that period. If you experience a timeout, we recommend that you filter the records using the Date column,
which is indexed and more likely to provide the requested results.

Global Search
To perform a global search across all tabs, follow the steps.

1. Click Global Filters in the top-right corner of the page.


A pop-up window appears with search fields: Change Set ID, User, From, and To.
2. Enter the search terms in the dedicated field or fields.
Alternatively, select the From and To dates to filter the records created between those dates.
All the audit trail grids are now filtered according to your search criteria. You can search multiple fields at
the same time.

Advanced Search
The advanced search filters only the currently open audit trail tab. It is conducted directly in column headers
and allows you to search every column in the grid.

To perform an advanced search by columns, follow these steps.

1. Click .
The grid with columns appears. Each column in the grid contains a dedicated search box.
2. Enter your search criteria in any of the search boxes.
A search box is available for every column in the grid (a Search by Period toggle and From and To fields are
available for the Date column). You can search multiple fields at the same time.
The search results are displayed in the corresponding columns.
The currently open audit trail grid is now filtered according to your search criteria.
Click X in the search box to remove the search criteria you entered.

Alternatively, you can use the quick filter to instantly search the currently open audit trail tab. The quick filter
works the same way as the advanced search, except that it only filters by the parameters listed in the search
bar. The parameters are specific for every audit trail tab.

Audit Trail Search Logic


You can combine the search filters in the following ways:

• If value A is entered in the global search, and value B is entered in the advanced search, the records in the
currently open tab are filtered by the value B. However, all the other audit trail tabs are filtered by value A.
• If the quick filter is applied on any audit trail tab, it overrides all other search filters, both global and
advanced.

Related Information

Change Set [page 781]


Logged Data [page 780]

SAP CPQ Setup and Administration Guide


Audit Trail PUBLIC 775
Audit Trail Deletion [page 803]

13.1.1 Admin Actions Audit Trail

The system tracks changes performed by administrators in various sections of the Setup and displays them in
the Admin Actions tab.

Additionally, actions performed by users with special administrator permissions in the User Menu are also
logged in the Admin Actions tab (this doesn’t include the User Page, which is available to all users and covered
by User Actions in terms of logging). See Logged Data [page 780] for more information about what is logged in
the audit trail.

Log details are displayed in the following columns:

• Change Set ID – the ID of the change set [page 781] that was active when the change was performed. All
changes are grouped under the currently active change set.
• Change ID – the ID of the specific change inside the change set.
• Entity – the type of SAP CPQ object that is being changed (for example, Application Parameter).
• Entity ID – the unique identifier of the specific SAP CPQ object that is being changed (for example, the
name of a specific application parameter).
• Action – any change carried out by the administrator or the user (such as Add, Change, or Delete). Post
actions attached to an action are also logged here.
• Field – the field whose value has been changed.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the administrator or user who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

Related Information

Audit Trail Logs [page 774]


Logged Data [page 780]

13.1.2 User Actions Audit Trail

Here, administrators can track changes performed by SAP CPQ users on the user side of the application, in
high detail and real time. Changes are logged in both quote engines.

See Logged Data [page 780] for more information about what is logged in the audit trail.

Log details are displayed in the following columns:

SAP CPQ Setup and Administration Guide


776 PUBLIC Audit Trail
• Quote – the number of the quote on which the change was performed.
• Quote Revision – the name and number of a specific quote revision.
• Quote Status – the status of the quote when the action was performed.
• Quote Item – the ordinal number of a specific item in the quote on which the change was made.
• Product – a product that was changed by a user (for example, by configuring it).
• Attribute – an attribute that was changed by a user (for example, while configuring a product).
• Action – any change carried out by the user (such as logging in, creating a quote or changing the attribute
quantity).
• Field – the field whose value has been changed.
• Page – a web location where the change has taken place.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the user who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

Related Information

Audit Trail Logs [page 774]


Logged Data [page 780]

13.1.3 Products Audit Trail

This functionality allows administrators to track changes performed on products and guided selling.
Specifically, the changes logged here are product and guided selling definition changes performed in the Setup.

See Logged Data [page 780] for more information about what is logged in the audit trail.

Log details are displayed in the following columns:

• Change Set ID – the ID of the change set [page 781] that was active when the change was performed. All
changes are grouped under the currently active change set.
• Change ID – the ID of the specific change inside the change set.
• Product – a product that is being changed, usually goods or services (for example, a laptop or a software
license).
• Product System ID – the system ID of the product.
• Attribute – the specific attribute on the product that is being changed (for example, a CPU as an attribute
of a laptop product).
• Attribute System ID – the system ID of the attribute.
• Attribute Value – the value of the attribute (for example, any of the CPU models offered to users as values
for the attribute CPU).
• Rule/Message/Script –the rule or message triggered upon product configuration.

SAP CPQ Setup and Administration Guide


Audit Trail PUBLIC 777
• Action – any change carried out by the administrator (such as Add, Change or Delete).
• Field – the field whose value has been changed.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the administrator who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

Related Information

Products [page 54]


Audit Trail Logs [page 774]

13.1.4 Attributes Audit Trail

This functionality allows administrators to track all changes performed on attributes. Specifically, the changes
logged here are attribute definition changes performed in the Setup.

See Logged Data [page 780] for more information about what is logged in the audit trail.

Log details are displayed in the following columns:

• Change Set ID – the ID of the change set [page 781] that was active when the change was performed. All
changes are grouped under the currently active change set.
• Change ID – the ID of the specific change inside the change set.
• Entity – the type of SAP CPQ object that is being changed (such as Attribute or Attribute Container
Content).
• Entity ID – the identity of the specific SAP CPQ object that is being changed (such as the specific system ID
of an attribute).
• Action – any change carried out by the administrator (such as Add, Change, or Delete).
• Field – the field whose value has been changed.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the administrator who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

Related Information

Attributes [page 19]


Audit Trail Logs [page 774]

SAP CPQ Setup and Administration Guide


778 PUBLIC Audit Trail
13.1.5 Pricebooks Audit Trail

This functionality allows administrators to track all changes performed on pricebooks in the Setup.

See Logged Data [page 780] for more information about what is logged in the audit trail.

Log details are displayed in the following columns:

• Change Set ID – the ID of the change set [page 781] that was active when the change was performed. All
changes are grouped under the currently active change set.
• Change ID – the ID of the specific change inside the change set.
• Pricebook – the name of the pricebook that was changed.
• Part Number – the part number of a pricebook entry.
• Action – any change carried out by the administrator (such as Add, Change, or Delete).
• Field – the field whose value has been changed.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the administrator who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

 Note

Logging can be disabled for changes on pricebooks by setting the application parameter Audit Trail for
Pricebooks to Audit Disabled. This can improve system performance when working with pricebooks.

Related Information

Pricebooks [page 493]


Audit Trail Logs [page 774]

13.1.6 Custom Tables Audit Trail

This functionality allows administrators to track all changes performed on custom tables in the Setup.

See Logged Data [page 780] for more information about what is logged in the audit trail.

In custom table definition, you can define the level at which changes are logged in Audit Trail Level. You can
learn more in Custom Table Logging [page 105].

Log details are displayed in the following columns:

• Change Set ID – the ID of the change set [page 781] that was active when the change was performed. All
changes are grouped under the currently active change set.
• Change ID – the ID of the specific change inside the change set.

SAP CPQ Setup and Administration Guide


Audit Trail PUBLIC 779
• Entity – the type of SAP CPQ object that is being changed (such as Custom Table or Custom Table Entry).
• Entity ID – the identity of the specific SAP CPQ object that is being changed (such as the name of a custom
table or the ID of a custom table entry).
• Action – any change carried out by the administrator (such as Add, Change, or Delete).
• Field – the field whose value has been changed.
• Previous Value – the value that was in place before the change.
• New Value – the value that is in place after the change.
• User – the name and the username of the administrator who performed the change.
• Date – the date and the time when the change was performed.
• Performer IP Address - IP address of a user who is accessing the application

Related Information

Custom Tables [page 102]


Audit Trail Logs [page 774]

13.1.7 Logged Data

This topic explains where different types of data are logged, and which sections are not covered by the audit
trail.

The Attributes, Pricebooks, and Custom Tables tabs log details about every action performed on products,
attributes, pricebooks and custom tables, respectively.

The Products tab logs all actions performed in regards to Products and Guided Selling.

The Admin Actions tab logs all actions performed in the Setup with the following exceptions:

• Actions performed on products, attributes, pricebooks, and custom tables are logged in their respective
logs.
• Actions performed in the following section of the Setup aren’t logged:
• General Report Module

The User Actions tab logs all actions performed by users on the user side of the application, with the following
exceptions:

• Configurator (changes made via API aren’t logged)


• Collaboration (changes made via API aren’t logged)
• Favorites (changes made via API aren’t logged)
• Add Items in Bulk

SAP CPQ Setup and Administration Guide


780 PUBLIC Audit Trail
Related Information

Audit Trail Logs [page 774]


Change Set [page 781]

13.2 Change Set

Change Set is a feature that increases traceability of changes (in Setup or via scripting) and ensures that
appropriate recording of changes occurs in the relevant change management procedures.

A change set encompasses a group of changes that are performed in a single set. Each change in SAP CPQ is
logged in the Audit Trail [page 774] as a part of a change set.

 Note

Change sets can only be created in development and testing SAP CPQ environments. If you want a change
set to be displayed in Setup in sandbox and production environments, you need to deploy it from the lower
environment once the changes have been tested and applied there.

Change sets can be active and inactive. Of all the active change sets, only one can be in use at a time. You can
select the change set you wish to use in the Change Set dropdown in Setup. Once you select a change set, all
changes that you apply to SAP CPQ from that moment on are logged in Audit Trail under that change set. The
inactive change sets don’t appear in the dropdown, but you can find them in Setup Audit Trail Change
Set (where all change sets created by administrators are listed) and activate them again. Changes can’t be
logged under an inactive change set.

 Note

Using change sets to improve tracking of changes is optional. If there are no change sets in your
environment other than DEFAULT (CPQ-1), the Change Set dropdown isn’t displayed in Setup.

The default change set is selected every time you log into SAP CPQ regardless of whether a different change
set was previously selected or not. If you make some changes under a custom change set, exit the Setup and
then enter it again without logging out, the custom change set you have previously used is the selected one.

Change Set and API

If a change is performed via API, and you wish to assign it to a change set, enter the change set ID in the
header for each API call. You can only use IDs of active change sets. The key entered in the header should be
ChangeSetId, and its value should be the value of that change set ID (for example, CPQ-10). This is the list of
affected APIs:

• AUXTableAdministrator
• CompanyAdministration

SAP CPQ Setup and Administration Guide


Audit Trail PUBLIC 781
• ImportMaterialsFromERP
• SimpleProductAdministration
• UpsertPricebook
• UpsertPricebookWithDistributionChain
• UserAdministration
• CustomerAdministration

Related Information

Audit Trail Logs [page 774]


Create Change Set [page 782]
Deploying a Change Set [page 783]

13.2.1 Create Change Set

This topic lists the two ways to create change sets.

You can access the Change Set dropdown in the Setup. The names and IDs of active change sets in your
environment are displayed here.

1. Click next to the Change Set dropdown in Setup.


A popup window displays.
2. Enter the name of a new change set in the indicated field.
3. (Optional) Enter the description of a new change set in the indicated field.
4. Click Save.
Once you create this change set, it’s automatically activated.

Alternatively, you can:

1. Go to Setup Audit Trail Change Set .


The grid containing all available change sets (except the default one) displays. It has the following columns:
Edit, Active, Name, Description, Change Set ID, Date, and User.
2. Click New Change Set.
A popup window displays.
3. Enter the name of a new change set in the indicated field.
4. (Optional) Enter the description of a new change set in the indicated field.
5. Click Save.

6. (Optional) To edit column visibility, click .


The new change set is now listed in the Change Set grid. Once created, the change set can be edited.

 Note

Currently, change sets can’t be deleted, but they can be deactivated with the Active toggle switch.

SAP CPQ Setup and Administration Guide


782 PUBLIC Audit Trail
Related Information

Change Set [page 781]


Audit Trail Logs [page 774]

13.2.2 Deploying a Change Set

It is possible to deploy active change sets from development and testing to sandbox and production
environments.

In this initial phase of improved SAP CPQ transport mechanism, there are two ways to deploy change sets to
target environments. You can either do it manually or via a deployment package.

Manual Deployment

Once you click the Deploy button in Setup Audit Trail Change Set , a popup window displays. You are
prompted to select a target environment and a change set or change sets that should be deployed to it.

• Target environments – a list of connected environments ( Deploy/Send Changes Deployment Setup


Connected Environment . If there are no connected environments, you need to establish a connection
between environments first.
• Change set grid – a grid with all active change sets. You can select change sets you wish to deploy here.

When a change set is deployed from one of development or testing environments, it will appear in the target
environment’s list of active change sets. No changes previously performed in the source environment will be
applied to that environment automatically or logged in the target environment’s Audit Trail.

Example

An administrator selects the CPQ Test change set in the source environment, performs some changes
manually and sends that change set's definition to the target environment by clicking the Deploy button in
the Change Set page. Then an administrator selects that change set on the target environment and applies the
same changes manually there.

Deployment Package

To deploy a change set via a deployment package, navigate to the Deployment Packages tab in Setup
General Deploy/Send Changes Deployment Setup in the source environment and click Create Package.
There, you can select the change set and deploy the package to the target environment.

SAP CPQ Setup and Administration Guide


Audit Trail PUBLIC 783
The Change Set dropdown list is blank by default and selecting a change set from the list is mandatory.
However, the field isn’t visible if there are no active change sets in the environment.

If the change set with that ID already exists in the target environment, it is preselected in Setup and all changes
that were deployed in the package are applied in the target environment and logged as a part of that change
set. If the change set does not exist in the target environment, it is created, preselected and all changes
associated with it are applied in the target environment and logged in that environment's Audit Trail.

 Note

If an administrator performs one change in the source environment as a part of the Change Set A and
another change as a part of the Change Set B, there are no restrictions which prevent both changes to
be sent as a part of the Change Set B if they are deployed in the same package when Change Set B was
selected in Setup.

Related Information

Change Set [page 781]


Audit Trail Logs [page 774]

SAP CPQ Setup and Administration Guide


784 PUBLIC Audit Trail
14 Delegation of Authority

When delegating authority for a setup feature to SAP CPQ users, you allow them to manage features that are
available only to administrators. This way users become local administrators for specific setup functionalities.

In companies where a local administrator manages a part of setup, the process is optimized, and the
turnaround is faster. Also, limiting data access to local administrators enhances its security.

Example

In a XYZ company with offices around the globe, there are a number of administrators distributed per
countries/regions. An office in Sweden has monthly special offers for specific customer groups, so they require
different price books regularly. The administrator can’t handle all the requests for importing new price books in
time, so he delegates authority for managing price books to a user located in the Swedish office. The process
is now more optimized as the local administrator can upload new price books into the application almost in real
time.

In the Delegation of Authority section in Setup, users can be delegated authority to manage:

• Custom Tables
• Simple Products
• Users
• Bulk Quote Reassignment
• Documents

Users can access the pages for managing specific setup features in the menu available when clicking their
username in the top bar.

Ability to Manage Documents [page 786]


When you delegate authority for managing documents to a permission group, the pertaining users can
create and upload local document templates and content documents in SAP CPQ.

Bulk Quote Reassignment [page 786]


This page lets you define permission groups that can reassign quotes in bulk.

Delegating Authority for Custom Tables [page 787]


The Custom Tables subsection displays all custom tables in the system for which you can delegate
authority. You can find a specific table faster using the search box above each column.

Delegating Authority for Simple Products [page 787]


You can delegate authority for simple products in the Simple Products subsection.

User Management [page 788]


This functionality enables users who aren’t SAP CPQ administrators to manage other users and
companies.

Migrate Pricebook Permissions from Delegation of Authority to Access Rights [page 789]

SAP CPQ Setup and Administration Guide


Delegation of Authority PUBLIC 785
14.1 Ability to Manage Documents
When you delegate authority for managing documents to a permission group, the pertaining users can create
and upload local document templates and content documents in SAP CPQ.

If needed, each user can also be able to share templates with the members of their own company. To delegate
authority for managing documents, go to Setup Delegation of Authority Ability to Manage Documents .

 Note

The logic between permission groups is OR, so the system delegates authority for managing documents to
all users that belong to at least one of the selected permission groups.

If you wish to enable users pertaining to the selected permission groups to upload content files that are used
in templates uploaded by application administrators, select the Users from selected permission groups will be
able to upload content files used in templates uploaded by application administrator checkbox.

Users who are delegated authority for managing document templates have the Manage Document Templates
page available in the user pages. When creating a new template, define it in the Template Definition tab
according to the instructions for creating templates described in Document Generation Template. Users can
select Share with users from my company and brand to expand access to the template to other users in their
company.

In the Additional Fields tab, you define which content files are going to be added to the template.

 Note

The system includes the additional files into the generated template only if these two tags are properly
added in the template: INCLUDE_DOCUMENTS and INCLUDE_DOCUMENTS_END.

Users can also make the following adjustments:

• Include file(s) for each quote item - select it to add files for each quote item.
• Included File(s) - enter the name of the file (with file extension) that is going to be added to the generated
document, or define the formula that dynamically pulls the file name from elsewhere in the application.
The files need to be placed in Manage Content Documents.
• File Description - define a description that is shown to users, or a formula that generates a description
dynamically.
• File Selection - select Checkboxes to allow multiple selections of files that will be included in the generated
file. Alternatively, select Radio Buttons to restrict the selection to only one file.
• Separate files with page break - selected by default so that the system would make a page break after every
added file.

14.2 Bulk Quote Reassignment


This page lets you define permission groups that can reassign quotes in bulk.

You can either select Everyone and enable all permission groups to reassign quotes in bulk, or select specific
groups by moving them to the right column. In the Bulk Quote Reassign Rights subsection, you can also restrict

SAP CPQ Setup and Administration Guide


786 PUBLIC Delegation of Authority
the selection of source and target users to specific permission groups. To disable reassigning quotes in certain
statuses, in Exclude statuses move the respective statuses from the left to the right column.

 Note

The logic between permission groups is OR, so the system delegates authority for reassigning quotes to all
users that belong to at least one permission group.

On the user side, users in the selected permission group can select a user whose quotes will be reassigned and
the user to whom the quotes will be reassigned.

On the Bulk Quote Reassign page available in user pages, SAP CPQ users select a user whose quotes they wish
to reassign, a user to whom the quotes will be reassigned and quotes that will be reassigned.

14.3 Delegating Authority for Custom Tables

The Custom Tables subsection displays all custom tables in the system for which you can delegate authority.
You can find a specific table faster using the search box above each column.

Click the Edit button next to a table to edit the permission groups who can manage it. Use the left and right
arrows to move available permission groups to selected and vice versa.

 Note

The logic between permission groups is OR, so the system delegates authority for a custom table to all
users that belong to at least one permission group.

On the user side, delegated users can manage custom tables on the Manage Tables page. Users are allowed to
edit tables for which they’re granted authority, to add, edit, and delete rows in tables. Additionally, tables can
be exported as Excel and ZIP files for a cleaner overview.

14.4 Delegating Authority for Simple Products

You can delegate authority for simple products in the Simple Products subsection.

The page shows all conditions created for delegating authority for simple products management.

To add a new condition, you need to click Add New. The page that opens up is divided into three sections
enabling you to select the following:

• A permission group that can add products to the selected categories.


• Categories to which products can be added.
• Permission groups whose products delegated users can manage.

On the Manage Simple Products [page 787] page reached via User Menu, delegated users can add and import
simple products to the categories for which they’re granted rights. Also, users can edit products and export
them.

SAP CPQ Setup and Administration Guide


Delegation of Authority PUBLIC 787
Related Information

Manage Simple Products

14.5 User Management

This functionality enables users who aren’t SAP CPQ administrators to manage other users and companies.

Delegation of authority for user management is managed through two tabs: Management of users and
Management of companies.

Management of Users

The tab contains all conditions under which the authority for user management is delegated to users.

 Note

If User who creates company can manage its users is selected, users who have created companies can
automatically manage all new users that join those companies.

Click Add New to define a new condition. A new page displays, containing the following fields:

Field Description

Permission Group Type the name of the permission group to which you’re
delegating authority, or click the Search icon to find a
permission group.

Can Edit Users Select All Company Users and allow the selected permission
group to edit all users belonging to the same companies
as the selected group. Alternatively, if you select Only if
Managing Parent of Users, you’re allowing each user to
manage those users to whom they’re set up as managing
parents.

Can Manage Users of These User Types Move user types to the right column to enable the selected
permission groups to manage them.

Can Manage Users From These Companies Select Users' own company to enable each user to manage
other users pertaining to the same company. Alternatively,
select specific companies.

Condition Select either OR logic or AND logic depending on whether


the users that are going to be managed need to adjust to
both criteria (user type and company), or only one of these,
respectively.

Can Allow Other Users Permissions to Administer Users Enable the permission group to delegate authority for
managing users.

SAP CPQ Setup and Administration Guide


788 PUBLIC Delegation of Authority
Field Description

Can Allow Other Users Permissions to Administer Enable the permission group to delegate authority for
Companies managing companies to other users.

Management of Companies

The tab displays all conditions under which the authority for managing companies is delegated to users.

Click Add New to define a new condition and fill out these fields:

Field Description

Permission Group Type the name of the permission group to which you’re
delegating authority, or click the search icon to find a
permission group.

Can Create New Companies Enable the permission group to create new companies.

Can Edit These Companies Select User's own company and allow each user in the
permission group to edit their own company. Alternatively,
select specific companies. In addition, you can choose
the Where user belongs to the Permission Group which is
an administrator option. It allows users from the selected
permission group to edit companies for which they’re
granted administrator rights through other permission
groups (an administrator permission group is assigned to
a company in Companies Permissions ).

On the user side of SAP CPQ, the Manage Users page displays all users that the logged user has the rights to
manage. Adding and editing of users is also enabled.

14.6 Migrate Pricebook Permissions from Delegation of


Authority to Access Rights

The Delegation of Authority for pricebooks is obsoleted and instead, administrators should use the Access
Rights feature [page 817] to manage who has access to pricebooks and bulk pricebook import/export.

 Note

The section for delegating authority over pricebooks is no longer available in the Setup and the Pricebooks
page that gives users access to delegated pricebooks/markets is no longer available in the user menu on
the user side. Up until the 2302 release of SAP CPQ, it will be possible to contact the SAP CPQ Support
team if there are issues regarding the migration of pricebook permissions to Access Rights.

Clients with an extensive number of pricebooks and complex permissions in Delegation of Authority can
leverage the automated migration process and save the recourses and the time otherwise spent on manual
migration.

SAP CPQ Setup and Administration Guide


Delegation of Authority PUBLIC 789
 Note

Migration is delivered per request, and it's not automatically triggered on any tenant. Clients who need to
migrate the permission groups should raise a ticket with the SAP CPQ Support Team who will forward the
request to the Development team.

Migration Process

The first step in the migration process is to identify the standard and custom permission groups and custom
conditions for each pricebook in Delegation of Authority Pricebooks . Secondly, a new permission group
is created in Users Permission Groups following this naming pattern: [MarketName] - [PricebookName]
- CPG (CPG stands for Custom Permission Group). The new custom permission group contains the standard
permission groups and the custom condition from the source permission group. By default, the logical
operator in the newly created permission group is OR [page 140].

Custom permission groups from the source remain unchanged in the environment except that they are not
included in the newly created custom group but treated as a separate custom group. If there is a formula
defined within the custom permission group, it remains unaltered, but the condition applied on multiple
permission groups in the source is not applied on the custom permission group during the migration.

During the migration process, the system assigns access rights to the right pricebook and to the Bulk
Pricebook Import/Export section for each newly created custom permission group, and the existing related
custom permission groups.

SAP CPQ Setup and Administration Guide


790 PUBLIC Delegation of Authority
15 Security

SAP CPQ adheres to the SAP software security policies and guidelines, which makes it a trusted tool in which
you can safely maintain products, pricing rules, customers, and quotes.

Each new feature is developed according to SAP security guidelines. Additionally, there’s a set of application
parameters and features that allow administrators to further enhance the security of the system per their
business requirements and models.

Security Application Parameters

Security application parameters [page 637] are managed in General Application Parameters Security
tab. There, you can define trusted third-party sources of CSS and JavaScript files, images, and fonts [page
823]. Also, there are parameters for establishing the secure domains from which API calls are allowed and the
URLs that may embed SAP CPQ.

Security Features
Features available specifically to enhance the security of data and access to the system are described in the
sections listed below.

Automatic Data Deletion [page 792]


The feature enables you to set a data deletion policy and/or manage your account’s storage space by
defining a period of time after which the system automatically and permanently deletes data.

Personally Identifiable Information [page 804]


Personally identifiable information (PII) is any information that could potentially be used to identify an
individual.

WSDL and Certificate Management [page 811]


These features can be used for establishing efficient and secure API communication between two
different servers.

Access Rights [page 817]


By managing access rights, you can control which individual administrators or permission groups can
access specific Setup sections and entities, or grant them read-only access to those sections and
entities.

DKIM Support for Outbound Emails [page 821]


The DomainKey Identified Mail (DKIM) authentication standard adds an encrypted digital signature to
outbound email messages sent on company’s behalf.

Content Security Policy in SAP CPQ [page 823]


To add another layer of security in SAP CPQ and prevent unwanted breaches, you can define secure
sources of JavaScript files, CSS sheets, images, and so on.

Credential Management [page 825]


You can store credentials for accessing external systems via scripting in Setup Security
Credential Management .

Multi-factor Authentication [page 826]

Security Recommendations [page 826]

SAP CPQ Setup and Administration Guide


Security PUBLIC 791
15.1 Automatic Data Deletion

The feature enables you to set a data deletion policy and/or manage your account’s storage space by defining
a period of time after which the system automatically and permanently deletes data.

Since data can be permanently deleted, we recommend that only data protection officers, in cooperation with
administrators, use this feature to define a data retention policy.

 Note

SAP CPQ doesn’t have a retention framework for keeping and managing the access to customer data after
the business purpose for keeping the customer data in the system has expired. SAP CPQ has a deletion
framework which should be used to delete customers from SAP CPQ once business purpose has expired.
The reason why no retention policy has been developed is that SAP CPQ is mainly used in integrations with
CRM software and back office systems (ERP) who act as the single source of customer data. The data is
only replicated into SAP CPQ and should be deleted after there is no longer any business purpose to keep it
in the system.

The following data can be permanently deleted:

• Quotes
• Users
• Customers
• Business Partners
• User actions
• Administrator actions

This feature is accessed in Setup Security Data Deletion . The above-mentioned data is organized into
the following tabs: General Deletion [page 796] and Audit Trail Deletion [page 803]

Apart from deleting data on the previously mentioned tabs, you can also prevent data from being deleted [page
793].

The feature is available in both Responsive and Classic Design. However, when deleting or blocking data using
Classic Design, UI text such as messages and blocked status of users, quotes and customers isn’t visible.

 Note

If your attempt to delete data with the Data Deletion feature is unsuccessful, contact the SAP CPQ Support
Team and request deletion of the necessary SAP CPQ entities.

Blocked Data [page 793]


Besides deleting data, the Data Deletion functionality also enables you to prevent data, which is
important to you, from being deleted.

General Deletion [page 796]


It's possible to define time periods after which user, quote, customer, and business partner data is
deleted.

Audit Trail Deletion [page 803]


It's possible to define time periods after which audit trail data is deleted.

SAP CPQ Setup and Administration Guide


792 PUBLIC Security
15.1.1 Blocked Data

Besides deleting data, the Data Deletion functionality also enables you to prevent data, which is important to
you, from being deleted.

Depending on your business needs, you can:

• Block quotes from being deleted.


• Block users from being deleted.
• Block customers from being deleted.
• Block business partners from being deleted.

 Note

Data exempt from deletion can’t be manually deleted or edited.

Block Customers from Being Deleted [page 793]


You can block customers from being deleted.

Block Quotes from Being Deleted [page 794]


You can prevent quotes from being deleted.

Block Users from Being Deleted [page 794]


You can prevent users from being deleted.

Block Business Partners from Being Deleted [page 796]


You can prevent business partners from being edited or deleted.

15.1.1.1 Block Customers from Being Deleted

You can block customers from being deleted.

To prevent customers from being deleted:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In Blocked Data Blocked Customers , enter either the first name, last name, or email address of the
customer you want to block from deletion.
The field offers autocomplete suggestions as you start typing a search query. Customers matching the
input are displayed as suggestions. Alternatively, you can select a customer from the dropdown list.
3. Click Save.
A confirmation message displays.

Restrictions for Blocked Customers

When you block a customer:

• The customer details can’t be edited. You can only view the details.

SAP CPQ Setup and Administration Guide


Security PUBLIC 793
• The customer can’t be deleted manually or via the API.
• The customer can’t be added to quote.
On the Customer Info tab, the blocked customer doesn’t appear in autocomplete suggestions. Moreover,
when adding customers via Lookup, a customer’s blocked status is displayed in the Actions column.

In case a customer was first attached to a quote and got blocked afterwards, if a user performs certain actions
on the quote that process the customer information (for example, generate documents or place order), a
message displays, notifying the user that the customer is blocked and that another customer should be added
to the quote.

15.1.1.2 Block Quotes from Being Deleted

You can prevent quotes from being deleted.

To prevent quotes from being deleted:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In Blocked Data Blocked Quotes , enter the number of the quote you want to block from deletion.
The field offers autocomplete suggestions as you start typing a search query. Quote numbers matching the
input are displayed as suggestions. Alternatively, you can select a quote number from the dropdown list.
The selected quotes are displayed below the Blocked Quotes search field.
3. Click Save.
A confirmation message displays.

Restrictions for Blocked Quotes

When you block a quote:

• The quote status is set to Blocked.


• The quote can’t be deleted manually or via the API.
• View is the only available action on the Load Quote page.

15.1.1.3 Block Users from Being Deleted

You can prevent users from being deleted.

To prevent users from being deleted:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In Blocked Data Blocked Users , enter either the first name, last name, username, or email address of
the user you want to block from deletion.
The field offers autocomplete suggestions as you start typing a search query. Users matching the input are
displayed as suggestions. Alternatively, you can select a user from the dropdown list.

SAP CPQ Setup and Administration Guide


794 PUBLIC Security
3. Click Save.
A confirmation message displays.

The blocked user’s status is considered for SAP CPQ licenses. The user can be either active or inactive, and this
status is displayed in the Active column on the Users page. If the blocked user is active, the user counts as a
license user. On the other hand, if the blocked user is inactive, the user doesn’t count as a license user.

Restrictions for Blocked Users

When you block a user:

• The user can’t log into the system.


• The user details can’t be edited.
You can only view the details, as the Save button is disabled. The user’s blocked status is displayed in the
Active column.
• The user can’t be deleted manually or via the API.
• The user can’t be updated via the API.
• The user’s blocked status is displayed on the Manage Users page, and no action is available.
• The user can be selected in permission groups.
When selected, the user’s blocked status is also displayed. If the blocked user is the only selection, the
Save button is disabled.
• The user can’t be set as a guest user.
• When the blocked user is selected as a guest user, a message displays, and the Save button is disabled.
• The user can’t be set as an approval parent, managing parent or ordering parent.
When the blocked user is selected as an approval parent, managing parent or ordering parent, a message
displays, and the Save button is disabled.
• The user, who previously granted you or a support representative access to their account, isn’t displayed
due to their blocked status.
This means you can’t log in as a proxy user when the user is blocked.
• The user can’t be exported.
• The user can’t be updated through user import or bulk import.
• The user can’t be deleted on the Bulk Deletion page.
The user's blocked status is displayed next to their name.
Additionally, when selecting a user whose customers you want to delete, the blocked user isn’t displayed in
the list.
• The user can’t be set as a backup approver.
When selecting backup approvers, the blocked user doesn’t appear in autocomplete suggestions. However,
if the user was selected prior to becoming blocked, the user’s blocked status is displayed, and the Save
button is disabled.
• The user can’t be set as an approver for approval rules.
When selecting approvers, the blocked user doesn’t appear in the user list. However, if the user was
selected prior to becoming blocked, the user’s blocked status is displayed, and the Save button is disabled.
Additionally, when a quote is submitted for approval, and one of the designated approvers is blocked, the
approver’s blocked status is displayed and a message notifies the user that the approval process might not
succeed because of the blocked approver. Moreover, the approver’s blocked status is also displayed in the
Approval History.

SAP CPQ Setup and Administration Guide


Security PUBLIC 795
• The user can’t be added to email lists.
When selecting users, the blocked user doesn’t appear in the user list. However, if the user was selected
prior to becoming blocked, the user’s blocked status is displayed, and the Save button is disabled. This
means that the blocked user doesn’t receive email messages or notifications.
• The user’s status (active or inactive) remains the same as it was before the user was blocked.
If the user was inactive before being blocked, the blocked period also counts as inactivity.
• The user can’t be selected when setting up cart visibility.
• The user can’t be added to the list of users who can edit multipliers and discounts.
• The user can’t be selected when setting up market visibility.
• The user can’t be selected when setting up the total amount limit.
• The user can’t be selected when setting up a margin health indicator.
• The user can’t be selected when setting up promotions/special pricing.
• The user can’t be selected when defining which users have to submit quotes for approval on the Approval
Rules page.
• The user can’t be selected when setting up user mappings for CRM integrations.

When you unblock a user:

• The user’s status (active or inactive) remains the same as it was before the user was blocked.
• The user will get deleted if the deletion criteria is met based on the inactivity period or last login time.

15.1.1.4 Block Business Partners from Being Deleted

You can prevent business partners from being edited or deleted.

To prevent customers from being edited or deleted:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In Blocked Data Blocked Business Partners , enter either the first name, last name, or email address
of the business partner you want to block from deletion.
The field offers autocomplete suggestions as you start typing a search query. Business partners matching
the input are displayed as suggestions. Alternatively, you can select a business partner from the dropdown
list.
3. Click Save.
A confirmation message displays.

15.1.2 General Deletion

It's possible to define time periods after which user, quote, customer, and business partner data is deleted.

On the General Deletion tab, you define a time period for:

• Automatic deletion of quotes


• Automatic deletion of users

SAP CPQ Setup and Administration Guide


796 PUBLIC Security
• Automatic deletion of customers
• Automatic deletion of business partners

Automatic Deletion of Customers [page 797]


Automatic customer deletion applies to both global and local customers.

Automatic Deletion of Quotes [page 797]


When deleting quotes, you have three options at your disposal.

Automatic Deletion of Users [page 800]


When deleting users, you can either delete inactive users or users who don’t log into the system during
the specified deletion period.

Automatic Deletion of Business Partners [page 802]


You can set up a period after which the business partners will be deleted.

15.1.2.1 Automatic Deletion of Customers

Automatic customer deletion applies to both global and local customers.

To delete customers:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Customers , enable the Delete Customers toggle switch.
Time period selector displays.
3. Define a period after which customers will get deleted.
The period can be set in either months or years.
4. Click Save.
A confirmation message displays.

The system calculates the deletion period once the customer is no longer attached to any quote.

Each deleted customer is recorded in Setup Audit Trail Admin Actions . Additionally, customer ID of the
deleted customer is displayed in the Action column in the following format: GDPR - delete customer - customer
ID.

15.1.2.2 Automatic Deletion of Quotes

When deleting quotes, you have three options at your disposal.

Namely, you can delete all quotes that meet the deletion criteria, regardless of their status and the quote
owner’s company. Additionally, you can delete only quotes in particular status which is useful when you want
to set different deletion periods for specific statuses. Finally, you can delete quotes according to the status and
company by combining the quote status and the quote owner’s company with the deletion period.

SAP CPQ Setup and Administration Guide


Security PUBLIC 797
Automatic Deletion of Quotes Regardless of Status or Company

To delete quotes without taking into account their status or the quote owner’s company:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Quotes , enable the Default Deletion Period toggle switch.
Time period selector displays.
3. Define a period after which quotes will get deleted.
The period can be set in either months or years.
4. Click Save.
A confirmation message displays.

The system calculates the deletion period from the date the quote was last modified. For example, if you set
the default deletion period to one year, all quotes with a modified date older than one year will be deleted
immediately.

Automatic Deletion of Quotes by Status

To delete quotes in particular status:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Quotes , enable the Delete Quotes by Status toggle switch.
Time period selector and field for selecting a status display.
3. In Deletion Period, set the number of months or years after which the quotes will get deleted.
4. In Status, define the status of quotes you want to delete.
The field offers autocomplete suggestions as you start typing a search query. Statuses matching the input
are displayed as suggestions. Alternatively, you can select a status from the dropdown list.

 Note

This is a single-choice selection field. To define multiple statuses, click Add Status below the Deletion
Period time selector for each status you want to define.

5. Click Save.
A confirmation message displays.

The system calculates the deletion period from the last modified date.

Automatic Deletion of Quotes by Status and Company

To delete quotes by status and company:

1. Go to Setup Security Data Deletion .


A new page displays.

SAP CPQ Setup and Administration Guide


798 PUBLIC Security
2. In General Deletion Quotes , enable the Delete Quotes by Status and Company toggle switch.
A grid displays with an Add rows button above it.
3. Click Add rows.
4. Select the needed number of rows from the dropdown.
Rows display in the grid.
5. The grid contains the following columns: Delete, Period, Status and Company.

To choose which columns you want to be displayed in the grid click .


In the column selection window, select or unselect appropriate columns and click Save.

6. In the Delete column, click to delete an entire row and cancel quote deletion.
7. In the Period column in the grid, set the number of months or years after which the quotes will get deleted.
8. In the Status column, define the status of the quotes you want to delete.
9. In the Company column, define the quote owner’s company.

 Note

The fields in the Status and Company column are autocomplete fields which automatically suggest
values as you type. Each field allows you to select only one value. To define multiple statuses or
companies, you should add new rows for each quote.

Additionally, all deletion criteria can be filtered by status and company in the quick filter above the grid.
Values in the grid can be sorted in ascending or descending order by quote status and company.

10. Click Save.


A confirmation message displays.

The system calculates the deletion period from the date the quote was last modified.

Default Deletion Period, Status-Based Deletion and Delete Quotes by Status


and Company Working in Parallel

You can set all three deletion options to work in parallel. In that case, quote deletion rules are executed in the
following order of priority with those of higher importance overruling the succeeding ones:

1. Delete Quotes by Status and Company


2. Delete Quotes by Status
3. Default Deletion Period

Therefore, the rules which are set for the default deletion period and the deletion based on the quote status will
be overruled by the ones defined by Delete Quotes by Status and Company option.

Example

You want to keep quotes in Won status for a longer time than quotes in all other statuses. Moreover, you want to
remove quotes in Lost status from the system and you want to delete all quotes in the status Rejected.

SAP CPQ Setup and Administration Guide


Security PUBLIC 799
The first thing you can do is to set the Default Deletion Period to 1 year. Next, after enabling the Delete Quotes
by Status toggle switch, you can set the deletion period for quotes in Won status to 3 years and for quotes
in Lost status can be set to 5 months. For the quotes in the status Rejected activate the Delete Quotes by Status
and Company toggle switch, set the deletion period to 2 years and select the company assigned to the user
who created the quote.

As a result, quotes in Won status will be kept in the system for 3 years, that is, they will be deleted 3 years after
their last modified date. Quotes in Lost status will be deleted 5 months after their last modified date. Quotes
in the status Rejected will be deleted 2 years after the last modification. On the other hand, quotes in all other
statuses will be deleted 1 year after their last modified date.

Logging Deleted Quotes

Each deleted quote is recorded in Setup Audit Trail Admin Actions . Additionally, quote number of the
deleted quote is displayed in the Action column in the following format: GDPR - delete quote - user ID - cart ID.

Related Information

Automatic Deletion of Users [page 800]


Automatic Deletion of Customers [page 797]
Scheduled Quote Deletion (Soft Delete) [page 414]
Bulk Deletion [page 379]

15.1.2.3 Automatic Deletion of Users

When deleting users, you can either delete inactive users or users who don’t log into the system during the
specified deletion period.

Automatic Deletion of Inactive Users

A user becomes inactive when you:

• disable the Active toggle switch in Setup Users Users General , or


• Update the user's active status via the API or through user import.

To delete inactive users:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Users , enable the Delete Inactive Users toggle switch.
Time period selector displays.

SAP CPQ Setup and Administration Guide


800 PUBLIC Security
3. Define a period after which inactive users will get deleted.
The period can be set in either months or years.
4. Click Save.
A confirmation message displays.

The system calculates the deletion period from the date the administrator marked the user as inactive, starting
from the 2018.4 release date. If the user was inactive before the 2018.4 release, that period isn’t taken into
account when calculating the deletion period.

Example

Example: You want to delete inactive users from the system, so you enable the Delete Inactive Users toggle
switch and set the deletion period to 3 months. In this case, the system will take into account only those users
who became inactive after the 2018.4 release date (November 17, 2018). This means that if a user becomes
inactive on November 20, 2018, the system will delete the user on February 20, 2019. On the other hand, if
the user became inactive on October 10, 2018, the system won’t take the deletion period set for this user into
consideration. As a result, the user won’t get deleted.

Automatic Deletion of Nonlogged in Users

To delete users who don’t log into the system during the specified period:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Users , enable the Delete Non-logged in Usersw toggle switch.
Time period selector displays.
3. Define a period during which users who don’t log into the system will get deleted.
The period can be set in either months or years.
4. Click Save.
A confirmation message displays.

The system calculates the deletion period from the last login date, starting from the 2018.4 release date. If the
user didn’t log into the system before the 2018.4 release, that period isn’t taken into account when calculating
the deletion period.

Example

You want to delete non-logged in users from the system, so you enable the Delete Non-logged in Users toggle
switch and set the deletion period to 3 months. In this case, the system will take into account only those users
who logged in after the 2018.4 release date (November 17, 2018). This means that if a user’s last login was on
November 20, 2018, the system will delete the user on February 20, 2019. On the other hand, if the user’s last
login was on October 10, 2018, the system won’t take the deletion period set for this user into consideration. As
a result, the user won’t get deleted.

SAP CPQ Setup and Administration Guide


Security PUBLIC 801
Deletion Limitations for Users

Since users are linked to other SAP CPQ entities, deleting a user isn’t possible in the following cases:

• The user is the designated approver for approval rules.


• The user has performed actions on existing quotes.
• The user is in charge of a forum or a topic or has posts published.
• The user needs to either approve or reject the quotes assigned.
• The user created existing quotes.
• The user created customers.

Users that can’t be deleted due to the above-mentioned reasons will be marked for deletion, and the system
will keep trying to delete users on a daily basis. Users will get deleted once the condition that prevented them
from being deleted the first time is no longer valid.

On the other hand, during the scheduled daily job when the system is trying to delete a user who couldn’t be
deleted due to the above-mentioned reasons, if the user no longer meets the deletion criteria (the user logged
in or became active), the system will stop trying to delete the user.

Logging Deleted Users

Each deleted user is recorded in Setup Audit Trail Admin Actions . Additionally, the user ID of the
deleted user is displayed in the Action column in the following format: GDPR - delete user - user ID.

15.1.2.4 Automatic Deletion of Business Partners

You can set up a period after which the business partners will be deleted.

To set up automatic deletion of business partners:

1. Go to Setup Security Data Deletion .


A new page displays.
2. In General Deletion Customers , enable the Delete Business Partners toggle switch.
Time period selector displays.
3. Define a period after which business partners will get deleted.
The period can be set in either months or years.
4. Click Save.
A confirmation message displays.

SAP CPQ runs a job every day to check which business partners are ready for deletion. The job then marks
those business partners and deletes them from the system. To determine which business partners are ready
for deletion, SAP CPQ first checks whether the business partner is used on a quote or not. If it's on a quote, the
business partner won't be marked for deletion nor deleted. Only the business partners not used on quotes are
treated for deletion. SAP CPQ calculates the deletion period starting from the day the business partner is no
longer attached to any quote.

SAP CPQ Setup and Administration Guide


802 PUBLIC Security
Example: a SAP CPQ administrator creates a business partner ABCompany on September 1. Sales
representatives start using that bussiness partner on quotes right away. On October 1, users remove
ABCompany from all the quotes on which it was used. From that day, the business partner is no longer used on
any other quotes. On October 30, the administrator defines a retention period of one month for the automatic
deletion of business partners. Therefore, the business partner ABCompany will automatically be deleted from
SAP CPQ on November 1.

Each deleted business partner is recorded in Setup Audit Trail Admin Actions .

15.1.3 Audit Trail Deletion

It's possible to define time periods after which audit trail data is deleted.

On the Audit Trail Deletion tab, you define a time period for:

• Automatic deletion of administrator actions, user actions, and changes on products, attributes, pricebooks
and custom tables from their respective audit trail logs.
• Automatic deletion of personal data log records.

Set Up Automatic Deletion of Data from the Audit Trail [page 803]
You can set up automatic deletion of data from a specific Audit Trail log of your choice.

Set Up Automatic Deletion of Personal Data Log [page 804]


You can set up automatic deletion of the Personal Data Log.

15.1.3.1 Set Up Automatic Deletion of Data from the Audit


Trail

You can set up automatic deletion of data from a specific Audit Trail log of your choice.

Procedure

1. Go to Setup Security Data Deletion .

A new page displays.


2. Under Audit Trail, find the audit trail for which you wish to enable automatic deletion and enable the
dedicated Delete Audit Trail toggle switch.
3. Define a period after which the records from that particular audit trail will be automatically deleted.

The period can be set in either months or years.


4. Click Save.

A confirmation message displays.

All log entries older than the specified period are deleted daily.

SAP CPQ Setup and Administration Guide


Security PUBLIC 803
15.1.3.2 Set Up Automatic Deletion of Personal Data Log

You can set up automatic deletion of the Personal Data Log.

Context

All Personal Data Log entries are by default automatically deleted after six months, or less, if they’re no longer
required by the company that holds that information. The default retention period of personally identifiable
information can be changed if needed.

Procedure

1. Go to Setup Security Data Deletion .

A new page displays.

2. In Audit Trail Deletion Personal Data Log , enable the Delete Data Protection Log toggle switch.

New fields display for defining the period after which the data will be deleted.
3. Select Month or Years and enter the number in the first field.
4. Click Save.

A confirmation message displays.

15.2 Personally Identifiable Information

Personally identifiable information (PII) is any information that could potentially be used to identify an
individual.

The following information is considered to be PII:

• Full name
• Home address
• Email address
• Social security number
• Passport number
• Driver's license number
• Credit card number
• Date of birth
• Telephone number
• Login details

SAP CPQ Setup and Administration Guide


804 PUBLIC Security
You can mark certain information as PII if needed. This action makes the processes of managing and filtering
PII much easier.

The following SAP CPQ objects always contain PII:

• User standard and custom fields


• Customer standard and custom fields
• Business partners

The following objects aren’t flagged as PII by default, but you have the option to flag them as such if necessary:

• Quote custom fields


• Quote item custom fields
• Attributes
• Custom tables
• Quote tables

You can flag data as PII by selecting the Contains Personally Identifiable Information checkbox for the above-
mentioned objects.

If the following objects are flagged as PII, they retain that flag after being sent and deployed via the Deploy /
Send Changes [page 669] feature:

• Attributes (deployed as elements of other deployment package components: products, guided selling,
custom fields, or CRM integrations)
• Quote tables
• Custom tables
• Customer standard and custom fields
• Quote custom fields
• Quote item custom fields

 Note

Read access logging of sensitive personally identifiable information is not supported in SAP CPQ. Although
SAP CPQ has functionalities that contain PII data, the system is not purposely designed for storing PII data.

Suppressed Information Logging

Some types of personally identifiable information needs to be more rigorously protected than others (for
example, social security number and driver’s license number), since the unauthorized acquisition of this
information could be harmful to the concerned individual. Administrators can prevent logging of old and new
values of such objects in the Audit Trail by enabling the Suppress Information Logging toggle switch next to an
object in question. All other Audit Trail columns will be populated

SAP CPQ Setup and Administration Guide


Security PUBLIC 805
 Note

Administrators can Suppress Information Logging only for objects that are already marked as Personally
Identifiable Information.

If logging of the following objects is suppressed, they will retain that flag after being sent and deployed via
Deploy / Send Changes:

• Attributes (deployed as elements of other deployment package components: products, guided selling,
custom fields or CRM integrations)
• Quote Tables
• Custom tables
• Quote custom fields
• Quote item custom fields

15.2.1 Personal Data Log

Changes made to all data categorized as PII (personally identifiable information) in SAP CPQ are logged in a
dedicated Personal Data Log. This enables data protection officers to filter and monitor these changes more
easily.

To access the Personal Data Log, go to Setup Security Personal Data Log .

The following data is logged here:

• date and time of the performed action


• the username of the administrator who performed the action
• the performed action
• entity type on which changes are performed (users, customers, business partners, attributes, tables and
so on)

SAP CPQ Setup and Administration Guide


806 PUBLIC Security
• affected field
• a unique ID of an entity
• quote ID (if changes are made to quotes)
• the old value (unless logging of such information is suppressed)
• the new value (unless logging of such information is suppressed)

The personal data log is available for both quote engines.

 Note

PII data can also be imported via API and the Import/Export feature. In that case, the user who performs
the import is logged as the performer and there is no indication in the log that the import was done via API
or Import/Export.

15.2.2 View/Export Personally Identifiable Information

Personally identifiable information about SAP CPQ users and customers can be exported. If users/customers/
business partners prove that their identity is genuine, they can request extraction of personally identifiable
information.

Prerequisites

Have data that you wish to extract flagged as PII.

Context

In SAP CPQ, User and Customer objects are by default flagged as PII. However, PII can also be located in
other objects, in which case they need to be flagged manually. To do this, select the Personally Identifiable
Information checkbox on each object individually. Unflagged data can’t be exported.

 Note

Any data that was in the system before this functionality was created can’t be exported until it’s manually
flagged as PII.

To extract PII about users, follow these steps:

Procedure

1. Go to Setup Security View/Export PII .

SAP CPQ Setup and Administration Guide


Security PUBLIC 807
A new page displays.
2. Select the Search Users option.
3. Start typing the name, username, or email address of the user.

A dropdown list with matching users displays.


4. Select a user.

A card with user details displays.

If there are multiple users with identical names, the data in the cards will help you distinguish between
them.
5. Click Filter Data.

The Search Filter popup displays.


6. Select the objects that will be filtered.

The available objects are:


• Quotes
• Quote Custom Fields
• Quote Item Custom Fields
• Quote Tables
• User Custom Fields
• Customer Custom Fields
• Custom Tables
7. Click Apply.
8. Click Search Data.

To filter all objects, click Search Data right away, without manually filtering the objects.

Pills with object labels are displayed and all requested objects with user/customer PII are listed. If there’s
no PII in the requested objects, only their names and empty columns are displayed.
9. Select checkboxes for all data you wish to export.
10. Click either Export as .xlsx or Export as PDF.

The file is downloaded.

SAP CPQ Setup and Administration Guide


808 PUBLIC Security
Example

Next Steps

Extracting customer PII is done in a similar way. The only difference is that customers don’t have usernames,
so when you select the Search Customers button, you need to enter a customer’s full name or an email address
in the search field.

Each performed search for users’ or customers’ PII is tracked in Audit Trail Admin Actions .

15.2.2.1 View/Export PII Data Filter

After you click Search Data, pills with object labels you selected in the Search Filter are displayed, followed by
the requested objects with user/customer/business partner PII. Pills are used for data filtering.

By clicking X next to a pill with an object label, the corresponding object is hidden. The objects themselves
consist of PII sorted in columns listed in the following text. You can choose which columns you wish to export
by selecting/unselecting the adjacent checkboxes.

SAP CPQ Setup and Administration Guide


Security PUBLIC 809
Individual records can be unselected in all objects if they do not refer to the requested user/customer except
in quotes because quotes always refer to the user/customer/ business partner in question. Only individual
columns that belong to the Quotes object can be unselected.

 Note

If Business Partners are used in your environment, you can search business partners and involved parties
that contain a business partner, or at least one of the necessary search parameters (name, email, phone,
mobile phone, street name...).

The following objects and details can be exported:

• Quotes
• Quote Number
• Quote Owner
• Customer
• Status
• Date Created
• Date Modified
• Quote Custom Fields
• Custom Field Content
• Custom Field Name
• Quote Number
• Quote Owner
• Tab Name
• Quote Item Custom Fields
• Custom Field Content
• Custom Field Name
• Custom Field Label
• Quote Number
• Product Name
• Date Modified
• Quote Tables
• Column Value
• Table Label
• Table Name
• Column Name
• Quote Number
• Tab Name
• Date Modified
• User Custom Fields
• Custom Field Content
• Custom Field Name
• Custom Field Label
• On User

SAP CPQ Setup and Administration Guide


810 PUBLIC Security
• Customer Custom Fields
• Custom Field Content
• Custom Field Name
• Custom Field Label
• On Customer
• Custom Tables
• Column Value
• Table Name
• Column Name
• Date Modified
• Modified By

 Note

As of the 1905 release, the Modified By column for Custom Tables displays the name of the user who last
modified the custom table row in which user/customer data is found. However, in the previous releases
the Modified By column displayed the name of the user who last modified the entire custom table for the
custom tables created before 1905, as the system did not record changes on row-level.

15.2.2.2 Audit Trail and View/Export PII

This topic lists items logged in the Audit Trail regarding viewing and exporting personally identifiable
information.

• the name of the administrator who performed the search


• the username of the administrator who performed the search
• the name of the user/customer/business partner who was searched for
• the section in which the search was performed
• date and time of the search
• the name of the user who last modified each row in custom tables

15.3 WSDL and Certificate Management

These features can be used for establishing efficient and secure API communication between two different
servers.

You can upload WSDL [page 817] files for interpreting secured SOAP messages sent from third-party web
services to SAP CPQ. These SOAP messages are secured with X.509 certificates which are created with the
Certificate Management [page 812] feature. The same web service URL should be defined during the creation
of a certificate for secure communication with the server on which the service is installed, and WSDL which
describes the service.

SAP CPQ Setup and Administration Guide


Security PUBLIC 811
Certificates can also be used for authentication of system users in external systems, which is especially useful
in integration scenarios.

You can also create User Certificates [page 815] which can be used for authentication of integration users via
API.

Certificate Management [page 812]


On the Certificate Management page, you can create and manage certificates for securing SOAP and
REST communication or map certificates to users, so that they can later be used for authentication of
individual users with API.

WSDL Management [page 816]


This feature gives administrators the ability to upload and store WSDL files in SAP CPQ.

15.3.1 Certificate Management

On the Certificate Management page, you can create and manage certificates for securing SOAP and REST
communication or map certificates to users, so that they can later be used for authentication of individual
users with API.

Certificates provide a more secure means of communication between two systems, than password protection
does, due to their complex encryption and the fact that only the intended recipient can decrypt the messages.

In the future releases, this feature will be used for managing all digital security certificates in SAP CPQ, except
the ones used for email protection, which is done in the DKIM Keys page.

15.3.1.1 System Certificates for Secure Communication

System Certificates can be used either for encrypting and securing SOAP API requests, or for authenticating
client systems in SAP CPQ.

To create a new certificate, go to Setup Security Certificate Management and click New Certificate.

When SOAP messages are encrypted with certificates, only those who have the appropriate public key can
verify the received SOAP message requests and access the information contained within the messages. In
short, if the received SOAP message is verified, messages can be exchanged between two endpoints securely.

 Note

SOAP communication can be secured in two directions – from SAP CPQ towards the client system, and
from the client system towards SAP CPQ.

Certificates can be added in several ways:

• Let SAP CPQ generate a certificate – Enter the certificate name, select the encryption type and key size.
This is the best option if you do not already have a certificate that can be used.
• Upload a certificate from a file – upload a PFX file containing a certificate by clicking Upload a PFX file. Enter
the password for the file in the Password (required) field.

SAP CPQ Setup and Administration Guide


812 PUBLIC Security
 Note

The certificate that is added to SAP CPQ must be installed on the client machine (the service that is called,
or the service that calls SAP CPQ) , and the response must be signed with that same certificate, as well.
Usually there is already an installed certificate on the server side, which you can upload to the Certificate
Management page in SAP CPQ.

Regardless of the selected certificate creation method, the Purpose (required) dropdown and the Service URL
(required) field are required and common in all three cases (except when the selected certificate purpose is
Client Certificate Authentication).

In the Purpose (required) dropdown, you can choose between:

• Outbound SOAP Header Signing - secure SOAP communication from SAP CPQ towards a client system.
• Inbound SOAP Header Signing - secure SOAP communication from a client system towards SAP CPQ.

 Note

In addition to making the certificate with inbound SOAP header signing purpose active in SAP CPQ, you
need to make sure the signature is provided in the certificate body [page 813]. If this condition isn't
met, the Rejected by policy. error messsage will be displayed.

• Client Certificate Authentication - used if SAP CPQ needs to be authenticated in external systems with a
certificate instead of a username and password. For now, it can only be used in relation to the mTLS client
and Subscription to Events.

In the Service URL (required) field you need to provide the URL which contains the specific endpoint of the
webservices’ API SAP CPQ is connecting to.

If you wish to create a secure signed request to an outbound SOAP service via scripting, and if the WSDL for
that outbound service is not public, you need to define the WSDL for that service in the WSDL Management
page first, and then add the service URL to that definition. After that, in the Certificate Management page, you
define Outbound SOAP Header Signing certificate with the same service URL. That way, when the outbound
service is called from scripting, SAP CPQ loads the WSDL file and makes a proxy class that communicates with
the service.

Once you have created a certificate and made it Active via the toggle switch, it will be used to secure API
communication exchanged between SAP CPQ and the client service. Only one Outbound SOAP Header Signing
certificate can be made active per a service URL.

 Note

When an administrator uploads/generates a certificate in SAP CPQ and makes it active, the certificate will
be used on SAP CPQ side to verify all inbound SOAP messages from that client. Likewise, if the client is
verifying a SAP CPQ response of an inbound SOAP message, they need to use the matching certificate.

15.3.1.1.1 Signed SOAP API Envelope Sent to SAP CPQ


This is the format of a signed SOAP envelope that is sent to SAP CPQ. The signature needs to be provided in
the certificate body.

<?xml version="1.0" encoding="utf-8"?>

SAP CPQ Setup and Administration Guide


Security PUBLIC 813
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/
2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" SOAP-
ENV:mustUnderstand="1">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-
profile-1.0#X509v3" wsu:Id="X509-
EC95425802FB9F663F15021186132611">MIIDLDCCAhSgAwIBAgIIabHgneew2KAwDQYJKoZIhvcNAQE
LBQAwRDEcMBoGA1UEAwwTdjYwdGVzdC5fZG9tYWlua2V5LjEMMAoGA1UECwwDY3BxMRYwFAYDVQQKDA1D
YWxsaWR1c0Nsb3VkMB4XDTIxMDYxMDAwMDAwMFoXDTMxMDYxMDAwMDAwMFowRDEcMBoGA1UEAwwTdjYwd
GVzdC5fZG9tYWlua2V5LjEMMAoGA1UECwwDY3BxMRYwFAYDVQQKDA1DYWxsaWR1c0Nsb3VkMIIBIjANBg
kqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqJtUgTvlzCQZknIUiHvti5MMtz36V2XTiOfUUq4QB+tLPXE
BiiEflKAVRNTfBXnTlBKwzZmsnbLkrHecLp/AyJwzg9ralpfn9JAJvE+UH0MALR/MEWVgbXOImPgW/
h7DzI1cOHCLsBGiBvssRlZNFCFutode7J0jlTcbJgGLysMFB6s/k/RfVNiqbrNnrqVK88Rq/naY9d0Oz/
n4uRuQ2fvvHCj+5jdvcQwFWLODNxCFHgj0TQM2rdQhOfyngSAZDIsINVH11jveVeYPskHHH+KkXmL5V/
0oL3mSpzOf2yg9B6x6Cern+/
tdvPQnuLlO4U7y2qHqlHIEh+pOZ5Q9iQIDAQABoyIwIDAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQU
FBwMEMA0GCSqGSIb3DQEBCwUAA4IBAQB9hTLpSJP3fJBNAISmLm919ExnfQm3n+s2a5SOkm7fIPhsqhbk
uaYa1Z8lJSkwsbmhfCHZssaRMvjqFnlBPvQh6zG34ChP32ZKjYBl3+QQUkPHuISCtoIaQJFty4XDzJKrY
TKcN0CGw+49MUqIHZK80AaA8mu8WXKCq6iueo7f7ndF9pc+Nqu7xZB738/
uO5nghvr1f6kCq6wy80lIPgu9GaunWjyTLVZ1YVMmaMgv/rL2qvJO82cButBG4h5tPRcTxYXn/
cN4aZKIJo0tTak8Dy5ORaI1qY9JyWvIJsxlna/9+BfVdTcV9T8jSEkt7/994iFIo8577BiD7hT12qiw</
wsse:BinarySecurityToken>
<wsu:Timestamp wsu:Id="TS-d3e519ce-263f-4697-b37c-c50a87d5c8db">
<wsu:Created xmlns:wsu="wsu">2021-06-10T15:51:10.134Z</
wsu:Created>
<wsu:Expires xmlns:wsu="wsu">2021-06-10T15:56:10.134Z</
wsu:Expires>
</wsu:Timestamp>
<ds:Signature Id="SIG-2" xmlns:ds="http://www.w3.org/2000/09/
xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/
xml-exc-c14n#">
<InclusiveNamespaces PrefixList="SOAP-ENV" xmlns="http://
www.w3.org/2001/10/xml-exc-c14n#" />
</CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/
xmldsig-more#rsa-sha256" />
<Reference URI="#id-1">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-
exc-c14n#">
<InclusiveNamespaces PrefixList="" xmlns="http://
www.w3.org/2001/10/xml-exc-c14n#" />
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/
xmlenc#sha256" />
<DigestValue>ZPD4rH5iHVsusb8aTaZn/
ghi9TjXXRA5rsYt8k0boiE=</DigestValue>
</Reference>
<Reference URI="#TS-d3e519ce-263f-4697-b37c-c50a87d5c8db">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-
exc-c14n#">
<InclusiveNamespaces PrefixList="wsse SOAP-ENV"
xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/
xmlenc#sha256" />

<DigestValue>2xn5LiijL0Edak8pO778BbbvvT6xtH0vX69OZHXNPb0=</DigestValue>
</Reference>

SAP CPQ Setup and Administration Guide


814 PUBLIC Security
</SignedInfo>
<ds:SignatureValue>YXe4coMb4tFwJgGhyYMpQZ/
tXD35S7IsJGQCJ3iHABVCZX95GLgPpRLFpBQhOg1as/mL3RMOqanC39FEgivyfSDj/Nq+5kH4sfpuGC/
+Rw5etpNUQHVvIht7GckKwULP5juaXFJGL4cGLb8gw3vaakd45uV0j9ER2KdL5zTB6zMkl2ahmLbp2lC+
KpVT4i8/
H7wpCNSDM6Av9Wj5tnArrYplrhmPI+hkjfmgZTo+cdVYcLbgdZZx9nhOI+6QGaMiVKU0IsInkT2WH2kzx
WBfGuu/dxcgsdzzTof08K3U3PXrPgSM5ONHYPmZB9/+ibZqbqPgrUUVOt9teAPGSYO8og==</
ds:SignatureValue>
<ds:KeyInfo Id="KI-EC95425802FB9F663F15021186132692">
<wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STR-
EC95425802FB9F663F15021186132713">
<wsse:Reference URI="#X509-
EC95425802FB9F663F15021186132611" ValueType="http://docs.oasis-open.org/wss/
2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" />
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-1">
<PlaceOrder xmlns="http://webcominc.com/">
<username />
<password />
<owner />
</PlaceOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

15.3.1.2 Create User Certificates

User certificates can be mapped to individual users.

Context

Each user can be associated with a single public certificate, which is used for their authentication with API.
That way, you can avoid storing personal information (IDs, passwords, secrets) of integration users.

 Note

Each certificate needs to be unique. If a user is authenticated with certificates in multiple tenants, they
need to have a different certificate for each of those tenants.

Procedure

1. Go to Setup Security Certificate Management User Certificates .

The page in which user certificates are listed displays.


2. Make sure that the Enable User Certificates toggle switch is active.

SAP CPQ Setup and Administration Guide


Security PUBLIC 815
3. Click New Certificate.

The popup window in which you can add a new user certificate displays.
4. Start typing a user’s name in the User (required) field and select the user to whom you’re attaching the
certificate.
5. Click Upload new file to add a certificate.
6. Save the certificate.

The certificate can now be used for authentication of the mapped user.

Next Steps

Once a user certificate is created, you can use it to authenticate individual users in specified domains via SOAP
and REST APIs.

Authentication with SOAP

To authenticate with SOAP, the client application needs to provide an mTLS client certificate in the request,
along with the request body and the domain name in the HTTP header. The forwarded certificate needs to be
Active in order to work.

The SOAP client certificate authentication is available on the following endpoints:

• /wsapi/cpqapi.asmx
• /wsapi/wsresp.asmx
• /wsapi/wssrv.asmx

Authentication with REST

Check the instructions.

15.3.2 WSDL Management

This feature gives administrators the ability to upload and store WSDL files in SAP CPQ.

WSDL files are used for describing a SOAP-based web service and creating a link between two distinct servers.
In order to be used properly, WSDL files added to SAP CPQ need to be connected to a URL of the endpoint on
which the web service is installed.

To initialize the web service, you need to use the following method from scripting:

ws = WebServiceHelper.LoadImportedWsdlService(“Wsdl”,”UrlToService”)
ws.pathToWSDLServiceMethod()

Once you do this, the SAP CPQ scripting environment will create a proxy class which can perform
communication targeting the service URL.

SAP CPQ Setup and Administration Guide


816 PUBLIC Security
15.3.2.1 Add a New WSDL

This topic contains the procedure for adding WSDL files.

Context

If you’re adding WSDLs of web services with which you’ve previously established secure SOAP communication
in Certificate Management, the service URL you provide when adding a WSDL file needs to be the same as the
service URL you provide during the creation of a certificate.

Procedure

1. Go to Setup Security WSDL Management .

A page for managing and adding WSDL files displays.


2. Click Add New WSDL.

A popup window displays.


3. In the Service URL (required) field, enter the path to the endpoint of the secure gateway on which the WSDL
file is installed.
4. Click Upload new file to add a WSDL.

The file should be in .xml format.


5. Click Save WSDL.

Results

Once a WSDL file is added to SAP CPQ, it will provide the means of communication between SAP CPQ and the
server with which SOAP communication is performed.

15.4 Access Rights

By managing access rights, you can control which individual administrators or permission groups can access
specific Setup sections and entities, or grant them read-only access to those sections and entities.

Typically, different administrators manage different tasks in SAP CPQ, which means that not every
administrator requires complete access to every Setup section. You can manage the access rights of
administrators [page 819] to provide them with access to only those sections and entities that are relevant
to their work. In addition, you can provide administrators with either complete access or read-only access to

SAP CPQ Setup and Administration Guide


Security PUBLIC 817
specific sections. Access rights for sections and entities are managed in the Setup Sections and Setup Section
Entities menus. In addition to Setup sections, you can manage the access rights for some user-side elements,
such as the Formula Debugger, Developer Console or Script Workbench.

 Caution

To gain access to this feature, you need to explicitly request it from the SAP CPQ Support Team. Once the
feature is enabled, only the administrator who requested it will have the option to assign access rights for
Setup sections and entities to other administrators.

The administrator who can assign access rights can also provide other administrators with the option to
manage access rights [page 820].

Access rights can be assigned to individual administrators or to permission groups to which administrators
belong. If the administrator belongs to multiple permission groups, once access rights are enabled, they
automatically have access to all sections and entities that their permission groups [page 138] can access.

For example, Adam the administrator belongs to the permission groups Sales and Sales Manager. If the right to
access the Fields, Calculations, Layout section of the Setup is assigned to either of Adam's permission groups,
Adam is automatically able to access the Fields, Calculations, Layout section. However, if the permission group
Sales Manager has full access to Fields, Calculations, Layout, but the permission group Sales has read-only
access to that section, Adam will have read-only access to that section.

 Note

By default, if the administrator belongs to groups with a conflicting level of access rights (one of them has
read-only rights, but the other one has full editing rights), read-only access rights override editing access
rights. However, you can change this behavior by enabling the toggle switch Editing rights will prevail when
two or more permission groups administrators belong to have both read-only and edit access rights to a
particular Setup option. If that option is enabled, in the previously described scenario, Adam will have full
editing access rights for the Fields, Calculations, Layout section, instead of read-only access.

Before the Enable Access Rights toggle switch is enabled, all administrators are able to access every section
of the Setup. After the option is enabled, administrators don't have access to any Setup sections unless the
required access rights are assigned to them. Make sure that you activate the toggle switch only after you are
done with assigning access rights to administrators and permission groups. If the Enable Access Rights toggle
switch is disabled after having been enabled for some time, all administrators will regain full access rights to all
sections and entities.

Assign Access Rights for Setup Sections and Entities [page 819]
You can assign access rights to other administrators and permission groups on a Setup section and
section entity level.

Select Access Rights Administrators [page 820]


As an access rights administrator, you can provide other administrators with access to the Access
Rights functionality. The administrators you select will be able to assign access rights to other
administrators and permission groups.

Access Rights and Custom Table Deployment [page 820]


Access rights assigned to you have impact on your ability to deploy and send custom tables.

View Access Rights Permissions [page 821]


In the View Permissions tab in Access Rights, you can check the access rights for a specific
administrator.

SAP CPQ Setup and Administration Guide


818 PUBLIC Security
15.4.1 Assign Access Rights for Setup Sections and Entities

You can assign access rights to other administrators and permission groups on a Setup section and section
entity level.

Prerequisites

You must be one of the access rights administrators [page 820] for your system.

Procedure

1. Go to Setup Users Access Rights Access Rights Settings .


2. In the Permission Groups menu, select or search for a permission group or the administrator to whom you
wish to assign the rights.

The Setup Sections menu expands, displaying the access rights as they pertain to the selected
administrator or permission group.
3. In Setup Sections, select the sections and subsections for which you wish to manage access rights.

Once you select a section, all of the subsections under it are automatically selected.

If you select the Show only selected checkbox, only the sections you selected are displayed.

 Note

If you select some of the following sections, the Setup Section Entities menu expands:
• Product Catalog Custom Tables
• Pricing/Calculations Pricebooks
This allows you to manage access rights for specific section entities, and not only the entire sections.

 Note

Additional notes about assigning access rights to setup section entities:


• Custom tables have the Select All checkbox selected by default. Deselecting the checkbox makes a
search bar appear, which can be used for browsing custom tables.
• When providing access rights for pricebooks, you can provide the administrators with access to all
existing pricebooks in the market to which a specific pricebook belongs, as well as any pricebooks
created in that market in the future. To do that, enable the toggle switch Full Market next to the
pricebook in the Setup Section Entities menu.

4. (Optional) Enable the Read-only toggle switch next to the following sections to ensure that the
administrators are only provided with read-only access to these sections:

• Product Catalog Custom Tables


• Quotes Fields, Calculations, Layout

SAP CPQ Setup and Administration Guide


Security PUBLIC 819
• Users Users
• UI Design Responsive Templates
• Develop Global Scripts , Custom Actions and Custom Quote Calculations
5. Activate the Enable Access Rights toggle switch.

Access rights are now applied.


6. Click Save.

15.4.2 Select Access Rights Administrators

As an access rights administrator, you can provide other administrators with access to the Access Rights
functionality. The administrators you select will be able to assign access rights to other administrators and
permission groups.

Procedure

1. Go to Setup Users Access Rights Access Rights Administrators .


2. (Optional) Start typing names, e-mails, or usernames of administrators you wish to find in the list.

The list of displayed administrators narrows down.


3. Select administrators who will be able to use the functionality.

Multiple administrators can be selected.


4. Click Save.

15.4.3 Access Rights and Custom Table Deployment

Access rights assigned to you have impact on your ability to deploy and send custom tables.

On source environments, you can:

• Create deployment packages containing custom tables if the visibility of those tables is enabled for you
with the Access Rights feature.
• Send packages containing those custom tables to target environments.

On target environments you can:

• Deploy packages containing custom tables only if you have editing rights for them.
• Create or update the existing custom tables from the package if you have editing access rights for custom
tables. To do this, the visibility of custom tables needs to be granted to you with the Access Rights feature.
If the package contains custom tables you can’t see, it can’t be deployed.

SAP CPQ Setup and Administration Guide


820 PUBLIC Security
15.4.4 View Access Rights Permissions

In the View Permissions tab in Access Rights, you can check the access rights for a specific administrator.

This option may help you troubleshoot when users complain that they don't have access to a specific setup
section or wonder why their access is limited.

After you search for an administrator, you'll get one of the following results, based on the assigned access
rights:

• no data is displayed because the administrator has no access rights assigned, they don't have access to
any setup sections.
• a list is displayed with the setup sections to which the administrator has access and permissions based
on which the access is granted. For access given specifically and directly to that administrator in Access
Rights Settings, the Permissions column displays user: {{username}}. If access to a section is granted
through a permission group, the Permissions column shows the names of those permission groups.
Clicking on the permission group name opens an overview of the permission group structure. You can
see which permission groups pertain to this permission group and what is the logic between them. Marked
in orange is the part of the permission group that gives access to this specific administrator.

15.5 DKIM Support for Outbound Emails

The DomainKey Identified Mail (DKIM) authentication standard adds an encrypted digital signature to
outbound email messages sent on company’s behalf.

As a result, email recipients who have implemented DKIM on their side can be certain that messages really
come from SAP CPQ and have not been modified along the way.

SAP CPQ uses its own email servers that are configured per environment, while DKIM keys are configured per a
tenant (each tenant in the environment needs to be configured separately).

 Note

You can't export DKIM keys once they are imported to SAP CPQ.

Setting up a DKIM Signature

To set up the functionality and generate a key, take the following steps:

1. Go to Setup Security DKIM Keys .


2. Enable the functionality.
3. Click New Key.
A pop-up displays.
4. In Selector, enter a unique name (for example: SAP).
The selector is added to the domain name and will be visible in the email header.

SAP CPQ Setup and Administration Guide


Security PUBLIC 821
5. In Domain, enter the company’s domain name for which the DKIM key is generated.
6. From the Encryption drop-down list, select the signing algorithm.
RSA-SHA256 is selected by default.
7. Define how a certificate is generated.
• Let SAP CPQ generate a certificate - If selected, SAP CPQ generates a new certificate and a private key.
The length of each key is 2,048 bits.
• Upload a certificate from a file - If selected, upload a PFX file containing a private key and a certificate
by clicking Upload new file. Additionally, enter the password for unlocking the file in the corresponding
field.
8. Click Save Key.
The key is displayed in the grid.

 Note

There cannot be more than one DKIM key per domain.

The private key is not visible, whereas the public key of the defined DKIM key can be copied from the Public
Key column or downloaded as a .cer file. Additionally, the DKIM key can be edited by clicking the Edit button.
The selector, domain and encryption algorithm can all be edited, whereas the private/public key pair cannot be
modified. You can leave the existing key pair as is or generate a new pair, as explained in step 7.

The following conditions determine whether or not an email message has a DKIM signature:

• If the sender’s email is defined in Setup Application Parameters General Parameters Sender Email
Address and the DKIM signature has been set up for the sender’s email domain, the email is signed with
the DKIM signature set for the sender’s email domain.
• If neither the sender nor the From (user) email domain match any available DKIM settings, the email is not
signed.

Activating the DKIM Key and Updating the DNS

The newly created DKIM key is inactive by default, so you have to activate it by enabling the toggle switch in the
Active column. However, before activating the DKIM key, you need to add the public key to the DNS record.

When adding the public key to the DNS, the format of the name of the TXT record is
selector._domainkey.domain.com, whereas the value in the TXT record is in the following format: v=DKIM1;
k=rsa; p=MIIBIjANBgkqhki…;

The value after p= is the public key.

SAP CPQ Setup and Administration Guide


822 PUBLIC Security
15.5.1 Test DKIM Signature

To confirm that DKIM authentication is active, you can use both Gmail and Yahoo accounts.

Test DKIM Signature with Gmail Account

1. Send a message from your domain (e.g. [email protected]) to your Gmail email address.
2. Open the message in your Gmail inbox
3. Click the downward arrow next to the recipient’s name (in this case, your name) to view details.
A pop-up displays.
If there is signed-by: your domain, DKIM authentication is active.

Test DKIM Signature with Yahoo Account

1. Send a message from your domain to your Yahoo email address.


2. Open the message in your Yahoo inbox.
3. Next to Spam, click the elipsis icon.
4. Select View raw message.
A new tab opens, containing the full message, including the email header information. If there is dkim=pass
(ok) in the email header, DKIM authentication is active.

15.6 Content Security Policy in SAP CPQ

To add another layer of security in SAP CPQ and prevent unwanted breaches, you can define secure sources of
JavaScript files, CSS sheets, images, and so on.

By defining which sources are secure, you restrict content from unsecure URLs, providing one more level of
protection for files coming from outside SAP CPQ.

There’s a set of application parameters in Application Parameters Security [page 637] in which secure
sources need to be defined:

• Permitted sources for JavaScript: add URLs to secure sources from which JavaScript files can be used in
SAP CPQ.
• Permitted sources for stylesheets or CSS: add URLs to secure sources from which stylesheets and CSS files
can be used in SAP CPQ.
• Permitted sources for images: add URLs to secure sources from which images can be used in SAP CPQ.
• Permitted sources for font resources: add URLs to secure sources from which font resources can be used in
SAP CPQ.
• Permitted sources that can be used as an HTML < form > action: add URLs to secure sources that can be
used in SAP CPQ as an HTML <form> action.

SAP CPQ Setup and Administration Guide


Security PUBLIC 823
By default, the parameters contain * in all tenants active in the version 2008 when the content security policy
was introduced. The asterisk symbol allows all files from all sources to be used in SAP CPQ. Although this may
seem like the easiest solution and it ensured at the time when the parameters were introduced that no breaking
changes occur, the * sign should never be used in these parameters. By allowing all sources, you disregard the
content security policies that consequently may lead to unwanted security breaches.

The parameters are empty in all tenants created after the 2008 release. That means that only files from within
SAP CPQ are considered secure.

 Note

Don't leave the parameters empty and don't add the * sign because that way you discard additional
security for the content in your tenant. Check your implementations, make a note of the sources from
which you use JavaScript and CSS files, images, and fonts and add those sources in the parameters.

If you add multiple sources in the parameters, use a space to separate them. This functionality is supported
on Google Chrome ®, Mozilla Firefox ®, Safari, and Microsoft Edge ® and it isn’t supported on Microsoft Internet
Explorer IE11 ®.

Example

In one of custom templates, we use images and CSS files from a source stated in the template, like in the
following screenshot.

If the parameters are populated with an * symbol (allowing all sources), the templates display properly and
there are no violations.

However, if the parameters are empty, meaning that only files from within SAP CPQ are allowed, there are
violations in the template and they aren't rendered.

SAP CPQ Setup and Administration Guide


824 PUBLIC Security
If the parameters are populated with the sources of the files used in the templates, there are no violations and
the templates render properly.

Related Information

Application Parameters [page 637]


Responsive Design Customizations [page 565]
Security [page 791]

15.7 Credential Management

You can store credentials for accessing external systems via scripting in Setup Security Credential
Management .

This page contains all credentials that are currently stored in the environment. When you store a credential
entry, you can cite its name in the script sent to an external system, to perform user authentication, instead of
using more complex authentication methods.

A single credential entry consists of a name, identifier, and a password or a client secret.

• Name - The value used for distinguishing one credential entry from others.
• Type - The options Credential and Secret are available. By selecting Credential, you can define both
the identifier and the secret. By selecting Secret, you can create a symmetric/asymmetric key used
specifically to sign JWT tokens in IronPython scripting, which are generated by the JwtTokenProvider.
• Identifier - A unique identifier of a credential, usually consisting of a username and a domain name.
• Secret - A password or a client secret. Once the creation of an entry is complete, the secret becomes
encrypted and can no longer be seen by you or other administrators.
• Active - Status of a credential entry. You can temporarily make a credential entry inactive, preventing its
use for authentication in scripts.

SAP CPQ Setup and Administration Guide


Security PUBLIC 825
 Note

Access to the Credential Management section can be restricted with the Access Rights [page 817] feature, if
needed.

AuthorizedRestClient Scripting Helper

This helper can be used along with a credential entry name to make basic authentication calls, or for requesting
access tokens from external systems (currently only OAuth2 and Client Credential grants are supported.

15.8 Multi-factor Authentication

SAP CPQ as a standalone system doesn't support multi-factor authentication. However, if you want to provide
this level of security to your users, you need to integrate your environment with the identity provider that
supports it, for example, SAP Cloud Platform Identity Authentication Service.

• Learn how to integrate SAP CPQ and SAP Cloud Platform Identity Authentication Service
• Check how to set up multi-factor authentication in SAP Cloud Platform Identity Authentication Service

15.9 Security Recommendations

SAP CPQ is delivered with some default security configuration. The table below contains some security
settings that you might need to review and adjust to your particular use case and corporate policies.

Secure Op­
Pri­ erations Topi More Infor­ In­
ority Map c Default Recommendation mation dex

Criti­ Roles & Au­ Bus­ SAP delivers business role tem­ Authorizations for users should be de­ Access S4-
cal thorizations sines plates for different user per­ signed to follow the principle of least Rights Q2C-
User sonas. These templates must be privilege. [page 817] BU-0
s: adjusted to suit your business 01
Conduct regular authorization reviews.
Au­ needs and corporate policies.
tho­
riza­
tion

SAP CPQ Setup and Administration Guide


826 PUBLIC Security
Secure Op­
Pri­ erations Topi More Infor­ In­
ority Map c Default Recommendation mation dex

Rec­ Client se­ Fron­ N/A SAP recommends all users to maintain Supported S4-
Browsers
om­ curity tend secure configurations and use the lat­ Q2C-
[page 11]
men Se­ est version of internet browsers. CS-0
ded cu­ 01
rity:
Brow
ser

Ad­ Authentica­ Au­ Authentication must be set up Authentication should always employ Federated S4-
Single Sign-
vanc tion & Sin­ then by the customer. the strongest authentication method Q2C-
On (FSSO)
ed gle Sign-On tica­ supported by the communicating sys­ AUT
No communication users are
tion: tems. H-00
configured by default - form
Com 1
based.
mu­
nica­
tion
User
s

Ad­ Authentica­ Au­ Multi-factor authentication Recommendation is for admin users to Multi-factor S4-
Authentica­
vanc tion & Sin­ then (MFA) is off by default. use MFA (Multi-factor authentication). Q2C-
tion [page
ed gle Sign-On tica­ Another factor is increasing chance to AUT
826]
tion: prevent attackers from stealing identity H-00
MFA and adding another layer of security. 2

To find out more about the table headings, check Explanation of Table Headings [page 828].

SAP CPQ Setup and Administration Guide


Security PUBLIC 827
15.9.1 Explanation of Table Headings

Explanation of Table Headings

Secure Opera­ Default Setting Recommenda­ More Informa­


Priority tions Map Topic or Behavior tion tion Index

Defines the crit­ The Secure Op­ A topic is a Describes the Defines our rec­ A link to docu­ A stable unique
icality of the erations Map is short descrip­ usage of the se­ ommendation mentation that reference to
recommenda­ a reference tion or a general curity setting, for this configu- explains how identify the rec­
tion. model to struc­ heading to find including any ration. you can achieve ommendation.
ture the broad similar topics context, or de­ the recommen­
For an explana­
area of security across services. fault setting be­ dation.
tion of the pri­
for content, dis­ havior (if availa­
ority levels, see
cussions, and ble).
the Explanation
as a basis for a
of Priority table
360° view on
below.
security.

For more infor­


mation about
the Secure Op­
erations Map,
see Security
Overview as
part of the SAP
Security Opti­
mization Serv­
ices Portfolio.

Explanation of Priority

Priority Description

Critical Exposes the system to significant risk or threatens system


reliability.

Recommended Improves the security of the landscape and significantly re­


duces the attack surface.

Advanced Extends the recommendation to a higher standard. The


recommendation either extends the security standards to
higher level of protection or to additional areas, such as your
organization-specific requirements.

SAP CPQ Setup and Administration Guide


828 PUBLIC Security
16 Log and Developer Console

Although they are accessed on the user side of the application, the Log and the Developer Console can only be
accessed by administrators.

Log [page 829]


The Log allows SAP CPQ administrators to monitor Iron Python scripts and track all the data manually
logged from them.

Developer Console [page 830]


The Developer Console is a practical tool that allows tracing of scripts and business rules executed
in the production system. It allows you to analyze your actions in SAP CPQ easily, profile application
problems and locate potential bottlenecks.

16.1 Log

The Log allows SAP CPQ administrators to monitor Iron Python scripts and track all the data manually logged
from them.

To access the Log, either go to Setup Developer Tools Log , or access it from Setup Log in the
user side

 Note

Access to the Log can be delegated via the Access Rights [page 817] feature, so access rights
administrators need to distribute access to all other administrators who should have it.

In the log, you can:

• See all the errors that occur in the scripts, making it easier to fix them.
• See, if some formula that is part of approval rule fails during parse by the rule engine.
• Copy information from the description column of the log.
• Resize columns of the log table.

You can't view log entry details unless the entry Label is either Script or RuleEngine.

 Note

The EventLog description in scripts can contain no more than 10000 characters.

SAP CPQ Setup and Administration Guide


Log and Developer Console PUBLIC 829
Example

Consider the following Iron Python (IP) script:

Log.Write(User.FirstName + " created a quote");


a = 5/0;

This script will run each time a new quote is created. It uses a log interface to log which user has created the
quote. It simulates the division by zero operation that triggers an exception. The script will break each time it’s
executed and the error will be logged. The administrator is able to see this log on the Log page along with all the
contextual data related to the creation of the quote, such as Date, Session ID, and so on.

 Note

You can track the status of email notifications in the log after enabling email notification logging
in General Application Parameters Shopping Cart and Quotes Use Additional Logging For Email
Notification . You can find more information on email notification logging on the Notifications [page 439]
page.

16.2 Developer Console

The Developer Console is a practical tool that allows tracing of scripts and business rules executed in the
production system. It allows you to analyze your actions in SAP CPQ easily, profile application problems and
locate potential bottlenecks.

The Developer Console is accessible from the side menu, under the Setup menu item. The tool opens in a new
tab so you can work in SAP CPQ and track actions and traces in parallel. The console captures up to 50,000
traces per request (a request is a click in the application). When you first access it, the Developer Console is
empty until you start working in the application.

Example

If you need to track and analyze all actions that have been performed on a quote in SAP CPQ, click Developer
Console and the tool opens in a separate tab. Select the Full Mode checkbox. In the first tab, open the quote
whose actions you wish to analyze. If you go back to the Developer Console, you can see that all the actions you
performed on the quote from the moment you first opened the console are listed. Also, all future actions that
you’ll perform on the quote will also be recorded in the console.

Depending on the data you wish to track in the Developer Console, you can select/unselect these checkboxes:

• Trace - enable/disable tracing of all actions in SAP CPQ. You can download the traced actions as XLSX
files and then upload them to the Developer Console on a different environment for the purpose of
troubleshooting.
• Full Mode - select to view traces related to all actions performed in SAP CPQ. Otherwise, if you don’t select
the option, only traces that are related to products, rules and scripting are displayed. If you wish to switch

SAP CPQ Setup and Administration Guide


830 PUBLIC Log and Developer Console
between the default and the full mode, you need to check/uncheck the Full Mode checkbox and repeat the
user action.
• Trace Script API Calls - select to view traces related to scripting API calls.
• Disable UI Customizations - select to disable any customization made to the template and branding and
to revert SAP CPQ to the default template and branding. The customization is disabled only during the
current session. This feature helps administrators during troubleshooting to establish if a UI issue is
caused by a broken customization.
All data tracked in the Developer Console is organized into Developer Console Actions [page 831],
Developer Console Trace [page 832], and Developer Console Groups [page 833].
• Disable Iron Python Script Execution - select to completely disable the execution of Iron Python scripts.
When the checkbox is selected, neither global nor local scripts are executed as long as the Developer
Console is open. With this feature, it is easier to identify performance issues that are caused by Iron Python
scripts.

 Note

There’s a set of keyboard shortcuts you can use to easily navigate between actions and trace lines. Press
Shift + ? to open the list of shortcuts.

Developer Console Actions [page 831]


The Developer Console refreshes as you perform actions in SAP CPQ, and new data is added to the list
of actions and traces.

Developer Console Trace [page 832]


This section displays a detailed trace for every action recorded in the Developer Console. The data is
displayed chronologically, in the order that the actions had taken place.

Developer Console Groups [page 833]


The Groups section lists the main traces (high-level traces - Trace H) so you can expand them and have
a hierarchical overview of the underlying traces.

Developer Console How-To [page 834]


Here are listed some frequent how-to scenarios about the Developer Console with detailed
explanations.

Debugging with Developer Console [page 837]


This section describes some typical scenarios when you can use the Developer Console to debug your
SAP CPQ.

16.2.1 Developer Console Actions

The Developer Console refreshes as you perform actions in SAP CPQ, and new data is added to the list of
actions and traces.

The tool lists only actions that you performed during the current session. A good practice is to clear the
Developer Console by clicking Clear, and then perform actions in the application. This way you’ll have a clearer
overview of the data related only to a particular action.

The list of tracked actions is displayed in the header of the Developer Console. To collapse/expand the section,
click Hide actions and Show actions, respectively. All listed actions have time stamps, duration in seconds and
available actions (View and Download). If an error occurs, the action's information is displayed within the table

SAP CPQ Setup and Administration Guide


Log and Developer Console PUBLIC 831
with red background that indicates that the action is somehow erroneous. To see details of an action, click on
the action's row, and all the details will be displayed within Trace. In addition, after you click on an action, the
option Performance Details becomes available below the list of traced actions, and by clicking that button you
can learn more about the performance of a particular action.

Performance Details

The Performance details dialog box provides a more detailed overview of the performance of a particular
action. To view performance details of an action, click Performance Details under the list of traced actions after
selecting an action.

Example

For example, if you click on the GetInitData action, the Performance Details table displays details for logs
labeled Performance - Quote Parser.
Tags used for the quote in question are logged for Quote Parser. For logs labeled Quote Parser, the Performance
Details table displays the following information:

• Name - The name of the log.


• Total Time (ms) - The total duration (in miliseconds) of logs labeled Quote Parser. The percentage shown
in brackets represents the total duration of logs labeled Quote Parser compared to the total duration of the
action in question.
• Count - The number of logs labeled Quote Parser whose duration is greater than 0.
• Average Time (ms) - The average duration (in seconds) of logs labeled Quote Parser.
• Slowest Time (ms) - The slowest duration (in seconds) of logs labeled Quote Parser.

16.2.2 Developer Console Trace

This section displays a detailed trace for every action recorded in the Developer Console. The data is displayed
chronologically, in the order that the actions had taken place.

The Developer Console traces all actions executed across the system either manually or via the API (stateless
and stateful APIs). Only the actions executed in an external services (such as the custom tables microservice
or the Notifier feature) are not traced.

You can filter the trace by:

• Message - detailed description of the trace. If you select Negative Filter and enter a search term, the system
displays only the lines that don’t contain that term in the description. This field also allows filtering support
for special search characters: question marks and asterisks. The question mark replaces one character
and the asterisk replaces any character and any number of characters. The Message is limited to 10000
characters.
• Logger - the class from which the method was initiated.

SAP CPQ Setup and Administration Guide


832 PUBLIC Log and Developer Console
• Level - Trace H are high-level traces and Trace L are low-level traces.
• Labels - a label describing the trace (such as Scripting, QuoteParser, or DatabaseQuery).
• duration (ms) - the time needed for the method to execute.
• from parent (ms) - the time needed for the parent method to trigger the current method.

If you want to focus on one trace line, enter a search term in a column to find the trace and select the line.
If you remove the search term, the line remains selected and all other trace lines are displayed again. If you
want to rearrange actions to view the slowest actions first, click Slowest first in the duration (ms) column. This
rearranges the trace lines so that the slowest actions are displayed on top. You can click the action you’re
interested in and unselect the Slowest first checkbox, and the selected trace line remains selected, allowing you
to see the context in which the action was executed. Logs that show up when scripts attached to events are
triggered are labeled ScriptEvent. All other scripts have the Script label.

 Note

Formula errors are logged in the Trace section with the log level Error and the label Formula Error.

To view more trace details, click .

 Note

The flag ITrace.IsOn, which is available in scripting, indicates whether tracing is turned on or off. With
the help of this flag, users can organize the logic that is related to tracing and, that way, optimize script
execution time.

Breadcrumbs and Pin

When you’re analyzing your trace lines, you can use the breadcrumbs to check how you arrived to the line and
view actions that occurred. In the trace list, click . Other traces are removed from the list, so that only the
pinned trace and its children traces are displayed, and the breadcrumbs display above the list. By pinning, you
can isolate a group of traces within one action and focus on analyzing them. Using this feature affects groups
on the left-hand side. Clicking the same icon removes the breadcrumbs and all data is displayed in Trace. If
you select a particular group, only the content of that group is displayed. Doing so is useful when you have
extensive data.

16.2.3 Developer Console Groups

The Groups section lists the main traces (high-level traces - Trace H) so you can expand them and have a
hierarchical overview of the underlying traces.

You can filter groups by entering a keyword. The filter can also be negative (for example, you can choose to view
all the traced lines that don’t contain a particular word, such as clone, for example). The feature also enables
filtering support for characters, asterisks, and question marks. The question mark replaces one character and
the asterisk replaces any character and any number of characters.

SAP CPQ Setup and Administration Guide


Log and Developer Console PUBLIC 833
16.2.4 Developer Console How-To

Here are listed some frequent how-to scenarios about the Developer Console with detailed explanations.

• How and where can I see when an attribute gets its values?
In the Developer Console, find the action ChangeAttributeValue, click on the eye icon to view it, and in the
Logger field, search for ProductAttributeValue and select it. You can also search via the fields Label and
Message.

The display pattern for the ChangeAttributeValue is: Change attribute, Name: {Attribute name},
stdAttrCode: {Standard attribute code}, Value {Attribute value} is selected. For example, if you want to find
when an attribute gets a specific value, you can type in the Message search field: Change attribute, Name: *,
stdAttrCode: * Value specific_value is selected.
Also, you can search by the attribute name, and in that case, replace * with the name of the attribute.
To check all assignments to attribute specific_name, just type in the Message search field: Change
attribute, Name: specific_name.
The same applies for the standard attribute code.
• How can I see the names of all scripts that are executed within an action?
When you click view (the eye icon) for an action, you should enter Script Execution to filter the Message
column. You can also see here the total duration of all scripts for the selected action. By selecting the
Slowest first checkbox, you can see which script takes the longest time to execute.

 Note

When a script crashes, you can check the log to see clear information about the problem.

• How can I see when the value of a property is changed via scripting?
Pin the message of the script and all traces related to this script are displayed. The traces contain
information about the change that has been done by the script.

SAP CPQ Setup and Administration Guide


834 PUBLIC Log and Developer Console
• How can I see the total number of database queries within an action?
In the Developer Console, select the full mode and after that execute any action in SAP CPQ (for example,
Save Quote). In the Developer Console, you should see the logs for that action. Click the view (the eye icon),
and you should see more details about the selected action. In Logger, enter DBGateway and in Labels enter
Database and you should see all database queries.

• How can I see the number of evaluated formulas?


When you click the view (eye icon) for an action, you can filter it by entering ProductLogic in Logger and
RuleEngine in Label . Or you can enter CartLogic in the Logger and QuoteParser in Label.
• How to download trace XLSX from the developer console?

 Note

Only the administrator is able to provide developer console exports and console features in general.

• How to check the performance details for more information?


In the Developer Console there is the Performance button for some actions. If you click the button, a popup
with more information about the performance displays.

SAP CPQ Setup and Administration Guide


Log and Developer Console PUBLIC 835
• How to check the duration when we call the Salesforce SOAP API?
In the Developer Console, select the full mode and after that execute an action that calls the
Salesforce SOAP API from SAP CPQ (for example, Update opportunity). To filter the results, enter
Webcom.Configurator.SFPartnerWSDL.SforceService in Logger. For the filtered trace messages, the Labels
column displays external API call, Salesforce.

• How can I use breadcrumbs in the Developer Console?

This is a useful feature that allows you to see exactly which actions are executed, which user performed
the action, and provides you with information about the quote and the tab (in the example, it is for
ExecuteAction). You have access to all the IDs and you can find the object in the database and check all the
information regarding the action, the user, the tabs and the quote.

Related Information

Performance Troubleshooting
User Interface Troubleshooting

SAP CPQ Setup and Administration Guide


836 PUBLIC Log and Developer Console
Scripting Troubleshooting

16.2.5 Debugging with Developer Console

This section describes some typical scenarios when you can use the Developer Console to debug your SAP
CPQ.

Retracing and Debugging Iron Python Scripts

This feature is explained through a simple example script:

a = 0;
Trace.Write("a is initialized.")
a = 100;
Trace.Write("a is changed.")

This script initializes the variable a, traces the variable, and later updates the value of the variable to 100
and traces it once again. When the script gets executed (for example, after the quote has been changed), the
Developer Console logs two trace messages and displays them.

Scripts have an interface for writing the trace and the log using Trace.Write and log.Write. Log data is
visible in the Log [page 829] and this interface can be used to log information that is useful for monitoring
while the trace interface should be used for debugging data. It’s important not to overuse the log feature
because your log form will end up full of data that may not be useful. Also, if you log too much, you’ll slow
down your scripts because logs are much slower to process than the trace. Ultimately, unlike the trace, the log
is persistent, which makes it useful for monitoring and analysis, but it’s preferable to use the trace interface
instead of the log whenever that is possible.

 Note

When you set your script to be a post action for Generate Documents, make sure to use Log.Write to
log your data and any messages. Avoid using Trace.Write since it doesn’t get recorded in the Developer
Console. This only applies to the Generate Documents action.

SAP CPQ Setup and Administration Guide


Log and Developer Console PUBLIC 837
Tracking Attribute Changes During Rule Execution Loops

Tracking attribute changes during rule execution loops can help you understand why the system is maybe
slower than usual. For example, if your product rules overlap, SAP CPQ takes longer to execute the rules. For
example, the product Network cable has two rules attached to it: if Category 6 is selected, the cable length
is set to 100 meters and if the length of the cable is over 100 meters, then the Category 6 must be selected.
If users first set the cable length to 110 meters, then both rules are executed. The first rule sets the cable
category to Category 6 and the second rule sets the cable length as a result of the Category 6 setting
(100 meters). In scenarios like this, rules are always going to be performed in two loops, because the two rules
correlate. The Developer Console records execution of rules, and displays a message that describes why the
system is running slower.

SAP CPQ Setup and Administration Guide


838 PUBLIC Log and Developer Console
Important Disclaimers and Legal Information

Hyperlinks
Some links are classified by an icon and/or a mouseover text. These links provide additional information.
About the icons:

• Links with the icon : You are entering a Web site that is not hosted by SAP. By using such links, you agree (unless expressly stated otherwise in your
agreements with SAP) to this:

• The content of the linked-to site is not SAP documentation. You may not infer any product claims against SAP based on this information.

• SAP does not agree or disagree with the content on the linked-to site, nor does SAP warrant the availability and correctness. SAP shall not be liable for any
damages caused by the use of such content unless damages have been caused by SAP's gross negligence or willful misconduct.

• Links with the icon : You are leaving the documentation for that particular SAP product or service and are entering an SAP-hosted Web site. By using
such links, you agree that (unless expressly stated otherwise in your agreements with SAP) you may not infer any product claims against SAP based on this
information.

Videos Hosted on External Platforms


Some videos may point to third-party video hosting platforms. SAP cannot guarantee the future availability of videos stored on these platforms. Furthermore, any
advertisements or other content hosted on these platforms (for example, suggested videos or by navigating to other videos hosted on the same site), are not within
the control or responsibility of SAP.

Beta and Other Experimental Features


Experimental features are not part of the officially delivered scope that SAP guarantees for future releases. This means that experimental features may be changed by
SAP at any time for any reason without notice. Experimental features are not for productive use. You may not demonstrate, test, examine, evaluate or otherwise use
the experimental features in a live operating environment or with data that has not been sufficiently backed up.
The purpose of experimental features is to get feedback early on, allowing customers and partners to influence the future product accordingly. By providing your
feedback (e.g. in the SAP Community), you accept that intellectual property rights of the contributions or derivative works shall remain the exclusive property of SAP.

Example Code
Any software coding and/or code snippets are examples. They are not for productive use. The example code is only intended to better explain and visualize the syntax
and phrasing rules. SAP does not warrant the correctness and completeness of the example code. SAP shall not be liable for errors or damages caused by the use of
example code unless damages have been caused by SAP's gross negligence or willful misconduct.

Bias-Free Language
SAP supports a culture of diversity and inclusion. Whenever possible, we use unbiased language in our documentation to refer to people of all cultures, ethnicities,
genders, and abilities.

SAP CPQ Setup and Administration Guide


Important Disclaimers and Legal Information PUBLIC 839
www.sap.com/contactsap

© 2023 SAP SE or an SAP affiliate company. All rights reserved.

No part of this publication may be reproduced or transmitted in any form


or for any purpose without the express permission of SAP SE or an SAP
affiliate company. The information contained herein may be changed
without prior notice.

Some software products marketed by SAP SE and its distributors


contain proprietary software components of other software vendors.
National product specifications may vary.

These materials are provided by SAP SE or an SAP affiliate company for


informational purposes only, without representation or warranty of any
kind, and SAP or its affiliated companies shall not be liable for errors or
omissions with respect to the materials. The only warranties for SAP or
SAP affiliate company products and services are those that are set forth
in the express warranty statements accompanying such products and
services, if any. Nothing herein should be construed as constituting an
additional warranty.

SAP and other SAP products and services mentioned herein as well as
their respective logos are trademarks or registered trademarks of SAP
SE (or an SAP affiliate company) in Germany and other countries. All
other product and service names mentioned are the trademarks of their
respective companies.

Please see https://www.sap.com/about/legal/trademark.html for


additional trademark information and notices.

THE BEST RUN

You might also like