Professional Documents
Culture Documents
Big Machine E Book
Big Machine E Book
Administration Cookbook
CONFIGURATION
COMMERCE
DOCUMENT ENGINE
Toni Pastorino
With contributions from BigMachines
Development, QA, Professional Services
and Product Management teams
ACKNOWLEDGEMENTS
I feel very lucky to work with the incredible team here at BigMachines. Its a pleasure to be a part
of Product Management and Team Super Awesome! I laugh on a daily basis here, which makes the
days that much more enjoyable. I could go on and on thanking different people and departments
for their hard work and dedication, but the acknowledgements page would be a chapter long, so I
am picking the standouts on this project!
Id like to send a big thanks to those who took the time to contribute to and review the content of
this cookbook - you know who you are! The book wouldnt be the same without your efforts.
Thank you to Justin Reinert for setting me up with an expert to help me hone my skills. A big
thanks to Roberta Schwartz for her patience and the expertise that she shared. She has become a
mentor.
Last, but most important, my sincere gratitude goes to Tim Handorf. This book wouldnt have been
completed without his trust, guidance and support.
Table of Contents
15
16
16
17
INTRODUCTION
ABOUT THIS BOOK
HOW TO USE THIS BOOK
BIGMACHINES ADMIN PLATFORM
25
GENERAL ADMINISTRATION
27
28
29
30
31
GETTING STARTED
1.1: UNDERSTANDING BIGMACHINES
1.2: APPLICATION BASICS
1.3: VIEWING VERSION DETAILS
1.4: THE FILE MANAGER
37
38
39
41
42
43
44
46
49
50
52
52
54
57
60
65
66
68
68
70
72
73
75
76
77
78
CONFIDENTIAL
81
82
82
84
88
91
92
DATA TABLES
5.1: DATA TABLES OVERVIEW
5.2: FOLDERS
5.3: MANUALLY ADDING A TABLE
5.4: IMPORT AND EXPORT OF DATA TABLES
5.5: UPLOAD STATUS AND ERROR LOGS
5.6: SEARCH FOR DATA WITHIN A TABLE
97
98
98
100
INTERNATIONALIZATION
6.1: LANGUAGES
6.2: LANGUAGE AND COMMERCE
6.3: CURRENCIES
105 CONFIGURATION
CREATING A CONFIGURED PRODUCT
7.1: PRODUCT HIERARCHY
7.2: PRODUCT FAMILY MAINTENANCE
7.3: PRODUCT LINE/MODEL MAINTENANCE
119
120
121
122
123
126
126
128
CONFIGURABLE ATTRIBUTES
8.1: CONFIGURABLE ATTRIBUTE OVERVIEW
8.2: ADDING CONFIGURABLE ATTRIBUTES
8.3: ATTRIBUTE EDITOR BASICS
8.4: TEXT ATTRIBUTE EDITOR
8.5: DATE ATTRIBUTE EDITOR
8.6: HTML ATTRIBUTE EDITOR
8.7: MENU ATTRIBUTE EDITOR
143
144
146
149
150
152
155
158
159
161
162
163
164
167
169
174
178
CONFIGURATION RULES
10.1: OVERVIEW OF CONFIGURATION RULES
10.2: GENERAL RULE ELEMENTS
10.3: SELECTING CONDITION ATTRIBUTES
10.4: BILL OF MATERIAL (BOM) RULES
10.5: PRICING RULES
10.6: HIDING ATTRIBUTE RULES
10.7: RECOMMENDATION RULES
CONFIDENTIAL
107
110
112
115
184
185
191
194
197 COMMERCE
199
200
201
205
206
207
210
211
214
215
215
216
220
221
DOCUMENT ATTRIBUTES
12.1: ATTRIBUTE TYPES
12.2: MAINTAINING ATTRIBUTES
12.3: GENERAL TAB
12.4: DEFAULT TAB
12.5: MODIFY TAB
12.6: DOCUMENT VIEWS TAB
12.7: MAPPING TAB
12.8: MAIN-DOC ATTRIBUTE SETS
12.9: SUB-DOC ATTRIBUTE SETS
12.10: USING THE RICH TEXT EDITOR
227
228
228
230
232
234
234
236
237
237
239
240
241
246
247
248
250
DOCUMENT ACTIONS
13.1: OVERVIEW OF ACTIONS
13.2: TYPES OF ACTIONS
13.3: MAINTAINING ACTIONS
13.4: GENERAL TAB
13.5: MODIFY TAB
13.6: DESTINATION TAB
13.7: INTEGRATION TAB
13.8: DOCUMENT VIEWS TAB
13.9: SPECIAL TABS
13.10: APPROVAL SEQUENCES
13.10.1: SUBMIT ACTION SET
13.10.2: APPROVALS TAB
13.10.3: SUB-ACTIONS
13.10.4: RESET REASONS TAB
13.10.5: WORKFLOW INTERACTION
13.11: ORDER OF OPERATIONS
253
254
256
258
261
263
LAYOUT ADMINISTRATION
14.1: LAYOUT ADMIN OVERVIEW
14.2: INPUTS OVERVIEW
14.3: OUTER PANELS
14.4: COMMERCE TABS
14.5: COLUMN LAYOUTS
CONFIDENTIAL
283
284
285
287
288
291
293
296
300
302
COMMERCE WORKFLOW
15.1: OVERVIEW OF WORKFLOW
15.2: WORKFLOW STEPS
15.3: PARTICIPANT PROFILES
15.4: USER ACCESS RIGHTS
15.5: DOCUMENT VIEWS
15.6: TRANSITION RULES
15.6.1: NOTIFICATIONS
15.6.2: MOBILE APPROVALS
15.7: TIMERS
305
306
308
311
318
TRANSACTION MANAGER
16.1: DATA COLUMNS OVERVIEW
16.2: PROCESS MANAGER COLUMNS
16.3: PROCESS ACTIONS
16.4: VIEW MANAGER
323
324
325
327
328
PROCESS INVOCATION
17.1: INVOCATION ACTIONS
17.2: INVOCATION RULES
17.3: ASSIGN USER RIGHTS
17.4: CATALOG PAGE REFERENCE
331
332
333
336
339
340
SHOPPING CARTS
18.1: SHOPPING CART INTRODUCTION
18.2: ENABLE SHOPPING CART
18.3: INVOKE THE SHOPPING CART
18.4 - NAVIGATION MENU
18.5 - USER-SIDE FUNCTIONALITY
343
344
346
349
351
356
358
359
REPORTING
19.1: REPORT MANAGER OVERVIEW
19.2: REPORT BUILDER - FILTERS
19.3: REPORT BUILDER - DISPLAY COLUMNS
19.4: CHARTS
19.5: RUN REPORTS
19.6: SCHEDULE REPORTS
19.7: CREATING CALCULATED COLUMNS
362
362
APPENDIX A
Test To Production
CONFIDENTIAL
265
266
270
274
277
PROGRAMMING CONCEPTS
20.1: PROGRAMMING LANGUAGE
20.2: PROGRAMMING STRUCTURE
20.3: BASIC DATA TYPES
20.4: COMMON ELEMENTS OF STATEMENTS
20.5: WHAT IS A FUNCTION?
20.6: BASIC SYNTAX OF BML
20.7:VARIABLE DECLARATION
20.8: STRING VS. NUMBER
379
380
381
382
382
385
388
393
394
395
396
397
398
399
401
402
404
STRING FUNCTIONS
22.1: UPPER(str) AND LOWER(str)
22.2: ATOF(str) AND ATOI(str)
22.3: STARTSWITH(str, substring)
22.4: LEN(str)
22.5: ISNUMBER(str)
22.6 : TRIM(str)
22.7: REPLACE(str, old, new, [n])
22.8: FIND(str, substring, [start], [end])
22.9: SUBSTRING(str, start, [end])
407
408
408
409
410
411
412
413
415
417
420
423
NUMERIC FUNCTIONS
23.1: INTEGER (x)
23.2: ROUND(x)
23.3: CEIL(x)
23.4: FABS(x)
23.5: POWER FUNCTIONS POW (x,y) AND EXP (x)
23.6: FMOD(x,y)
23.7: LOG(x) AND LN(x)
23.8: SQRT(x) AND HYPOT(x,y)
23.9: SIN(x), COS(x) AND TAN(x)
23.10: ASIN(x), ACOS(x), AND ATAN(x)
23.11: SINH(x), COSH(x), TANH(x)
427
428
428
DATE FUNCTIONS
24.1: GETDATE()/GETSTRDATE()
24.2: ISWEEKEND(date)
CONFIDENTIAL
24.3: ISLEAP(year_num)
24.4: DATETOSTR(date)
24.5: STRTOJAVADATE(str, format)
24.7: ADDDAYS (date, num_of_days)
24.8: GETDIFFINDAYS(date 1, date 2)
437
438
438
439
441
442
CONDITIONAL FUNCTIONS
25.1: USING AN IF...STATEMENT
25.2: USING AN IF...ELSE STATEMENT
25.3: FOR...LOOP
25.4: BREAK
25.5: CONTINUE
445
446
448
451
455
456
458
459
460
461
462
463
463
464
465
467
468
473
474
474
475
476
477
478
479
480
488
489
489
ADVANCED FUNCTIONS
27.1: DICT(dictType)
27.2: PUT(dictIdentifier, key, value)
27.3: GET(dictIdentifier, key), getINT, GetFloat
27.4: CONTAINSKEY(dictIdentifier, key)
27.5: MAKEURLPARAM({name 1:value 1})
27.6: URLDATABYget()
27.7: URLDATABYpost()
27.8: BMQL()
27.9: INVOKE ()
27.10: GETARRAYSTR()
27.11: GETCONFIGATTRVALUE()
491
492
492
LIBRARY FUNCTIONS
28.1: ADD A UTIL LIBRARY F(X)
28.2: ADD A COMMERCE LIBRARY F(X)
CONFIDENTIAL
429
430
430
432
433
494
496
501
502
504
509
510
512
512
TROUBLESHOOTING BML
30.1: COMMON ERROR MESSAGES
30.2: TIPS AND REMINDERS
30.3: BEST PRACTICES FOR BML
GETTING STARTED
31.1: THE DOCUMENT PANEL
31.2: CREATE A NEW DOCUMENT
31.3: ADD A NEW PAGE
31.4: SAVE DOCUMENT & DEPLOY CHANGES
31.5: COPY A PAGE
31.6: RE-ORDER PAGES
31.7: ADD A PAGE FOR EACH LINE ITEM
31.8: CREATE A BACKUP OF A DOCUMENT
31.9: REVERTING TO A BACKUP COPY OF A DOCUMENT
31.10: CHANGE THE UNITS OF THE PAGE RULER
31.11: PREVIEW THE OUTPUT AS PDF OR RTF
31.12: CHANGE THE OUTPUT FROM PDF TO RTF
31.13: DELETE A PAGE
531
532
533
533
534
536
537
538
PAGE LAYOUTS
32.1: CHANGE PAGE ORIENTATION AND MARGINS
32.2: add/REMOVE A HEADER/FOOTER FROM A PAGE
32.3: MODIFYING THE BODY MARGINS
32.4: MULTI-COLUMN PAGE
32.5: DEFINING CUSTOM PAGE LAYOUTS
32.6: USING A CUSTOM LAYOUT FOR A PAGE
32.7: FIND THE LAYOUT NAME OF A PAGE
541
542
544
545
546
546
546
547
547
10
CONFIDENTIAL
555
556
558
558
558
560
561
562
563
564
DYNAMIC ELEMENTS
34.1: ADD A BIGMACHINES ATTRIBUTE VALUE
34.2: INSERT A COMMERCE ATTRIBUTE
34.3: DELETE A DYNAMIC ELEMENT
34.4: INSERT A REPEATING SECTION
34.5: INSERT A CONDITIONAL SECTION
34.6: ADD AN ELSE CLAUSE
34.7: FORMAT DYNAMIC DATA AS CURRENCY
34.8: SORT LINE ITEMS TO MATCH QUOTE SCREEN
34.9: INSERT LINE ITEM OR CONFIG ATTRIBUTE
567
568
568
CONTENT LIBRARY
35.1: ADD AN ITEM TO THE CONTENT LIBRARY
35.2: INSERT OR REMOVE CONTENT
571
572
573
574
COMPLEX CONDITIONALS
36.1: COMPLEX CONDITIONAL LIBRARY
36.2: INSERT A COMPLEX CONDITIONAL
36.3: ADD A COMPLEX CONDITIONAL
579
580
581
582
582
583
584
585
586
586
586
587
588
588
589
589
589
590
591
591
TABLES
THE TABLE TOOLBAR
37.1: INSERT A TABLE
37.2: REMOVE A TABLE
37.3: INSERT OR DELETE A COLUMN
37.4: EDIT COLUMN WIDTHS
37.5: INSERT/DELETE TABLE ROWS
37.6: ADD/REMOVE A HEADER ROW
37.7: MERGE SEVERAL TABLE CELLS
37.8: SPLIT A TABLE CELL
37.9: DISPLAY A TABLE ROW FOR EACH LINE ITEM
37.10: DISPLAY A ROW BASED ON CONDITIONS
37.11: CENTER ALIGN A TABLE
37.12: CENTER ALIGN CONTENT IN A CELL
37.13: INSERT DYNAMIC DATA INTO A CELL
37.14: APPLY BORDERS TO TABLE CELLS
37.15: APPLY A BACKGROUND COLOR TO CELLS
37.16: SWITCH THE UNITS FOR A TABLE
37.17: SELECTING TABLE CELLS
37.18: DELETING DYNAMIC DATA FROM A TABLE
CONFIDENTIAL
548
549
550
551
551
552
552
11
591
593
594
595
595
596
597
598
599
601
602
603
603
604
604
607
608
608
608
610
611
611
612
615
616
616
USEFUL TECHNIQUES
41.1: USE IMPOSSIBLE PAGE CONDITIONS
41.2: MODIFY XSL BUT KEEP DESIGN MODE
621
622
624
624
625
631
632
632
APPENDIX A
Workarounds & Troubleshooting
638
638
APPENDIX B
Formatting Expression Editor Parameters
642
642
APPENDIX C:
Keyboard & Mouse Shortcuts
12
CONFIDENTIAL
CONFIDENTIAL
13
Document Engine
515
14
CONFIDENTIAL
INTRODUCTION
BigMachines automates selling processes and captures an organizations tribal knowledge to
provide online product selection, configuration. This is the process of allowing users to customize
a model to suit their needs as well as quoting, and ordering capabilities for new products and
aftermarket parts and services.
BigMachines platform has been built for rapid, on-demand deployment through an intuitive web
interface. Both users and system administrators only need a browser and a secure log-in to
access BigMachines solution from anywhere in the world. As a result, our customer can rapidly
INTRODUCTION
CONFIDENTIAL
15
Novice BigMachines Administrators as well as those that are already familiar with the BigMachines
application will find this book helpful in reviewing basic concepts of the BigMachines application and
how to manage it to suit the needs of their company.
Advanced BigMachines Administrators should be able to skim the basics and dive right into the
more advanced areas of this book. You should be able to quickly formulate your own solutions for
any unique use case you may have.
HOW-TO
WINDOW
POINTS TO REMEMBER
TUTORIAL
16
CONFIDENTIAL
The use of tables and screenshots organize the information in a reader-friendly manner that helps
guide administrators through the commerce process and workflow and can be used for quick
reference. There is also a Glossary and Index at the end of the book to promote easy reference of
material.
In addition to this cookbook, it is recommended throughout the book to use our online Knowledge
Database that is available by clicking the Help icon on your application.
General Administration
This section guides administrators through the customization of the application as well as learn
how to manage parts, price books, data tables and global system settings.
Configuration
Here, administrators will learn how to create and manage the product hierarchy, configurable
attributes, configuration rules and configuration flows.
Commerce
There are two parts to commerce: Process and Workflow. Both are covered in here, detailing
how to create and maintain document actions and attributes and how to layout your commerce
document. Well also cover standard approvals, shopping cars and the transaction manager.
BML
Document Engine
The Document Engine is a web-enabled visual editor that allows administrators to create dynamic
document templates in either PDF or RTF formats. This section is a comprehensive guide to
features and provides many examples and advanced use cases.
Integration
BigMachines is able to integrate with many CRM and ERP systems. Ask your sales representative
or implementation engineer for a cookbook that provides details to setting up your application
with your CRM.
CONFIDENTIAL
17
INTRODUCTION
BigMachines has its own scripting language that can be accessed throughout the system. This area
of the cookbook goes into detail about BML, the different function editors, all of the available
functions, proper syntax and provides use cases, including how to use BML with SOAP.
You can access the Admin Platform by clicking the Admin link once you have logged into
BigMachines. Once you have logged in you will be taken to the Administration Platform. From here,
you will build and maintain your entire application.
You can view the Admin Platform in two different ways: As image thumbnails or as a list.
Image Thumbnails
You can hover over any of the categories to access the sub-categories you need. For example, to
access the parts database, you will hover on Products and then click Item Master.
18
CONFIDENTIAL
List View
CONFIDENTIAL
19
INTRODUCTION
This section allows you to set up your quoting, ordering, approval, documents and other workflow
processes. By creating ordered sets of commerce documents, associated attributes and actions,
you can enable buyers and supplier agents to conduct commerce on your system. Built from the
ground up, each commerce process can be customized according to how you want to structure
data flow between users during transactions. You can create one process for all commerce
transactions or multiple processes based on different purchase types.
DEVELOPER TOOLS
This section provides access to the data tables, BML Librarys, Admin and Error Logs and Global
Functions to help you build powerful custom solutions to meet your specific business use cases.
This section provides three tools that enhance the features already available to you through the
administration platform.
INTEGRATION PLATFORM
This section supports an integration layer that provides various types of partner integrations,
including back-end ERP systems. Here you can define communication parameters for real-time
integration, you can set-up Single Sign-On allowing users to login through an IDP directly to
BigMachines, you can integrate Parts with a partner and you can also use the SOAP services API to
integrate with on-demand applications.
20
CONFIDENTIAL
GENERAL
This section allows you to manage your application settings ranging from the general setting,
internationalization, to navigation menus. In addition, you can define and customize your
applications state and country options. You can define your general application settings including
password options, login options and feature settings for exchange rates and unit conversions. You
can also define options for updating your favorites for items to be re-configured.
PRODUCTS
CONFIDENTIAL
21
INTRODUCTION
The section involves defining and configuring Products and Catalogs. You can manage your
configuration models including the product hierarchy, attributes, and rules. This is also where you
can manage parts data, including part numbers, serial numbers, part associations, and serial number
associations. There are different categories of parts including direct buy items, recommended only
items and parts that are part of a bill of material hierarchy.
This section allows you to define, manage, and customize your site branding and colors. You can
also define a custom HTML header, footer from this section. One of the key features available in
this section is the ability for you to define your portal home page. Use the style sheets to define
your site branding and colors.
USERS
This section allows you to manage user access rights. It also lets you manage information and access
rights for partner organizations and accounts.You can also manage your internal users including
being able to activate and inactivate them. Your application profile is maintained in the host
company details that can be accessed from this section.
22
CONFIDENTIAL
UTILITIES
This section allows you to use upload and download functions for the purpose of editing large
amounts of system data, like adding parts or users. You can upload and download system data
in bulk, including models, configurable attributes, rules, parts, account records, transactions, and
commerce processes. This is also where you can access your file manager, which is where you will
store your application files, such as images.
INTRODUCTION
CONFIDENTIAL
23
24
CONFIDENTIAL
BigMachines Application
General Administration
26
CONFIDENTIAL
1
GETTING STARTED
In This Chapter:
Understanding BigMachines
Application Basics
Viewing Version Details
File Manager Overview
CONFIDENTIAL
27
28
CONFIDENTIAL
GETTING STARTED
CONFIDENTIAL
29
Details
The version currently in use.
The date and time when it was released.
The cache of database connections maintained by the
database.
If the Task Thread should be displayed or not.
If this site is integrated with WebMethods.
Reporting
Integration
Configuration Cache
30
CONFIDENTIAL
GETTING STARTED
CONFIDENTIAL
31
Step 1:
Click Browse to search and locate the file(s) you would like to upload. You can add files
individually or add multiple files through .ZIP. File names must be alpha-numeric or contain
underscores. Spaces are not allowed.
Step 2:
Click Add File or Add/Update Files to upload your files to the File Manager. Your
uploaded file will now appear in the File Manager List.
Step 3:
Determine which Folder your file(s) should be placed in. To create a new folder, click Edit
under the Folders section.
Step 4:
Enter a Folder Name and click Create. To delete a folder, select the folder for deletion
from the drop-down menu and click Remove.
32
CONFIDENTIAL
You can also choose to search for files and then move the returned file to a folder. Use the check
box to select the files and then u se the drop-down menu to select the appropriate folder. Click
Move to move the files to the folder you selected.
CONFIDENTIAL
33
GETTING STARTED
You can use the drop-down menu to select an individual folder to search or to search through
all folders. If you know the file name, or part of the file name, you can enter it into the Filename
section. Use * as a wildcard for partial names. You can also choose files that were modified
within a certain time frame. Click Search to perform the search and Clear Search Results to
clear all files returned and perform a new search.
Above the list of files, click on the appropriate letter or number that you would like to search.
Remember that the search is only performed on the first character of the File Name.
File List
The following information is displayed for each file:
Header
Description
Select
File Name
File Location
Description
Replace
Date Modified
Records the most recent time stamp for when the file was
last updated.
POINTS TO REMEMBER
Organize your files into folder. Files will be easier to find and maintain.
Be careful when adding or removing files. The File Location changes when this
happens. If the file is referenced anywhere on the site, the link will be broken.
File Location: - Copy these values to access the files from anywhere on the
web. An example of a full URL path would be:
o mysite.bigmachies.com/bmfsweb/mysite/image/Branding/logo_small.gif
When referencing a File Manager file anywhere within BigMachines(i.e.
- Header/Footer/Config HTML Templates, etc.) use the $BASE_PATH$
shorthand URL:
o $BASE_PATH$/Branding/logo_small.gif
34
CONFIDENTIAL
GETTING STARTED
CONFIDENTIAL
35
36
CONFIDENTIAL
2
USER AND COMPANY SET-UP
In This Chapter:
Host Company
User Set-Up
User Administration
Admin Access Control
Group Administration
Partner Organizations
Accounts
CONFIDENTIAL
37
SuperUser
FullAccess
Upload Products
Modify Commerce
Modify Configuration
View/Modify Users
Manage Accounts
Manage Groups
SalesAgent
RestrictedAccess
X
X
38
CONFIDENTIAL
Step 2:
Select the Number Format, Units, Date/Time Format and Time Zone.
Step 3:
Click Update to return to the Admin Home Page.
From the Admin Home Page, go the section Users> Internal Users.
Step 1:
Click Add from the User Administration List page.
Step 2:
Complete required information (marked by an *) and as many other fields as you deem
necessary.
Step 3:
Select the appropriate user type for each profile you create. Refer to Recipe 2.1 for
information on user types. If a FullAccessUser type, check the Permission to Add/Modify
Users box to give them additional modification rights.
CONFIDENTIAL
39
Step 4:
Make sure to select the language and currency preference for each user.
Step 5:
Click on the Groups tab.
Step 6:
Associate the user with a particular group by using the < and > arrows.
Step 7:
Click Apply to stay on the page or Update to return to the User Administration List
Page.
Step 8:
Click Add. This will take you back to the User Administration List page.
40
CONFIDENTIAL
Action
Add
Activate/Inactivate
Sort Fields
Export User Details
Proxy Login
Once created, users cannot be deleted. Instead, you must inactivate a user.
CONFIDENTIAL
41
Access Control provides the SuperUser or a FullAccess user with super user privileges the ability
to grant controlled access across various admin sections to a FullAccess user type (without super
user privileges). A FullAccess user is said to have SuperUser privileges when they have permission
to create/edit users.
By default, all Host Company FullAccess users are given the permission to view/edit all
administration modules (except users). The FullAccess user can only access the product families
and data tables that they have been given access to.
42
CONFIDENTIAL
Step 5:
Click Add to return to the Group Administration List page.
GROUPS CANNOT BE DELETED. If you no longer need a group, just
change the group name to ***DELETE ME***. This will let other admin users
know that this group is no longer used.
CONFIDENTIAL
43
Step 4:
Remove users by selecting one or more users and clicking Delete.
POINTS TO REMEMBER
A user can belong to more than one group.
Group names can only contain alphanumeric characters and they must use
underscores in place of spaces. Names cannot begin with an underscore.
Determining what groups you need should be decided at the time of
implementation design.
44
CONFIDENTIAL
Step 5:
Enter an email address. This should be for the person who is designated as the
SuperUser. Upon initial login, make sure they change their password from superuser.
CONFIDENTIAL
45
Step 6:
Click Add to return to the Company Administration List page.
When you return to the Company Administration List page, you should see your Company Name,
the corresponding Login, and the Subscription type. Under the Access heading, you can select
whether a company has been Granted or Denied access to your application. Once selected, click
Update Access. Clicking on Users will display a complete list of users affiliated with a company.
Proxy Login allows you to login as a Partner Organization user.
2.7: ACCOUNTS
Accounts is the tool for supporting collaborative customer management in the BigMachines
system. Customer records can be individually created in the Accounts database or they can be bulk
uploaded into the system. Once customer records exist in Accounts, they are accessible to sales
agents, channel agents and full access users.
All users that have access to Accounts also have permission to make updates or additions to
Account records. Account records can contain general customer information, multiple address
records for billing and shipping data, and comments. To collect more specific information, full access
administrators can generate supplemental fields for capturing custom data.
A single Account record can be associated with one or more partner users. Associations are
necessary if you plan to integrate Accounts with other areas of administration, such as configuration
or commerce. Accounts can also be integrated with commerce to auto-fill commerce document
fields. Integrating Accounts with commerce speeds up document creation time by eliminating
redundant manual data entry.
For more information, click on the Help icon from Admin Home Page and Navigate to:
General Administration > User and Company Information > Accounts
46
CONFIDENTIAL
47
CONFIDENTIAL
48
CONFIDENTIAL
3
GENERAL APPLICATION SETTINGS
In This Chapter:
Application Branding
Page Templates and Home Flows
Navigation Menus
Global System Settings
Favorites
Bulk Upload/Download
CONFIDENTIAL
49
Home Page
This section allows you to customize the home page of the web site using HTML and JavaScript or
XSL. You can set up the web page in any way you choose in conjunction with the Home Page Flows
that are made available in the Page Templates and User Interface section. See Recipe 3.2 for more
details.
Typically, the home page serves as a portal to product selectors, model configurators, parts search,
company information, general product documentation, and/or external links. The most important
function within the Home Page is the ability to set application access rights and to deploy the home
page when changes are made.
50
CONFIDENTIAL
CONFIDENTIAL
51
Email Signature
The Email Signature options displays the existing email signature that can be modified in the text
box. The email signature that is defined and displayed on this page is attached to ALL emails sent by
the system.
52
CONFIDENTIAL
USE CASE
You would like to add the Shopping Cart to the Navigation Menu. The link will behave as
View Cart. For more information on Shopping Carts, please refer to Chapter 18.
Step 4:
Change the name of the Shopping Cart label. The URL has been automatically created
and is unable to be edited.
Step 5:
Determine if you would prefer this link be shown as a link or a tab.
Step 6:
Determine if you want to display the link as a text label, just be an icon, or have both. If you
choose both, you will need to select which side of the label you would like the icon to be.
CONFIDENTIAL
53
Step 3:
Click on the User-Defined tab. Verify that a link has been created for your Shopping Cart.
Click on Edit next to your Shopping Cart link. This will open up the link editor.
Step 7:
Click on Browse to open the File Manager and select your icon. If you want to remove
an icon, click on Clear.
Step 8:
Click Update or Close to return to the Commerce Navigation Menu Items List.
Step 9:
Click DEPLOY on the Navigation Menus list page.
Refer to the Help for more information on Global System Settings and Utilities.
ADMINISTRATION LOGS
Admin Change Logs maintain time stamped logs of administrative changes in commerce and
configuration. All add, update, delete and deploy events in these modules are recorded with the
details of the user that performed them. They are maintained for add, update, delete and deploy
events in commerce and configuration only. By default the log of the current month is displayed in
reverse chronological order so that the most recent is on the top and oldest one is at the bottom.
You can search for logs between a given period of time or by the last 6 month. After searching logs,
the results can be downloaded in CSV format.
54
CONFIDENTIAL
CONFIGURATION SETTINGS
There are options, like the ability to control the display of the processing dialog box or the number
of tabs, that can be set in configuration settings.
Configurable price options allow the ability to control the display of price on all pages, hide the
price when it is zero, as well as display the sum of recommended items, if any. Recommended item
options include the ability to control the display of items on the model configuration page, hide
missing items, and selection of items by default. See on-link Help for more information.
CONFIDENTIAL
55
COMMERCE SETTINGS
There are options available that allow the commerce processes to be deployed, cloned and
migrated. You can also set the transaction ID to be displayed on the search pop-up. There are
additional options for hiding commerce invocation buttons on Add from Catalog as well as the
ability to specify pop-up dimensions for search dialog and quick links. See on-link Help for more
information.
GENERAL OPTIONS
The General Options section allows you to manage application settings, login options, password
options and security settings. You can also manage Exchange Rates and Unit Conversions in this
section. See on-link Help for more information.
56
CONFIDENTIAL
Favorites List updates display to the user in several ways. Certain updates appear without any user
notification, like pricing and product attribute changes. Other updates change the status of items on
the Favorites List, such as products that are no longer available or that must be re-configured.
Standard Navigation Path: Admin Home Page > General > Favorite List
This administration page is used to update the product data displayed on the Commerce List. You
can tag items for re-configuration or change the status icons the system uses to indicate changes to
the Commerce List before performing an update.
CONFIDENTIAL
57
The update engine can only calculate pricing information on products with still-supported
configurations. When products have new or modified configurable attributes, you can set the
engine to skip over them during the update process. This speeds up Favorite List updates, but it
also forces users to reconfigure those products before purchase.
58
CONFIDENTIAL
Enter the time for starting the update in the Scheduled field. For example (11/11/2009
11:11AM).
Enter the email address of the person who wishes to received notification of completion of
the update in the Send Email To field.
Click Schedule Favorites List Update to synchronize all the existing commerce list entries.
2) Sort the Schedule Tasks List alphabetically by column. To sort products, choose the column you
want to sort by and click the header. To reverse-sort, click the header twice.
3) Delete a Scheduled Task by selecting it using the check box in the Delete column and clicking
Refresh. Note:You can delete the scheduled task to cancel the process before a Favorites List
update begins. While an update is happening, it is not possible to stop the process.
4) Select Favorites List images using the Favorite List Images section. To do so, click Browse against
the status for which you wish to modify the icon and upload the desired image. See Favorites List
Status Values.
CONFIDENTIAL
59
5) Set Flags using the Flag Equipment and Parts for Reconfiguration section. Select the items that
should not be updated. To do so: navigate to the items that have different supported configurations
by clicking a Link and mark all parts for reconfiguration; or navigate through the products hierarchy
(by clicking the links) and mark select products.
6) On each page that has selected items, click Update Flags to save your selection.
7) Click Back to go back to the admin home page
VERIFYING UPDATES
You can verify Favorites List updates by viewing the email notification generated when an update
process finishes. The system sends a confirmation email to the email address specified for the
update.
Confirmation emails contain the number of products processed, the number of items that no
longer exist in the catalog, and the number of items that now need to be reconfigured before
purchase.
Commerce Transactions
Commerce Processes
Configuration Rules
Data Tables
Catalog and Configuration Data
60
CONFIDENTIAL
Description
id
The BigMachines system generates a unique ID for each item it stores, be it a rule,
attribute, account record, ... etc. For downloads, the ID field can be used to filter a
single record in that download category. In general, you can locate an ID by navigating
to the item you want to download and then viewing the corresponding ID in the URL.
company_id
ref_id
This is the ref_type ID that is generated (i.e. - Model ID, Product ID, or Company ID
for all Product Families). Navigate to the Model List Admin Page and view the ref_type
ID located in the URL.
segment_id
For the all product family product category, the segment ID equals the company ID.
Company IDs can be viewed on the commerce home page. For the single segment
product category, the segment ID is a unique number associated with a particular
segment. Segment IDs can be located by navigating to the Product Line Administration
List page and viewing the segment_ID that displays in the URL.
product_line_id
To locate a product line ID, navigate to the Model Listing Administration page and view
the product_line_ID appearing in the URL.
model_id
attribute_id
To locate a model ID, navigate to a rule at the model level and view the model_ID
appearing in the URL.
To locate an Attribute ID, navigate to the Attribute Administration List page, putting the
cursor over a specific attribute link and viewing the ID that dynamically appears in the
browser windows bottom bar.
rule_id
To locate a Rule ID, navigate to the Rule List page, putting the cursor over a specific
rule link and viewing the ID that appears in the browser windows bottom bar.
part_id
To locate a Part ID, navigate to the Part Administration page for a specific part and
viewing the pid in the URL.
To locate a Serial number IDs, navigate to the Serial Number Administration page for a
specific serial number and viewing the id in the URL.
part_association_id
Part association IDs can be found on the Part Tree for Part Number page which
displays part associations for a select part. To view a part association ID, highlight a part
number and view the ID that dynamically appears in the browser windows bottom bar.
parent_part_id
child_part_id
When downloading a single part association, these IDs must be used together. Each
field expects a part_id, one for the parent part association and the other for the child
part association. Part associations can also be downloaded using the part_association_
id instead of these two IDs.
serial_number_id
part_id
When downloading a single serial number association, these IDs must be used together.
The first field expects the serial_number_id, and the second field expects the part ID
for the associated part.
61
serial_number_id
POINTS TO REMEMBER
If the download file you want to view does not appear in the Download XML
Files page, the download process may not have been completed.
Files too large to display in a browser must be opened in an editor tool.
When no records are found, the downloaded file will contain the following
XML: <record_list></record_list>
After a files is removed from the server, it is not possible to recover it.
UPLOADS
Bulk Upload is used to enter large sets of data into the BigMachines system. All data that can be
uploaded into the system can also be downloaded, and more importantly, all downloaded XML data
can be uploaded. You can therefore, use the download process to generate upload templates for
each type of data
The upload process enables you to add, update or delete different types of data. Using FTP or the
UI upload, you can migrate XML/CSV upload data from your local system to an internal server. The
process involves generating an XML/CSV formatted file, transmitting that file (and any supporting
files) to the server dedicated to receiving upload files. After the file transfer completes, you can
schedule the actual upload of data through the Bulk Data Services tool. Another upload procedure
is available by which the user can upload a zip file directly through the UI in the Upload section
of the Bulk Data Services tool. Depending on the number of records being uploaded, an upload
process may take a few seconds to a few hours to complete.
After the bulk upload process finishes, a bulk upload error log is generated containing a summary
of the upload process, including a list of error messages. You or another administrator will receive
an email notice when an upload process occurs. The automatically generated email contains a
summary of the upload, including number of records successfully uploaded and number of failures.
Detailed errors only appear in the bulk upload error log.
The types of data you can upload into the system are shown below:
Commerce Transaction
Accounts/Accounts/User associations
Configurable attributes
Configuration rules
Parts/Part Associations/Pricebook Associations
Serial numbers/Serial number associations
Users
Global Scripts
Commerce Process (See Commerce Test to Production)
Models
Product lines
File Manager
A single XML/CSV file can contain any combination of data categories. For example, you can upload
new pricing information for parts and new pricing rules for models. You could also add new user
62
CONFIDENTIAL
accounts and CRM customer records in the same XML file. There is no limit to the number of
records you can upload at the same time. The more records included in an upload file, the longer it
will take for the process to complete, however, individual records are visible on the system as soon
as they are uploaded.
Actions for Uploads
Each category of data supports a set of actions that can be performed on that data. For example,
for parts you can add, update and delete data through the upload process, whereas for user
accounts you can add and update data.
To view the full XML format for a particular process, you can use the download administration area
to extract a single record from the system. When downloading commerce or asset data, the entire
transaction, including all documents and sub-documents, is downloaded from the system.
General requirements:
The upload process supports uploading a single document (with sub-documents) only.
The system validates all commerce and asset management data generated through the XML
upload (or real-time integration) process. Each field must contain the data type the system
expects.
Action
Requirements
add
All tags downloaded can be used to add new data. For example <action>add</
action>
modify
All tags downloaded can be used to modify existing data or add new data. For
example <action>modify</action>
delete
All tags downloaded can be used to delete a piece of data. For example
<action>delete</action>
delete_all
update
Only available for mass delete of Parts based on a custom field value.
All tags downloaded can be used to modify/update existing data. For example
<action>update</action>
CONFIDENTIAL
63
delete_by_criteria
All tags downloaded can be used to delete all data. For example
<action>delete_all</action>
64
CONFIDENTIAL
4
PARTS AND PRICE BOOKS
In This Chapter:
CONFIDENTIAL
65
Step 3:
Enter the Partner Part Number ID and standard Price Book Entry ID. Parts
Integration will covered in Recipe 4.7.
66
CONFIDENTIAL
Step 4:
Enter a price in your base currency and any other currencies. When a price exists in
your base currency, but no other currencies, pricing will be available in those other currencies
provided that exchange rates exist.
Step 5:
Enter values for the custom parts fields, if necessary.
Step 6:
Click Browse to upload and associate up to 4 square images with the part for File 1, File 2,
File 3, and File 4 fields.
Step 7:
Click Add. This adds the new part with the details provided, and displays the Part Search
Results page that lists the part numbers matching your search.
From the Parts Search Results page, click on the part number that youd like to edit. Edit any of
the information displayed on the Part Administration page. When you are finished, click Update to
save your changes.
To Delete a Part
From the Parts Search Results page, mark the check box corresponding to the part to be deleted
and click Delete. The refreshed view of the Parts Search Results page will show the deletion.
Use caution when deleting parts because there is no way to recover the
deleted data. When a part is deleted, all parts associations are also deleted.
CONFIDENTIAL
67
To Edit a Part
Navigation Path: Admin Home Page > Products > Item Master
Step 1:
Enter a Part Number in the Part Number Field and click Search.
Step 2:
The Parts Search Results page will show a list of part numbers matching your criteria. From
here you can:
View or edit parts details by clicking the Part Number.
View or edit Parts Associations by clicking the Expand icon.
If you only know a partial part number, you can search by the first few
characters or enter nothing at all for a complete parts list.
CONFIDENTIAL
Step 2:
Click on the Expand Icon to open the Part Tree. You will see your selected part number.
Step 3:
Click Add Subnode to open the List of Potential Sub Parts page.
Step 5:
Select the check boxes under the Add column for the child parts youd like to associate and
click the Associate button.
CONFIDENTIAL
69
Step 4:
Enter a value in the Search Child Parts Field and click Search.
70
CONFIDENTIAL
Step 3:
Click the Create Fields button next to the field you decided upon in Step 2. This will open
an editor page. In this example, you will see the single-select menu editor page.
Step 4:
Enter a Field Name that will display on the Parts Administration page (Recipe 4.1).
Step 5:
Select the corresponding check box if this field will be required for all parts.
Step 6:
Determine if this custom field should be displayed in the Search Page, Search Results Page,
BOM Page or Detail page by selecting the corresponding check boxes.
Step 7:
Populate the menu with values and click Add to create your new Parts Defined Field.
CONFIDENTIAL
71
Step 8:
Click Deploy at the bottom of the page to make your Parts Defined Fields available for
use.
Under the Parts Defined Fields, you will see two sections that can be edited
at any time: Filter/Normal and Data Type. Filters will be discussed in Recipe
4.5. After you have made changes, you must click Update and then Deploy
to save.
72
CONFIDENTIAL
Step 2:
Click the Define Script button to open the BML editor. Refer to the BML section of the
cookbook for information on writing scripts.
Step 3:
Write your script based on your requirements.
Step 5:
Click Deploy from the Parts Defined page. This will save your changes. Now, when a
user is on the home page and elects to perform a Parts Search, only parts that the user or
user groups has access to will be available for Search.
73
Step 4:
Click the Check and Save button to make sure there are no mistakes in your script.
When price books are enabled for the site, then a Default Price Book is automatically made
available (it can be viewed in the Price Book Administration List page). The default price book
contains the price associations of a part with the price that is defined during part creation.
Step 4:
Enter a multiplier, if necessary. The multiplier will automatically populate the custom price
book with the price associations between parts and the specified multiple of the base price.
Step 5:
Set the Price Book to Active or Inactive. An Inactive price book cannot be used to
determine price for any user. An active price book sets the price for appropriate users.
74
CONFIDENTIAL
Step 6:
Enter the Partner Price Book Id, if applicable. See Recipe 4.9 for more details.
Step 7:
Under Extended Information, enter values for the custom price book fields, if necessary.
See Recipe 4.8 for more information on Price Book Fields.
Step 8:
Click Add.
POINTS TO REMEMBER
A maximum of 30 price books can be defined.
Changes take effect after the application is deployed.
The Default Price Book cannot be deleted.
CONFIDENTIAL
75
Parts are defined along with a price. Price Books offer an additional way to associate parts with
price. One part can be associated with multiple price books.
Step 3:
Click Add for a new part association or you can edit the price of parts that are already
associated with the price book.
Step 4:
Search and/or Select parts to be associated with your custom price book and click
Associate.
Step 5:
You will be returned to the Price Book Associations page. It displays the associated price of
the part within the selected price book and the base price of the part in parentheses. A part
can have as many associated prices as the supported currencies on your application. You can
modify associated prices and click Update.
Please note that a part can be associated with several price books.
76
CONFIDENTIAL
Price book filters, like the parts filters discussed in Recipe 4.5, can be used to control access rights
to price books. Managing filters involves classifying parts with certain values and then defining
permissions for each classifications. Managing price book fields and filters is similar to Parts. Please
see Recipes 4.4 and 4.5 for more information.
Any changes to custom price book fields will take affect after deployment.
The user will only be able to select a Price Book if they have been given access to it. This can be
achieved by creating filters. Please refer to Recipe 4.5 for more details.
CONFIDENTIAL
77
Parts Search
Navigate to Home Page > Parts Search > Price Book
EXPORT
When the Parts Master is BigMachines, the primary parts and price books database are maintained
on the BigMachines application. Parts and price book associations will have to exported into
a Partner system. Parts extended descriptions can also be exported from BigMachines into a
Partner system.
Export Methodology
Update the Partner parts database
If an attempt is made to export a part that has already been added to the Partner database at
an earlier export, then that part is updated at the latest export.
If a new part (a part that was created after the last export) is exported, then that part is
added to the Partner parts database.
Update the Partner parts database with Parts Extended Description
Parts Extended Description Fields can be mapped to custom fields in the partner system.
The Parts database must be synchronized before Extended Description export is performed.
Update the Partner price books with an export of the price books (SFDC only)
A price book in can be mapped to a price book in SFDC in a one-to-one relationship only.
If a part that has a base price but is not associated with a price book is exported from , then
that part will be associated with the Standard Price Book in SFDC.
Price Book Entries are exported only after the parts have been exported. If you choose to run a
Price Book Entries export without running a parts export, then they must manually make sure that
the parts databases are synchronized.
IMPORT
When the Parts Master is the Partner system, the primary parts and price books database are
maintained on the Partner system. Parts and price book associations will have to imported into the
BigMachines parts database, including parts extended descriptions.
Only the SuperUser is capable of invoking an Integration (Export/Import).
Parts Integration is not enabled for all sites. If you would want to integrate
your site with a partner, please contact the System Administrator with
SuperUser access rights.
78
CONFIDENTIAL
79
CONFIDENTIAL
80
CONFIDENTIAL
5
DATA TABLES
In This Chapter:
Limits
1,000,000+ rows
256 characters
16 characters
9 characters
CONFIDENTIAL
81
5.2: FOLDERS
Folders are used to organize data tables. All folders are located in a Folder List in the left-panel on
the Data Tables Admin page. When you click on a folder, it will be highlighted for you. In order to
open the folder and display its data tables, double-click on the folder name.
USING FILTERS FOR FOLDERS AND DATA TABLES
You can filter your data tables and folders by
using the Filter text box. Type in a letter that
could be contained in a data table name and the
filter will automatically hide folders that do not
contain a data table with your filter value. For
example, if you know a data table has the value
sam in its name, you can type sam into the
Fitler and only the folders and data tables with
names that contain sam will be visible. Click
the X to clear results.
82
CONFIDENTIAL
To Add a Folder
Navigation Path: Admin Home Page > Data Tables
Step 1:
From the Admin Toolbar, click Add and select Add Folder from the drop-down menu.
Step 2:
Enter the name for your New Folder and click OK.
DATA TABLES
Editing Folders
When you right-click on a folder, it will pull up a
menu of editing options:
Edit: This option allows you to edit the
Folder Name. It also displays time stamps
for Date Added and Date Modified.
Delete: This option will delete the folder.
Clear Data: This option will
CONFIDENTIAL
83
There are two different ways to add data tables to BigMachines: manual entry or through an
import. In this section, we will discuss how to manually add a table, its schema and its data.
To Add a Table
Navigation Path: Admin Home Page > Data Tables
Step 1:
From the Admin Toolbar, click Add and select Add Table from the drop-down menu.
Step 2:
Enter the Table Name and a Description of the table. You can also select which folder
it should be placed in from the Parent Folder drop-down menu. Data table names can only
contain alpha-numeric values and underscores. White space is not accepted.
Step 3:
Click OK. The new data table will now be displayed in the Folder List, under the Parent
Folder you selected.
You will notice that from the Data Table Admin page, the right panel will now display the title of the
table, but there isnt a way to add any information. Before you can add data, you will need to set
the schema of the table.
84
CONFIDENTIAL
Step 3:
Click the Add Column button to add a new data table column.
CONFIDENTIAL
85
DATA TABLES
Step 4:
Enter a Column Name and Description. Column names can only contain alpha-numeric
values and underscores. White space is not accepted.
Step 5:
Select the Data Type of the Column: String, Integer or Float.
Step 6:
Select the Unique check box if the data within these columns must be unique or distinct.
Step 7:
Click Add Column to save the column and return to the Data Table admin page.
Once you have set the schema for your data table, you can begin to add the data. First, youll need
to click on the Data tab located next to the Schema tab on the Data Table admin page.
Step 3:
Enter values for each column. You can either click into each field or you can use Tab to
move quickly through the fields.
86
CONFIDENTIAL
Step 4:
Repeat Steps 2-3 until your table is complete.
Step 5:
Click Save once you have populated your table.
To quickly populate tables, add multiple rows BEFORE entering data values.
The final step to manually adding a table is to make sure it is deployed. All tables that have been
added or modified and are NOT deployed, will be clearly marked in Red.
CONFIDENTIAL
87
DATA TABLES
The first step to deploying a table is to right-click on the data table name. This will display multiple
options for the table: Edit, Deploy, Export, Delete and Clear Data.
Step 6:
Save the file as a .CSV. Be aware that the name of your file will also be the name
of your data table when it is imported into BigMachines. If a table of the same
name already exists, the data will appended to the existing file. Data table names
can only contain alpha-numeric values and underscores. White space is not accepted.
Now that you have properly saved and named your .CSV file, you may begin the import to
BigMachines.
88
CONFIDENTIAL
Step 2:
Click Browse and search for your data table.
Step 3:
Select your Column Delimiter. The Default and most used will be Comma.
Step 4:
Select Newline as the Row Delimiter or enter a value and select the Other radio button.
DATA TABLES
Step 5:
Select MS Excel .csv format option next to Data with Delimiter.
CONFIDENTIAL
89
Step 6:
Select the Destination Folder where you would like to store the data table and click
Import.
You will now see that your Data Table, based on the File Name and the Destination Folder,
will be displayed in the Folder List in RED, as it has not been deployed.
Step 7:
DEPLOY the table by right clicking on the data table name and clicking Deploy.
EXPORTING DATA TABLES
You can make changes to a data table and then export them back to your work station.
90
CONFIDENTIAL
Your file or files will be zipped and sent to your desktop or laptop.
DATA TABLES
Step 2:
Check the status of each data table import or deployment.
CONFIDENTIAL
91
Step 3:
If available, click the Log link to check the error logs.
92
CONFIDENTIAL
Step 3:
Based on the search results, you will be taken to the data table you selected. All rows that
match your search values will be returned. You can click the red X to delete the row or
you can click into any field to make changes.
Step 4:
Make sure to click Save if you made any changes.
Step 5:
Click Clear Search Results to remove the filtered search result and display the entire table.
DATA TABLES
Step 1:
Select the radio button next to Search across tables.
CONFIDENTIAL
93
Step 2:
Under Tables, use the drop-down menu and check boxes to select multiple tables to
search. If you do not select any tables, it will search ALL tables.
Step 3:
Enter a Value to search for in the text field and click Search.
Step 4:
In the left-panel Folder List, the tables that have matching values will be displayed and they
will blink red. To the right of the table name, you will see the number of matches found
within the table.
94
CONFIDENTIAL
Step 5:
Double-click the name of the table with matches. All rows that match your search values will
be returned. You can click the red X to delete the row or you can click into any field to
make changes.
Step 6:
Click Save.
Step 7:
Repeat Step 5 - 6 for each data table.
Step 8:
Click Clear Search Results to remove the filtered search result and display the entire table.
DATA TABLES
CONFIDENTIAL
95
96
CONFIDENTIAL
6
INTERNATIONALIZATION
In This Chapter:
Languages
Languages and Commerce
Currencies
CONFIDENTIAL
97
6.1: LANGUAGES
6.1: LANGUAGES
As mentioned in the introduction, your application can support multiple languages, but your
application must have set a base language. Other supported languages can be added to the
language set of a site. The administrator with the same language preference as the base language
is responsible for providing translations for users that have different language preferences. If
translations are not available, then the data is displayed in the base language even for the non-base
language user.
Language
Language Code
English
en
German
de
French
fr
Spanish
sp
Italian
it
ar_SA
zh_CN
zh_TN
Czech
cs_CZ
Danish (Denmark)
da_DK
Dutch (Netherlands)
nl_NL
English (Australia)
en_AL
English (Canada)
en_CA
en_GB
Finnish
fi_FI
French (Canada)
fr_CA
Greek
el_GR
Hebrew (Israel)
hw_IL
Hindi (India)
hi_IN
Hungarian
hu_HU
Japanese
ja_JP
Korean
ko_KR
Polish
pl_PL
Portuguese (Brazil)
pt_BR
Russian
ru_RU
Slovak
sk_SK
Swedish
sv_SE
th_TH
CONFIDENTIAL
and parts extended description fields. Translations for these fields are available in all supported
languages, as long as an admin user with the same languages preference as the base language of the
application has provided these translations.
Only the user with the same language preference as the one that added the
part to the commerce list is able to add the part to the quote.
Translatable Fields in Commerce
Parts Description
Parts Extended Description 1
Parts Extended Description 2
Sample XML
This is the sub document. Assume that the quote was created in the English language and the
other languages supported in the site are French and German. Only relevant new tags and there
corresponding old tags are mentioned here
<document buyer_company_id=175 buyer_user_id=82 data_type=2
document_id=586 document_number=2 supplier_company_id=8175>
<!-- Normal part description tag. -->
<_part_desc>englishDescription</_part_desc>
<!--Part description itn tag. -->
<_part_desc_itn>
<fr>frenchDescription</fr>
<de>germanDescription</de>
</_part_desc_itn>
<_part_extended_desc_1_itn>
<fr>FrenchExtendedDescription1</fr>
<de>germanExtendedDescription1</de>
</_part_extended_desc_1_itn>
</document>
CONFIDENTIAL
99
INTERNATIONALIZATION
6.3: CURRENCIES
The system supports multiple currencies. An application must have a base currency that is defined
during set-up. Once a currency set is established, additional currencies can be added, but existing
currencies cannot be removed. User accounts and external company accounts can designate
a currency of their preference from the currency set supported by the application. The base
currency for all users is the default.
6.3: CURRENCIES
Base currencies will be used to calculate other currencies in the conversion rates area. For
pricing rules, or any time you are returning a price in a function, the conversion rates will run. For
example, if your base currency is USD ($), the system will assume you are returning currency
fields in USD and it will run the conversion rates for transactions and users with other preferred
currencies.
Exchange rate rules can be specified for currency conversion. Currency conversions happen in
real-time when a price does not exist in the users currency preference, but a base currency price
exists along with an exchange rate to the users currency preference.
Commerce transactions use the currency preference of the document originator, however the user
can change the currency once they are on the transaction. This is done through the main document
action Change Currency ( _change_currency) that is included with Quick Start. Remember that
you must add this action to the Layout (Chapter 14) in order to use it.
You can not change the currency of a transaction if line items are on the
quote.
Currency
Barbados
Barbados Dollar
Symbol
BBD
Canada
Canadian Dollar
CAD
Jamaica
Jamaican Dollar
JMD
Mexico
Mexican Peso
MXN
Guatemala
Quetzal
United States
100
Code
GTQ
CONFIDENTIAL
USD
South America
Country
Currency
Symbol
R$
Code
Brazil
Brazilian Real
Columbia
Columbian Peso
COP
BRL
Paraguay
Guarani
PYG
Peru
Newsol
PEN
Pacific
Country
Currency
Australia
Australian Dollar
Symbol
Code
AUD
Fiji
Fiji Dollar
FJD
French Polynesia
XPF
Kina
PGK
New Caledonia
New Zealand
Solomon Island
Country
Currency
XPF
NZ$
NZD
SBD
Asia
Symbol
Code
Thailand
Baht
THB
Brunei
Brunei Ringgit
BND
China
Hong Kong
HKD
India
Indian Rupee
INR
Indonesia
Indonesia Rupiah
Japan
Japanese Yen
JPY
Mayanmar
Kyat
MWK
Malaysia
Malaysian Ringgit
Nepal
Nepalese Rupee
NPR
LAKE
RMB
CNY
Rp
IDR
RM
MYR
Newkip
NewRiel
MLF
Mauritius
Mauritius Rupee
KRP
North Korea
KPW
Macau
Pataca
Phillipines
Phillipine Peso
MOP
P
PHP
Russia
Ruble
RUB
Maldives
Rufiyaa
MVR
Singapore
Singapore Dollar
South Korea
KRW
Sri Lanka
LKR
Taiwan
Taiwain Dollar
TWD
Bangladesh
Taka
BDT
CONFIDENTIAL
INTERNATIONALIZATION
Loas
Cambodia
SGD
101
Country
Currency
Symbol
Code
Kazakhstan
Tenege
KZT
Mongolia
Tugrik
MNT
6.3: CURRENCIES
Middle East
Country
Currency
Afghanistan
Afghani
Symbol
Code
AFA
Iraq
Iraqian Dinar
IQD
Jordan
Jordan Dinar
JOD
Kuwait
Kuwaiti Dinar
KWD
Lebanon
Lebanese Pound
LBP
Israel
New Shekel
ILS
OMR
Oman
Omani Rial
Pakistan
Pakistani Rupee
PKR
Qatar
Qatar Riyal
QAR
Iran
Rial
IRR
Saudi Arabia
Riyal
SAR
Kyrgyzstan
Som
KGS
Turkey
Turkish Lira
TRL
Africa
Country
Currency
Algeria
Algerian Dollar
Symbol
Code
DZD
Ethiopia
Birr
ETB
Gambia
Dalasi
GMD
Morocco
Dirham
NAD
Egypt
Egyptian Pound
EGP
Congo
Franc
CFAF
Kenya
Kenya Shilling
KES
Malawi
Kwacha
MWK
Liberia
Liberian Dollar
LRD
Libya
Libyan Dollar
LYD
Madagascar
Malagasy Francs
MGF
Mali
Mali Franc
MLF
Mozambique
Metical
MZM
Nigeria
Naira
NGN
Niger
Niger Franc
XOF
Rwanda
Rwanda Franc
RWF
Seychelles
Seychelles Rupee
SCR
Somalia
Somali Shilling
South Africa
102
SOS
CONFIDENTIAL
ZAR
Africa
Country
Currency
Symbol
Code
Sudan
Sudanese Dollar
SDP
Uganda
Ugandan Shilling
UGX
Zimbabwe
Zimbabwe Shilling
ZWD
Country
Currency
Czech Republic
Crown
CZK
Macedonia
Denar
MKD
Germany
DeutscheMark
Greece
Drachma
Greece
Portugal
Escudo
PTE
Europe
Symbol
Code
DM
DEM
European Union
Euro
Hungary
Forint
\u20AC
HUF
EUR
Belgium
Franc
BEF
France
Franc
FRF
Netherlands
Guilder
NLG
Iceland
Krona
ISK
Sweden
Krona
SEK
Denmark
Krone
DKK
Estonia
Kroon
EEK
Croatia
Kune
HRK
Latvia
Lat
LVL
Albania
Lek
ALL
Romania
Leu
ROL
Bulgaria
Leva
Italy
Lira
Lithuania
Lithuanian Litas
Luxembourg
Luxembourg Franc
LUF
Malta
Malta Lira
MTL
Finland
Markka
FIM
Norway
Norway Krone
NOK
Spain
Peseta
ESP
BGL
Lit
ITL
Ireland
Punt
IEP
Austria
Schilling
ATS
Slovakia
Slovakian Koruna
SKK
Switzerland
Swiss Franc
CHF
Slovenia
Tolar
SIT
United Kingdom
GBP
Yugoslavia
Yugoslavian Dinar
YUM
Poland
Zloty
PLZ
CONFIDENTIAL
INTERNATIONALIZATION
LTL
103
BigMachines Application
Configuration
Configuration involves defining and configuring Products and Catalogs. The section shows you how to
manage your configuration models, including the product hierarchy, attributes, rules and flows.
6.3: CURRENCIES
106
CONFIDENTIAL
Step 8:
Define the Group and Tab Layouts (Recipes 9.5 and 9.6)
Step 9:
Create your constraint, recommendations, hiding rules. (Chapter 10)
Step 10:
Create your recommended item, Pricing and BOM rules. (Chapter 10)
Step 11:
Re-deploy the home page to test your configuration (Recipe 7.2)
CONFIDENTIAL
107
7
PRODUCTS
In This Chapter:
Product Hierarchy
Navigating Products
Adding and Editing Product Families,
Product Lines and Models
Product Line and Model Attributes
Product Attribute Groups
Boats
Product Line
Product Line
RACING
OPEN BOW
Model
Model
RC5
RC10
RC50
YL10
YS10
YS50
CONFIDENTIAL
109
As previously mentioned, there are four tiers in the product hierarchy: All Product Families,
Product Family, Product Line and Model. You can define attributes, rules and flows at any level in
the hierarchy and these will be inherited by the products direct descendants.
TIER
DESCRIPTION
Product Family
Product Line
Model
Since anything defined at the Model level is not inherited anywhere, it is considered Best Practice
not to define anything at the Model level. This reduces the maintenance required to update
attributes, rules and flows in multiple places each time.
POINTS TO REMEMBER
Some experts think that the best way to go is to define only one Product Line
and one Model per Product Family and use Configurable Attributes to store
the Product Line and Model name instead.
You will want to define attributes at the highest level possible. The Product
Family level is the most common.
110
CONFIDENTIAL
From Configured Products, you will navigate to All Products Families. You can define attributes,
rules, and flows that you would like to apply to ALL product families at this level. To drill down to
the Product Family, select Product Families and click List. You will land on the Support Product
Families page. In general, this is the best place to maintain your products, configurable attributes,
rules and flows.
There is a link here to Open Quick Links. Quick Links is tool that allows
users to easily navigate to different places within Configuration. See Recipe
1.2 for more details.
PRODUCTS
CONFIDENTIAL
111
Step 3:
Enter the Name of the Product Family under Label.
Step 4:
Enter an acceptable Variable Name, which must be alpha-numeric. No spaces or special
characters are allowed.
Step 5:
Click Add.
112
CONFIDENTIAL
This will return you to the Product Family List page. In order to use your Product Family, it
will need to be deployed.
Step 6:
Click the Navigation menu for your Product Family.
Step 7:
Select Deployment Center and click List.
You should now be in the Deployment Center. You will need to decide if its necessary to
send out a confirmation email when the Product Family is deployed.
Step 8:
Select a radio button to Send an email or Do Not Send an email. If you need to send a
confirmation email, make sure to enter the email address under the Email To: section.
Step 9:
Click Deploy. You can schedule a time for the future in the text box next to the Deploy button.
Step 11:
From the Supported Products List, select Product Families and click List.
CONFIDENTIAL
113
PRODUCTS
Step 10:
Navigate back to Configured Products: Admin Home Page > Products > Configured
Products.
Step 12:
On the Supported Product Families list page, scroll to the bottom and click Add.
Step 13:
Select your product family(ies) from the menu and click Add.
You should now see your new Product Family in the Supported Product Families List.
Step 14:
You will need to navigate to: Admin Home Page > Styles and Templates > Home
Page to see your new Product Family on the Home Page.
Step 15:
Click the Refresh icon next to your product family.
Step 16:
Click on Deployment Center and follow Steps 8-9 to deploy your home page.
114
CONFIDENTIAL
In order to edit the Product Family Name or Delete a Product Family entirely, you will need to
navigate back to the Product Family Definition section.
To Edit a Product Family Name:
Click on the Product Family name and edit the Label.
To Delete a Product Family:
Select the Product Family or Families you wish to delete and click Delete.
PRODUCTS
CONFIDENTIAL
115
Step 5:
Click Add. To edit Product Lines, simply click on the Product Line name from the Product Line
Administration page. You will be able to edit the Name and Description only.
To Add a Model:
Step 1:
Select Models from the navigation menu of the Product Line to which you wish to add
Models, then click List.
116
CONFIDENTIAL
Step 2:
From the Model Administration Page, click Add.
Step 3:
Enter a Model Name,Variable Name and Description. There is also a button Edit
HTML which opens an HTML Editor where you can customize the description, add images,
hyperlinks and much more.
To edit Models, simply click on the Model name from the Model Administration page. You will
be able to edit the Name and Description only.
CONFIDENTIAL
117
PRODUCTS
Click the Save button the bottom of the page to Save your changes and close the Editor. Click
Close to close the Editor without saving changes
118
CONFIDENTIAL
8
CONFIGURABLE ATTRIBUTES
In This Chapter:
Overview
Adding Attributes
Attribute Editor Basics
Text Attribute Editor
Date Attribute Editor
HTML Attribute Editor
Menu Attribute Editor
Arrays and Sets
CONFIDENTIAL
119
Attribute Types
Description
Text
Float
Integer
HTML
Text Field
Date
Currency
Text Field
ATTRIBUTE TYPES:
Configurable attributes can be created as menus or text fields. Menus enable you to designate
specific values from which a buyer can select one or more items. Text fields are more openended, allowing the buyer to type in a value. Depending on the data type you have selected for
your configurable attribute, you will have your choice of three attribute types: Text Field, SingleSelect Menu and Multi-Select Menu. It is a combination of the data type and attribute type that
determines the Attribute Editor that will open. There are four different types of attribute editors
that will be covered in this chapter: Text (Recipe 8.4), Date (Recipe 8.5), HTML (Recipe 8.6) and
Menu (Recipe 8.7).
Configurable attributes can be defined as stand-alone attributes or they may be
defined as arrays. Array attributes help in grouping multiple, scalar attributes.
120
CONFIDENTIAL
Step 2:
Click Add on the Configurable Attributes Administration List page.
Step 3:
Enter the Name and Variable Name of your attribute.
Step 4:
To define the attribute as an array, check the Array Type box. See Recipe 8.8 for more details.
Step 6:
Select the Attribute Type of the attribute and click Add. Remember, menus are not
available to HTML and Date type attributes.
CONFIDENTIAL
121
CONFIGURABLE ATTRIBUTES
Step 5:
Select the appropriate Data Type of the attribute.
POINTS TO REMEMBER
If you need to create two or more attributes with the same name, the
following may help:
My Attribute and My Attribute will render the same on the
configuration UI even though they will appear as two distinct attributes
on the admin side. You can insert as many spaces as youd like in
between the words and labels and they will not be visible to the user.
For one word attributes, you can insert a non-breaking space copied
from a character map or entered via the keyboard shortcut ALT+0160.
Please note that typically, only number pad keys work for this shortcut
sequence.
122
CONFIDENTIAL
Clicking on the name of any rule will take you to that particular rules editor.
TEMPLATE PROPERTIES
The Template Properties tab allows you to decide which flows, tabs and groups the attribute will
belong to (if they have already been created). You can use the drop-down menus to select the Flow
Type (Configuration or Search), which Flow, which Tab will be shown in and which Group to add
it to. To complete the association to these selections, click the Associate button. Please refer to
Chapter 9 for more information on Flows, Tabs and Groups.
CONFIDENTIAL
123
CONFIGURABLE ATTRIBUTES
For all types of attributes, you can view and access the related rules and
flows. You can also edit the association of an attribute with the rule types
displayed or create new rules and associate the current attribute with them.
Main Information
This section displays the basic information for the attribute, like the name and description.
Label
Name
Variable Name
Data Type
Description
Contains the editable Name of the configurable attribute.
Displays the Variable Name upon creation. This cannot be changed.
Displays the Data Type selected upon creation. This cannot be changed.
Display Type
Use the drop-down menu to select one of two options: Text or Text Area. Text allows
up to 255 characters while Text Area allows for more than 255 characters in a field.
Array Type
Displays as NO if the attribute is not an array. For more information on arrays, please
refer to Recipe 8.8.
Display Order
Description
Displays where the attribute can be found on the Configurable Attribute list.
You can type directly into the text area or click Edit HTML to open an HTML editor.
The information in this section will be displayed when a user clicks the Help icon.
Properties
As the section name suggests, this area is where you set attribute properties, such as whether or
not the attribute should be required or hidden.
124
CONFIDENTIAL
Label
Description
Set Type
Required
Checking this option will require the user to enter a value for the attribute before
proceeding to a commerce transaction.
Hidden
Auto Update
Hide In Transaction
Checking this option will hide the attribute from the user. A hidden attribute can still
be used in rules and flows.
This option will refresh or update the configuration page when a value is selected
or changed, without the user invoking an action. It is triggered when you move the
cursor out of the attribute.
Checking this option will hide an attribute on a commerce document.
Status
When you click on this link, both a start date and end data selector tool and text field
appear. Use these to select the duration in which an attribute is allowed to maintain
the status chosen. If no duration is selected, then the attribute will remain on the
chosen status until an administrator changes it.
Float or Integer
Either of these data types gives you the ability to set a default value and then also validate a users
entry. For example, a user can validate that the entry is a positive number or that it falls within a
certain range.
CONFIDENTIAL
125
CONFIGURABLE ATTRIBUTES
Text
This data type provides a field for you to set a default value for the attribute.
As introduced in Recipe 8.1, the date attribute is displayed to the user as a text field with a date
selector tool. Date attributes can only be created with an attribute type of Text Field. Therefore, it
shares the same three tabs as the Text Attribute Editor discussed in Recipe 8.4: Main Information,
Properties and Default Data.
Default data
The Main Information and Properties section are the same as that of the Text Attribute Editor
discussed in Recipe 8.4. However, the default data section is slightly different. Once again, you have
the ability to select a default date from the data picker or you can select the Use Current Date
option. This section also provides a range check validation, so you can ensure that the date the
user selects falls within a particular range. For example, you can select the first and last day of the
month.
126
CONFIDENTIAL
Main Information
This section displays the basic information for the attribute, like the name and description.
Label
Name
Variable Name
Data Type
Description
Contains the editable Name of the configurable attribute.
Displays the Variable Name upon creation. This cannot be changed.
Displays the Data Type selected upon creation. This cannot be changed.
Display Type
Use the drop-down menu to select one of two options: Text or Text Area. Text allows
up to 255 characters while Text Area allows for more than 255 characters in a field.
Array Type
Displays as NO if the attribute is not an array. For more information on arrays, please
refer to Recipe 8.8.
Auto Resize
If an image is present for the attribute, it will auto-resize the image to fit the column
width.
Display Order
Description
Displays where the attribute can be found on the Configurable Attribute list.
You can type directly into the text area or click Edit HTML to open an HTML editor.
The information in this section will be displayed when a user clicks the Help icon.
CONFIDENTIAL
127
CONFIGURABLE ATTRIBUTES
Properties
There are less options available for HTML attributes. For example, all HTML attributes are of
Forced Set Set Type. You still have the options for Hidden and Status.
When creating attributes of data type Text, Float or Integer, you have the option of selecting an
attribute type of single-select or multi-select menu. There are many different options available
when setting up a menu-type attribute.
You should recognize the image above is similar to the image from Recipe 8.2 where you are shown
how to create a new configurable attribute. There is one significant difference between the two
images. When you create a menu-type attribute, an option for Attribute Value Pricing becomes
available.
Highlights:
AVP is available for multi-select
and single-select attributes and
also array type single-select menu
attributes.
Static prices affect the final price of
a product and are carried over as
component prices to commerce.
On the user side, the static prices
can be displayed in the pricing
section along with other pricing
rules.
128
CONFIDENTIAL
From this first page of the attribute editor, you also have the option to populate the menu with
values as well as prices if you choose to use Attribute Value Pricing.
To Populate a Menu:
Step 1:
In the Displayed Text field, enter the name of the menu selection the way youd like the user
to see it.
Step 2:
Enter a unique Variable Name.
Step 3:
If you have chosen Static Pricing from the AVP option, you may enter a Price for the item.
Step 4:
Click the Add Entry button. (To delete a value, select it and click Delete).
Step 5:
If you would like to set a default value, highlight/select the value in the menu and click Set. To
clear the value, click Clear.
CONFIGURABLE ATTRIBUTES
Step 6:
Click on Entry Manager to do one of the following:
* Re-order the list of menu values
* Change the Displayed Text labels
* Edit the Prices
* Add images to each attribute.
CONFIDENTIAL
129
Like the previous three editors, on the Menu Attribute Editor page, you will see three tabs:
General, Related Rules and Template Properties. Under the General Tab, you will see three, four or
five tabs, depending on whether or not you have selected Attribute Value Pricing and/or if you have
selected this attribute to be displayed as an Image Menu. If you have NOT chosen this option, you
will see Main Information, Properties and Menu Population. If you have chosen Static Pricing, you
will see a new section called Attribute Value Pricing Properties. If you have selected Image
Menus, then you will see a section called Image Menu Properties.
Main Information
In this section, you have the
option to change the name
of the attribute, though its
not recommended unless
absolutely necessary. Also
notice the variable name and
data type of the attribute.
These cannot be edited
after they are created. Like
the other editors, youll also
see Array Type and Display
order, which also cannot be
edited.
There are three options that can be edited, besides the description: Image Menu, Display Type and
Attribute Value Pricing.
Image Menu
This option allows you to display menu values as images instead of text. The end users can choose
a menu value by clicking on the image. Image Menus are available for both array and non-array type
single-select and multi-select menus. The images used are the ones that you uploaded into the
Entry Manager upon menu population. There are two different ways to display an Image Menu: As a
Grid or as a Drop-Down Menu.
Drop-Down Image Menu
130
CONFIDENTIAL
Display Type
The Display Type of the menu changes based on whether or not you have selected Image Menu,
Single-Select Menu or a Multi-Select Menu. The Image Menu display options are shown on the
previous page.
Single-Select Menu Display Types
There are three different options if the attribute is a single-select menu: Single-Select Menu, Radio
Button Vertical and Radio Button Horizontal.
Radio Button Horizontal and Single-Select Menu
Multi-Select Menu
131
CONFIGURABLE ATTRIBUTES
to have static pricing included for your attribute, you can click the None radio button.
If you click None after already associating prices with menu values,THEY
WILL BE LOST. So, if you decide at a later time that you would like to show
the prices, you will have to add them again in the Entry Manager.
Properties
The properties section is like that of the Text Attribute Editor (Recipe 8.4), except it has one
addition option: Constrained Values Display.
Should you create a Constraint Rule for a menu attribute, you can determine how you would like
the constraint to be displayed: Marked, Removed or Normal.
Marked: This option will show the constrained item with an asterick and/or it will be grayed
out of the menu.
Removed: If a value is constrained, it will be removed as a menu option. In the example
below, the image on the left shows all of the vehicle colors for a mid-sized SUV. The image on
the right shows a constrain rule for a particular model and removes menu values (in this case
colors) that are not available for that model.
132
CONFIDENTIAL
Normal: The constraint will not mark or remove the menu value, it will still be displayed,
but the user will not be able to select it without encountering an error message. This is not
reccommended.
Menu Population
For details on how to populate or edit a menu, please see To Populate A Menu at the beginning
of this recipe.
Attribute Value Pricing Properties
This section will become available if you have selected Static Pricing from the attribute value pricing options
in the Main Information section.
There are three options for you to customize how static prices are displayed to the user.
Label
Pricing Display Option
Description
Select from the drop-down menu: None or Show Prices Next to Attribute
Values. Choose the latter if you would like to display the prices to the user.
Decide if you would like to display the price to the user. It would be located at
the bottom of the page under Price.
Check this box if you would like the AVP to be included in the total price of the
configured product. It is best practice to check Display Price at Bottom to User
if you are going to include the AVP in the total price.
CONFIDENTIAL
133
CONFIGURABLE ATTRIBUTES
If you have opted to display your menu values as images, there are quite a few properties that you
can manipulate in order to customize your menu. There are 5 options available for customization:
Label and Price location, Columns, Rows, Fix Dimension and Image Size.
Label
Label and Price Location
Description
Determine where you would like to display the label and price (if AVP is being
used) of each menu value. Use the drop-down menu to select either Above
Image, Below Image or Hovering over the image.
Fix Dimension
You can select the Image Size Type based on height or width and the images will
be auto-scaled to preserve the proportions of the image to fit the layout
Image Size
134
CONFIDENTIAL
Label
Description
Columns/Rows
You can determine how many rows and columns you'd like to display the images
in. If you select 0 rows, the number of rows will be auto-populated based on
the number of columns you have selected. For example, if you have 12 menu
items and you'd like to display them in rows of 3, you would need to enter 3 for
Columns. Now, if you wanted to make sure that instead of displaying all 4 rows,
that only the first 2 rows appear, make sure to enter 2 rows. The image menu
will then display a scroll bar so you can see the rest of the rows
POINTS TO REMEMBER
135
CONFIGURABLE ATTRIBUTES
What is a Set?
Array attributes should always be associated with a set. They are placed in Sets for easier and more
intuitive creation of configuration flows. See the example below where six different array attributes
are separated into different array sets.
Door Trim
Warranty Start Date
Door Style
Warranty End Date
Door Color
Annual Fee
Door Trim
Door Style
Door Color
BigMachines Best Practice is to first create the array control attribute, then
create the array sets and finally, your array attributes, which you can then
add to the array sets.
136
CONFIDENTIAL
While creating array control attribute and array attributes, make sure that
they are ordered such that the control attribute has a lower order number
than the array attribute(s) it drives.
In order to designate an attribute as an array attribute, you will need to check the box Array
Type upon creation.
In this example, when the Date Attribute Editor opens, the option Array Type will now show Yes.
CONFIDENTIAL
137
CONFIGURABLE ATTRIBUTES
Array Attributes
Array attributes are created the same way a regular configurable attribute is created. They can be
of text, float, integer or date data types and of text, and single-select attribute types. The editors
are the same as those founds in Recipe 8.4, 8.5, and 8.7. Array attributes have one additional tab
called Set Properties. This tab allows you to add your attribute to a particular set and make any
necessary edits to the Set Properties discussed on the previous page.
Step 2:
Click Add on the Configurable Array Sets Admin List page.
Step 3:
Enter a unique Name, Variable Name and Description for they array set.
Step 4:
Use the drop-down menu to select the Array Control Attribute you would like to use as
the Set Size Attribute.
Step 5:
Use the drop-down menu to determine if youd like to display the array set horizontally,
vertically or if youd like it to be tabbed. (User-Side images will be found at the end of this
recipe).
Step 6:
Select the label options from the drop-down menu (see next page for examples):
Step 7:
If required, add a Prefix and Suffix to the Set. This will enable you to crate a group label for
each iteration of the array attributes within a set.
Step 8:
Click Update to save the new array set.
138
CONFIDENTIAL
The final example shows the same array attributes and set, but displayed in tabs:
CONFIGURABLE ATTRIBUTES
CONFIDENTIAL
139
POINTS TO REMEMBER
In the Set Association Information section, a list of the associated
attributes is displayed. These are NOT editable. To add additional array
attributes to the set, use the Array Attribute Editor page.
Configuration data in commerce is stored as a tilde delimited string. The
array values within this string are delimited by $,$
You can associate array attributes to only those sets that have been
created at the same level.
You can modify association of sets after the initial creation of the
attribute.
You can create multiple sets at the same level and associate them to a
single set size attribute.
The Set Size Attribute fields (in the Set Properties Tab, or the
Configurable Array Set Editor page) displays only those integer
attributes that have been marked as Array Control Attributes and have a
range validation from 1 to 50.
Multi-select menus are not possible in arrays.
Single-select attributes cannot be displayed as radio buttons for use in
sets.
Once an attribute is defined as an array type, it cannot be changed.
Refer to Chapter 26 for information about using BML with arrays.
140
CONFIDENTIAL
CONFIGURABLE ATTRIBUTES
141
CONFIDENTIAL
142
CONFIDENTIAL
9
CONFIGURATION FLOWS AND LAYOUT
Flows are special rules that help guide buyers through
the multi-step search and configuration process.
In This Chapter:
CONFIDENTIAL
143
144
CONFIDENTIAL
CONFIDENTIAL
145
POINTS TO REMEMBER
All attributes are considered to be in the default flow.
For a forced end flow type, all attributes are considered to be in the flow.
If due to set-up error, the condition attributes appear in the forward flows (new
flows), the rule is marked as invalid.
The flow type must be Primary Start and End Node for multiple flow cases in
SOAP API. This is because multiple flow functionality is not supported in this
case.
USE CASE
In order for users to configure pizzas, you must create a configuration flow. In this
example, you will just create the initial flow, which then can be customized to your needs.
146
CONFIDENTIAL
Step 1:
From the Supported Families Page, navigate to your Products > Configurable Products >
Product Family > Configuration Flows
Step 2:
Enter the Name,Variable Name and Description of your rule.
Step 3:
Select the Status of the rule:
Active: The rule must fire if the condition is satisfied.
Inactive: The rule does not fire, even if the condition evaluates to true.
Internal: Only fires if theFullAccessUser is the user and the condition is satisfied.
Step 4:
Select the End/Start Date (if necessary) and the Start and End Wizard Node Type.
Step 5:
Select the Processing Event:
Action: The condition for the flow is evaluated when an action occurs (the user
clicks a button) on the Model
Value Change: The condition for the flow is evaluated when the users change a
value for a configurable attribute.
Tab Change: The condition for the flow is evaluated when the users move from
one tab to another on the Model Configuration page.
CONFIDENTIAL
147
Step 6:
Select the Condition Attributes (if any) to be used in your flow. These are used to
determine if the configuration flow will be executed based on a conditional statement.
These can be: Account, Configurable, Configurable Array Sets, Regular and User Attributes.
Step 7:
Select the Flow Attributes:
Current Display: These are the attributes and/or array sets that are affected
when the flow rule fires. Regular, Configurable, Account and User attributes are
available for selection.
Affected Attributes: These are used to recommend configurable attribute values
that are not in the current flow.
Next Display Attributes: Used to specify the attributes that should appear in
the next flow. For example, say the user is currently on Flow A and meets the condition
for Flow B. The current display attributes of Flow B is the same as the next display
attributes of Flow A.
Affected Attributes and Next Display attributes are rarely used in
implementations. You do not need to select any attributes into these
categories for this example.
Step 8:
Click Update and Back to save your rule and return to the Configuration Flow List page.
Choosing Current Display Attributes is mandatory. You can opt not to choose
the other attributes. Also, an Array Set icon next to Configurable Array Sets
will display all attributes associated With the Set when you mouse over it.
148
CONFIDENTIAL
TABS
Step 1:
From the Configuration Flow List page, click List under the Tabs heading for your select
flow. This will open the Tabs List page.
Step 2:
Click Add to launch the Tab Wizard.
CONFIDENTIAL
149
Step 3:
Select the Current Display Attributes that you want to display on the Tab. Once
selected, the Tab Editor will open.
Step 4:
Enter a Name to appear on the Tab, its Variable Name, Description and Status.
Show Start/End Dates if necessary.
Step 5:
Click Add. You will return to the Tabs List page, where you can create more tabs.
GROUP
150
CONFIDENTIAL
Step 2:
In the second section, click on the Groups Tab.
Step 4:
Select the Current Display Attributes youd like to place in the group.
CONFIDENTIAL
151
Step 3:
All attributes are automatically placed into a default group, but in order to add them to
different groups, click on Add.
Step 5:
Click the Group Editor button. This will take you to the Configuration Group Editor
page.
Step 6:
Enter a Name,Variable Name and Description and click Add to create the Group.
Now, when you return to the Current Display tab on the Tab Editor, you will see that your
attributes are in two different attribute groups. You can use the drop-down menus to change them
from group to group or click Reselect to create new groups.
152
CONFIDENTIAL
Step 4:
Use the Layout Preferences section Add Spacers to the layout.
CONFIDENTIAL
153
Step 3:
In the Tab Display Details section you can:
Choose the stylesheet from the drop-down menu to apply to the tab. You can
edit the stylesheet branding for this tab page by selecting an existing stylesheet
or clicking edit to edit the current stylesheet or add a new one. Stylesheets are
global to the product family, and multiple tab pages can use the same stylesheet
instance. See Recipe 9.8 for more details.
Specify the Page Title. This displays to the user at the top of the page.
Specify the Help Text below the Page Title.
Specify the Help Text at the bottom of the tab.
Select a background image for the tab, click Browse.
Step 5:
In the Columns section, you can select the placement of your attribute groups.
Step 6:
In the Group Settings section, you can select an attribute group from the drop-down
menu and click Group Layout to define the Group Layout. See Recipe 9.6 for more
information.
Step 7:
Click Apply to save. Click Update to save changes and return to the Tabs List.
Step 8:
Click Preview Layout to get a general idea of what the configuration tab will look like.
154
CONFIDENTIAL
Step 3:
In the Template Properties section you can:
Select a Title Icon to display above the Group.
Select the check box to display the Group Title.
Select the check box to show the Title Icon.
Select the check box to Link to the Group Description.
CONFIDENTIAL
155
Step 4:
Choose the Label Width,Value Width and Spacers to customize these columns. Label and
Value width can be set in pixels or as a percentage that cannot exceed 100%.
Step 5:
Use the arrows to move attributes and spacers between columns.
Step 6:
Click Apply to save. Click Update to save changes and return to the Tab Layout page.
Step 7:
Click Preview Layout to get a general idea of what the configuration tab will look like.
156
CONFIDENTIAL
There are two additional tabs in the Group Layout Editor where you can go to edit information:
Attribute Properties and Template Includes.
Attribute Properties Tab
On this page, you can toggle the different display settings for each attribute in this group, and in
some cases can override the properties that were defined when the attribute was created.
This tab allows you to make changes to attributes, if necessary. On this tab you can edit:
Display Type
Set Type
Auto Lock/Hide Lock
Default Values
Auto-Update
Hide
The values in parenthesis (), is the value that was defined when the attribute
was created. By default, the template will choose these values. You can
choose to override these by checking the Override boxes and selecting a new
value.
CONFIDENTIAL
157
You have access to this page from both the Tab Layout Editor and Group Layout Editor pages. It is
displayed as the action button Define Advanced Template on the bottom of each of these pages.
An HTML Editor is provided to define and customize the group/tab layout. See Using the HTML
Template Editor for more details. You can also view the Attribute properties that will be displayed
under the Attributes tab.
158
CONFIDENTIAL
CONFIDENTIAL
159
160
CONFIDENTIAL
10
CONFIGURATION RULES
In This Chapter:
Overview of Rules
General Rule Elements
Condition Attributes
BOM Rules
Pricing Rules
Hiding Rules
Recommendation Rules
Constraint Rules
Recommended Item Rules
Arrays and Rules
Table-Based Rules
CONFIDENTIAL
161
Description
Example
Pricing
Hiding
Recommendations
Constraints
Recommended Items
162
CONFIDENTIAL
Label
Name
Variable Name
Description
Apply Rule To:
Enter the name of your rule in this section. This is a required field.
Enter a variable name, but remember this cannot be changed. This is a required
field.
Enter a description, if desired.
Decide if this should run in Configuration, Selection or Both.
Determine the status of the rule.
Upon checking this box, both a start date and end date selector tool and text
field appear. Use these to select the duration in which the rule is allowed to
maintain the status chosen. If no duration is selected, then the attribute will
remain on the chosen status until an administrator changes it.
CONFIDENTIAL
163
CONFIGURATION RULES
Status
Description
Condition
The condition section allows you to select the logic that specifies when the rule should run. There
are two options: Always True and Define Logic.
Always True: The rule will fire automatically, every time because a specific condition does
not need to be met.
Define Logic: If a rule must fire only under certain conditions, it is defined here. The rule
fires only when the condition is met, that is, the condition statement returns true boolean.
Refer to Recipe 10.3 for more information on conditions.
Action
The action section is where you select WHAT happens if the condition is met.
Rule Type
Bill of Materials (BOM)
Action Description
No action attributes are defined. The action will be the BOM string that is
returned to the ERP.
Pricing
No action Attributes are defined. The action will be the price that is returned.
Hiding
Recommendation
Constraints
Recommended Items
164
CONFIDENTIAL
You will be able to access this section any time you select Define Function within a rule condition.
Step 1:
Click the icon Add Row.
Step 2:
Use the drop-down menu under Attribute to select your first condition attribute.
Step 3:
Select the appropriate Operator.
Step 4:
Use the drop-down menu to select the Attribute Value(s) for the condition.
You can choose the order in which the statements are evaluated by using the Row Grouping
section. The default evaluation happens from left to right. You can explicitly specify the order of
operations with the help of parenthesis. For example, the condition 1 AND 2 OR 3 is evaluated by
default as (1 AND 2) OR 3. You can change the order of operations by typing in the Row Grouping
section - 1 AND (2 OR 3).
CONFIDENTIAL
165
CONFIGURATION RULES
Entry Row
Result
1 AND 2 AND 3
How To Get It
1 OR 2 OR 3
1 AND 2 OR 3
1 AND (2 OR 3)
You can view the order of operations in the Row Grouping section (by entry row) or in the
Condition Summary.
166
CONFIDENTIAL
Advanced Conditions
The advanced function is meant for complex condition logic. You build the logic using BML in
the function editor. You can access this by clicking the View/Edit BML the Generated BML
Function button.
CONFIDENTIAL
167
CONFIGURATION RULES
What you see in the BML Editor is what you have just written using Simple Conditions and Row
Grouping. From here, you can build a more complex function to set your condition. Refer to the
BML section of the cookbook for more information.
When the system triggers multiple advanced BOMs, which are created as strings, all of the strings
appear concatenated in the order they were generated.
A BOM rule has a condition and an action. The action here is to display a list showing the parts
description and their quantities. This list is shown in a separate tab in the pipeline viewer or in the
commerce document.
SIMPLE USE CASE
You own a pizza company and you would like to make sure that when a MEDIUM,
DEEP-DISH, PEPPERONI pizza is created, that the part numbers for dough(DD001),
sauce(MS001) and seasonings(IS001) are returned in a BOM string. This use case assumes
these parts have already been created.
Step 1:
Using your Configuration Quick Links, navigate to your Product Family > List of Bill of
Material Rules.
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Since this rule should run ONLY when a user selects a Medium
Deep Dish pizza with Pepperoni, then those conditions must be met when placing the
order.
Step 5:
Because you know the part numbers that would like to add: MS001, DD001 and IS001, we
will select Simple Bill of Materials.
168
CONFIDENTIAL
Step 6:
Add the part numbers the quantity of each.
Step 7:
Verify the rule is running by checking the Pipeline Viewer in Configuration. In order
to verify, you will need to select Size = Medium, Crust Type - Deep Dish and Toppings =
Pepperoni. The following will be displayed in the Viewer.
Pricing rules are used to calculate price based on how a product is configured. Pricing rules can
be based on a combination of one or more configured values. Like all rules, a pricing rule also has a
condition and an action. The action determines the price of the model being configured.
Displaying the price to the user is optional, but it is by default displayed to the user. If the price
should be shown to the user in only certain circumstances, that can be determined by an Advanced
Function. Including the price in the total configured price is also optional. The default value is true,
which indicates to the system that the price should be included in the total configured price. An
advanced function can modify the default value if necessary.
During reconfiguration, pricing rules are always evaluated, regardless of whether the condition
attributes are in any configuration flow.
CONFIDENTIAL
169
CONFIGURATION RULES
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of Pricing Rules.
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Remember, this rule should run ONLY when a user selects the
Soup of the Day.
Step 5:
Define the Price of the Action. This is how the price will interact with the total
configured price.
170
CONFIDENTIAL
Step 6:
Enter a User Message. This will be displayed with the price.
Step 7:
Define the Behavior or the Action. Decide on the following options:
Do you want the price be included in the total price?
Do you want to you display the price to the user?
Do you want to hide zero values from the user? If no, then even a value of $0 will
be displayed.
CONFIDENTIAL
171
CONFIGURATION RULES
So, when the user decides to place an order and they select Soup of the Day, the price will be
included at the bottom with the rest of the items.
You will also need to create a user message that explains to the user exactly what they are
ordering.
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of Pricing Rules.
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Remember, this rule can run all of the time, so it should be set
to Always True.
Step 5:
Define the Price of the Action. Since you are creating a rule for multiple items, you will
need to create an Advanced Function by clicking Define BML Function.
Step 6:
In your function editor, first select the Attributes you will be using by clicking the Add
Attributes button.
172
CONFIDENTIAL
Step 7:
Since the pricing rule is based on the Size and Crust Type of the pizza, select these as the
attributes you will be using.
Step 8:
Begin to write the pricing rule in BML. You will need to first assign a variable to zero. Try
price = 0; See the chapter on Conditionals in the BML section.
CONFIGURATION RULES
CONFIDENTIAL
173
Step 9:
Set up the User Message that the buyer will see when they see the Price. Click the
Define BML Function button.
Step 10:
Select the necessary attributes. They should be the same that are found in Step 7.
Step 11:
Create an empty string variable to hold your user message string.
Step 12:
Write the user message to be returned.
So, when the user decides to place an order and they configure a pizza, they will see the pricing and
user message that you created in this pricing rule.
In the getPrice() SOAP call, the Hide Zero Price behavior is replicated by using the
attribute bm:hideZeroPrice.
174
CONFIDENTIAL
When the buyer is configuring the order, and they select Soup of the Day, they will no longer see
the option for Dipping Sauces.
CONFIDENTIAL
175
CONFIGURATION RULES
Step 5:
Define the Action. Since you would like to hide dipping sauces, click on the Add
Attributes button and select Dipping Sauces from the drop-down menu.
A hiding rule can have one associated recommendation rule (These rules are covered in Recipe
10.7). When users configure a model, they could end up with an internal constraint error. An
internal constraint error occurs when there are constraints on hidden attributes. Since the
attributes are hidden, the attribute values cannot be modified by the user. Constraints will be
covered in Recipe 10.8.
To avoid these situations, you can write recommendation rules that can modify the values of
hidden attributes. What happens then is that if a constraint is running on a hidden attribute, the
recommendation rule can override it by providing a set value for the attribute.
Sample Scenario
Refer to the hiding rule created on the previous page. You wrote a hiding rule that hides the
Dipping Sauce attribute when a user selected none OR Soup of the Day as side items. Now,
lets say that you wrote a constraint rule that says the Dipping Sauces attribute could not have a
value of none at any time. Referring to the information above, a constraint written on a hiding
attribute will throw an Internal Constraint Error:
Step 1:
Click Add Associated Recommendation Rule from the right panel of the Action
section of a Hiding Rule.
Step 2:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
176
CONFIDENTIAL
Step 3:
Create your Conditions. Remember, you want this rule to run ONLY when someone
selects None or Soup of the Day from the Other Items Menu.
Step 5:
Define the Action. Since this action will run on the dipping Sauce Attribute, click on the
Add Attributes button and select Dipping Sauces from the drop-down menu.
Step 6:
Under the Values To Set section, select Marinara, since this is the Dipping Sauce we want
to set.
Step 7:
Select the Set Type. In this case, you want it to always return this value, so select Force
Set.
Now, when a user selects Soup of the Day or None from the Other Items menu, even though
Dipping Sauces is a hidden attribute with a constraint that says none is not a valid entry for the
attribute, a recommendation rule runs that sets the value as Marinara so that the user can continue
to configure their product.
CONFIDENTIAL
177
CONFIGURATION RULES
Step 8:
Click Update and Back to save and return to the Hiding Attribute Rule where you
will see a link to the associated rule in blue.
The user can always check the line item detail in Commerce in order to view the dipping sauce.
Example:
There can only be ONE associated recommendation rule per hiding rule. This
rule will not be updated when you update the hiding rule; it must be done
separately.
178
CONFIDENTIAL
Take a look at the image below where a recommendation rule is running that makes the Topping
Category read-only.
Recommendation rules use set-types, that when enabled, can auto-populate the recommended
values in the attribute fields.
Set Type
Description
None
The selected value for the action attribute in the rule will be the recommended
value for the attribute. It will show as a message and it can be modified by the user.
Set
Forced Set
The rule will set the attribute value to the value chosen in the rule. This value is
read-only and cannot be modified by the user.
A recommendation rule has a condition and an action. The action is recommending or setting a
value to an attribute based on the attributes set type. When creating a recommendation, you can
set the action in two different ways, Standard and Table-Based, both of which will be explained in
this recipe.
In Recipe 10.6, we wrote a recommendation rule and associated it to a hiding rule. In this first use
case, well write a rule, but will not associate it to a hiding rule, so we can see it in action.
CONFIDENTIAL
179
CONFIGURATION RULES
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of
Recommendation Rules.
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Remember, this rule only runs when a user selects the Works
pizza.
Step 5:
Select the attribute whose value you want to set by clicking the Add Attributes button
and selecting the configurable attribute from the menu.
Step 6:
In the Values to Set section, select the toppings: sausage, green pepper, onion and
mushroom.
Step 7:
Since this attribute is going to be read-only, select Forced Set from the Set Type dropdown.
Step 8:
Click Update and Back to Save the rule.
The Works recommendation rule was created using a standard action type, but a similar rule can
also be written using information from a data table.
180
CONFIDENTIAL
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of
Recommendation Rules
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Leave the conditions as Always True as you will set the conditions below.
Step 6:
Select Table-Based as your Action Type. This will open a field of four tabs.
CONFIDENTIAL
181
CONFIGURATION RULES
Step 5:
In the Action Attribute section, select whether you would like this rule to run during
Configuration, Selection or Both. In this case, we will use Configuration.
Step 7:
In the first tab, Select Table, select the Data Table from which you would like to retrieve
information from the drop-down menu.
Step 8:
Click the Specify Conditions tab and enter ConfigAttribute as the condition type, and
set the Table Column Pizza_Type = (configurable attribute)Specialty.
Condition Type: This can be Static of ConfigAttribute
Static: You define a static value under the Value header.
ConfigAttribute: You select a configurable attribute to map the Table
Column to in a drop-down menu that appears under the Value header.
Step 9:
Enter the Order of Operations in the Row Grouping section. Please note: if you only
have one condition, you will still need to enter the value of 1 in this text field.
Step 10:
Click the Choose Return tab and select the Action Attribute from the drop-down
menu, Value to Set (Table Column), Set Type(None, Set or Forced Set) and Message
Type(Static or from a Table Column).
182
CONFIDENTIAL
Step 11:
Add additional rows if need be and Repeat Step 9.
Step 12:
Click the Debugger tab. In the Input Section, select the Table Column and Value youd
like to test and then click Run.
What is returned as an Output is the information from the table that will be returned
when a user selects Meat Lovers as the Speciality pizza type.
The images below represent what will be seen on the user-side:
If the attribute type is Integer or Float, multiple recommendations cannot be set using an advanced
function. Only one recommended value can be set using the advanced function. See Recipe 10.10
for an example.
Multiple Rules Firing Simultaneously on an Action Attribute
When there are multiple recommendations firing simultaneously for the same action attribute, then
the rules are first sorted according to the following criteria (in sequence):
Descending order by product hierarchy (model-level first and all-equipment level last)
Descending order by number of rule inputs (rules with single inputs are last)
Ascending order by the order number.
CONFIDENTIAL
183
CONFIGURATION RULES
Advanced Actions
If the attribute type is Text Field (array or non-array), whether the display type is text or
menu type, the function returns a |^| (pipe caret pipe) delimited string of all the
recommended values for the action attribute. The action takes place if the condition evaluates to
true and if the users enter any of the recommended values specified for the action attribute.
Constraint rules are set up to warn the buyer when certain attribute values are not allowed in
a configuration. While a constraint is active, the system doesnt allow the user to advance to
commerce. The rule becomes inactive when the user re-selects values that are allowed. Users can
see multiple constraints when several apply to a given configuration.
A constraint rule has a condition and an action. When the condition and action are both true,
then a constraint is fired, which shows up as a message to the user. There are two different ways
to set-up a constraint rule action: Standard and Table-Based. When a constraint rule is triggered,
it appears to buyers on the Model Configuration page. Take a look at the image below where a
constraint rule is running on the crust type when a user selects a small pizza. In this case, the
constrained value, Deep Dish, has a marked display and the user will be unable to select this option.
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of Constraint Rules
> Click Add
Step 2:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 3:
Create your Conditions. This rule should run only when a user selects a Small pizza.
Step 4:
In the Action Attribute section, select whether you would like this rule to run during
Configuration, Selection or Both.
184
CONFIDENTIAL
Step 5:
Select Standard as your Action Type and click Add Attribute. Define the Action
Attribute you would like to constrain, in this case: Crust Type.
Step 6:
Select the values of the attribute that you wish to constrain or allow. Select Deep Dish
from the drop down menu.
Advanced Actions
See Advanced Actions in Recipe 10.7 for more details.
185
CONFIGURATION RULES
Users will see multiple sets of recommended items if several rules apply to a given configuration.
When the same part or model is in two triggered rules, the product name appears once and the
item quantity reflects the total number of recommended values.
A Recommended Item rule also has a condition and an action. The action here is to show the
recommended items models and/or parts selected. There is a site option to allow the display of the
price of the recommended items on the model configuration page. Also, the comment for the rule
can be a simple comment or can be specified through an advanced rule.
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of Recommended
Item Rules.
Step 2:
Click Add to create a new rule.
186
CONFIDENTIAL
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Remember, you only want to add Marinara when a user selects
Mozzarella Sticks.
Step 5:
Enter the Comments that you would like to display with your Recommended Item.
Step 6:
Determine if this is a Simple or Advanced rule. Since you are looking to associate just
one part, Simple is the best choice.
Step 7:
Add the part or model and the quantity of each that you would like to recommend
when the condition is met. In this case, it is a part. Click Add.
CONFIDENTIAL
187
CONFIGURATION RULES
Step 8:
Click Update and Back to save the rule and return to the Recommended Items list
page.
Now, on the user-side, when someone selects Mozzarella Sticks, the system will automatically
recommend that marinara sauce be added to the order.
When you are defining an advanced recommended item rule, you will need to write a BML script.
There are many use cases where you can use a data table and populate a return string with items
from the data table. The next use case is an example of that.
188
CONFIDENTIAL
Step 6:
Select Advanced rule, since you are going to write a rule using BML.
Step 7:
Make sure to always select With Advanced Price and Comments.
Step 8:
Click on the Edit Function button. A BML Editor will open.
CONFIDENTIAL
189
CONFIGURATION RULES
Step 5:
Enter the Comments that you would like to display with your Recommended Item.
Step 9:
Write a BML rule using BMQL and your data table. Please dont forget to comment
your code! More information on BMQL can be found in Chapter 27.
Step 10:
Click Save and Close to return to the Recommended Item Rule page.
Step 11:
Click Update and Back to save the rule and return to the Recommended Items List
page.
Now, on the user-side, when someone selects Hot Sandwiches, only hot sandwich types found in
the table will display as Recommended Items.
190
CONFIDENTIAL
Recommendations
Array attributes can be used in recommendation rules as both conditions and actions. Here are
some things to note when using arrays with recommendation rules.
If a recommendation rule returns the correct value for certain indexes of a
single-select menu type attribute, but incorrect values for other indexes of the
same array, all the values set by this recommendation rule will be discarded.
CONFIDENTIAL
191
CONFIGURATION RULES
Multiple values can be recommended for a text type array attribute using the
|^| delimiter.
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of
Recommendation Rules.
Step 2:
Click Add to create a new rule.
Step 3:
Enter the basic Properties of the rule. Refer to Recipe 10.2 for more details.
Step 4:
Create your Conditions. Remember, you only want this rule to run when Meat Lovers
is selected as the Specialty type. Because Specialty is an array attribute, you will have to
define Advanced Conditions.
Step 5:
Select the values of the Action Attributes. Since there are 6 options for toppings, you
will need to select and set all six of the attributes.
Step 6:
Select the Set Type of the attribute.
192
CONFIDENTIAL
Step 7:
Click the Edit Function button to open a Function Editor. You will have to edit the
Advanced Function of each of the Addl Topping attributes using BML. Remember, the first
attribute will be Pepperoni.
Step 9:
Enter a Message to Display on User-Side, if necessary.
Step 10:
Click Update and Back to save the rule and return to the Recommendation Rules List
page.
CONFIDENTIAL
193
CONFIGURATION RULES
Step 8:
Repeat Step 6 for each of the action attributes.
Notice how the Additional Toppings are read-only when a user selects a Meat Lovers pizza and that
only Pepperoni and Sausage are set as the toppings.
POINTS TO REMEMBER
Simple conditions and actions are not available for arrays.
If you wish to leave an array element unchanged, the array element must have
the value set to the system variable $BM_UNCHANGED_STR$ or $BM_
UNCHANGED_NUM$.
Always return true functions can be used to create rule conditions only.
The recommendation text for an array attributes always use the variable name
of the attribute, rather than the display name, as for non-array attributes.
Set Type Recommendations will work for an array attribute only if none of the
values of those attribute elements are changed by the user. Once its changed,
the system treats it as an overwrite of the attribute and will not perform a Set
recommendation on any of the elements that get added afterward.
Force Set Type Recommendations can only be used in an array if ALL the
elements in the array are to be of force set.
CONFIDENTIAL
CONFIGURATION RULES
CONFIDENTIAL
195
BigMachines Application
Commerce
11
QUICK START OVERVIEW
In This Chapter:
Commerce Overview
Commerce Documents
Highlights:
Common commerce document actions and attributes are included.
Simple standard approval reasons have been included as a template.
Commerce attributes and actions have been included in the transaction
manager layout.
Everything included is can be customized to suit your individual needs.
Ease of implementation and significant time savings.
Integration and Document Engine included.
CONFIDENTIAL
199
Commerce processes are used to create the purchasing processes used by your company. It allows
you to set up your quoting, ordering, approval, and other workflow processes. By creating ordered
sets of commerce document templates and associated attributes, you can enable buyers and supplier
agents to conduct commerce on your system.
From the Quick Start Platform, the commerce process can be customized according to how
you want to structure data flow between users during transactions. While there are attributes
and actions provided in Quick Start, you can make edits to any of them, change the look of the
transaction by using the Layout Editor and you can also modify the Workflow Steps to change the
workflow of your process.
In addition, the Document Engine is available to help you create a first-class proposal or quote
designed specifically for you and your clients needs. See the Document Engine Cookbook for more
information.
The commerce process template is finalized using a deploy feature and thus becomes active
on the user side. A process invocation create a button that connects Commerce with Product
Configuration and Parts Search.
ILLUSTRATION OF COMMERCE PROCESS ADMINISTRATION
200
CONFIDENTIAL
Main documents are used for general information pertaining to the transaction, like customer
name, billing/shipping information and sub-documents, are used as product detail pages. This
design scheme enables you to create a single main document for multiple products. A summary of
sub-document data also appears on main documents, in the requisite line item group.
CONFIDENTIAL
201
The building blocks of documents are attributes and actions. Attributes are used to create
document fields and actions trigger events to happen. Along with the custom attributes and
actions you can create, the commerce system provides a set of standard attribute sets and systemgenerated actions. After generating document attributes and actions, all the pieces can be arranged
using the layout editor.
The main document in the transaction manager contains data like quote information, proposal
options, customer address information and even the line item grid.
USER-SIDE SUB-DOCUMENT
The sub-document in the transaction manager is accessed when you click on the edit icon in the
Line Item Grid.
The pages that follow contain the product information for that specific line item. The information
that is presented is based on the line attributes that have been created and where they have been
placed on the sub-document layout editor.
202
CONFIDENTIAL
203
CONFIDENTIAL
204
CONFIDENTIAL
12
DOCUMENT ATTRIBUTES
In This Chapter:
Attribute Types
Managing Attributes
General Tab
Default Tab
Modify Tab
Document Views Tab
Mapping Tab
Main-Doc Attribute Sets
Sub-Doc Attribute Sets
ATTRIBUTES IN A TRANSACTION:
The images below show how different attributes are used in transactions:
CONFIDENTIAL
205
The table below lists all supported attribute types in the main document and sub-document. All of
the types listed could be an individual attribute or part of an attribute set.
Attribute Type
Usage
Available Tabs
Menu
Currency
Date
Integer/Float
Boolean
Rich Text
History
Summation
Attribute Sets
An addition to the table above, BigMachines also uses System Attributes and Composite Attributes.
SYSTEM ATTRIBUTES
Commerce system attributes are used in rules as inputs to determine certain behavior. Some
important system attributes are listed in the Help section.
Click on Help > Commerce Process > Documents > Attributes > System Attributes
An example of a system attribute is: Current Date (_system_date). This returns the current system
date as a string.
You can display commerce system attributes on documents or make them hidden and only use them
in document calculations. When commerce system attributes are mapped to document attributes,
the variable values are determined once at document creation time. To gain access to system
variables at other times in the documents existence, you can return them as functions associated
with modify type document actions (see Recipe 13.2).
206
CONFIDENTIAL
When a system variable is included in a document, the values are also included in the XML
generated for the document. The value appears in XML tags named with the attribute variable
names used to store system variable values.
Sample XML
<current_date><![CDATA[ 05/31/2002 12:54PM ]]></current_date>
<supplier_base_currency><[CDATA[ USD ]]></supplier_base_currency>
<user_currency_pref><[CDATA[ AUD ]]></user_currency_pref>
<currency_conv_rate><[CDATA[ 1.79624 ]]></currency_conv_rate>
You can use numeric attribute types to store commerce system variables as
long as the variable value is converted from string type to numeric type.
For more information on how to add a system variable to a document, see Recipe 12.4, which
discusses the Default Tab in the Attribute Editor.
Composite Attributes
Composite attributes are a unique type of attribute. They are used to display one or more fields
belonging to a family of attributes. This attribute is also unique in that you can control the display
of composite attributes using XSL Views. Composite attributes can be used to display configurable
attributes, product line attributes, model attributes and component pricing.
CONFIDENTIAL
207
DOCUMENT ATTRIBUTES
There are only a few composite attributes and they are all used in attribute sets. These include:
Model Attributes, Product Line Attributes, Segment (Product Family) Attributes, Configurable
Attributes, and component prices.
Step 2:
Edit any of the fields displayed in the Attribute Editor. To edit the default value, access
rights, layout or product mapping, click a Tab name and edit the information on that tab. For
more information on these tabs, refer to Recipes 12.3-12.7.
Step 3:
Click Apply to save changes and remain on the Attribute Editor page or click Update to
save changes and return to the Attributes List page.
POINTS TO REMEMBER
DEPLOY! Edits are not visible to the user until the process is deployed.
Previously created variable names appear as read-only because they are not editable.
For ease of maintenance, dont forget to use your Quick Links!
If you need to delete an attribute from a document, make sure it is absolutely necessary because
once an attribute is deleted, it cannot be recovered. When you delete an attribute, it is also deleted
from all document views at the same time.
208
CONFIDENTIAL
To Delete an Attribute
Commerce and Documents > Process Definition > Select a Process > Documents > Quote
or Line > Attributes
Step 1:
Under the Select column, mark the check-box next to the attribute you need to delete.
Step 2:
Click the Delete button on the bottom of the page.
POINTS TO REMEMBER
209
DOCUMENT ATTRIBUTES
Step 3:
If you want to delete an attribute set, you must click on the attribute set name and then
click Delete All. You cannot delete individual attributes from an attribute set.
Many of the attributes that you will need have are already included in the Quick Start process.
However, there may be instances where you will need to add some attributes.
By default, document attributes are listed on the Attributes Lists page in the order that they are
created. Composite Attributes and Attribute Sets are always listed last.
To Add an Attribute
Commerce and Documents > Process Definition > Select a Process > Documents > Quote or
Line > Attributes
Step 1:
Click the Add button the bottom of the Attributes List page. This will open the Attribute
Editor.
Step 2:
Enter a unique Name and Variable Name for the attribute. NOTE: Once the variable
name has been saved, it cannot be changed.
Step 3:
Select the Attribute Type. Refer to Recipe 12.1 for attribute type definitions.
Step 4:
Click Add to save changes and continue in the Attribute Editor. The tabs and fields displayed
after you click Add will vary depending on the Attribute Type selected.
210
Description
The visible label that will be seen in the Transaction.
The contents of this field populate the user Help icons.
CONFIDENTIAL
Description
If shown, checking this box makes this attribute a
required field that must be completed prior to saving.
When checked, the attribute will trigger modifications to
run when the attribute is modified by the user (Recipe
12.5).
Layout Path
Validation
211
DOCUMENT ATTRIBUTES
If the simple validations are available to be made, they can be set at the bottom of the general tab.
For example, you can select a maximum or minimum field length, check a range, etc. An error
message will appear to the user if the entry to this field is incorrect or fails the simple validation.
Description
None
System Variable
Data
Function
POINTS TO REMEMBER
Defaults cannot be set for the following types of attributes:
Summation
Read-ony Text
HTML
File Attachment
Composite
212
CONFIDENTIAL
Step 1:
Click Add after you have populated the menu for the attribute.
Step 2:
Click on the Default Tab to set the attribute value.
Step 3:
Select the radio button next to Function and click the Define Function button.
Step 4:
This will open up a Script Editor. To assign a system attribute value to your new
attribute, select the option under the System Variable Name Tab: _system_user_name
Step 6:
Select this attribute and click Next. This opens the BML Editor, where you can write a
script to return the appropriate data.
CONFIDENTIAL
213
DOCUMENT ATTRIBUTES
Step 5:
Click on the tab Variable Name for (Quote) and scroll to the bottom. You will see
your new attribute salesRepresentative.
POINTS TO REMEMBER
Now that you have defined a function on this document attribute, when you return to the
Attributes List page, you will see that under the column Related Rules, that there is a new
link named List. By defining a function, you have also created a Default Value Attribute rule.
REMEMBER: Attributes cannot be deleted when they are being used as a rule input.
So, in order to delete this attribute, you will have to go back to the Default Tab and select
the None radio button, thus removing its use as a rule input.
Next to each action name (which will be covered in Chapter 13), you will see 5 options that can be
used to modify an attribute value.
Modification
Define Function
Revert to Default
This will use the default value that was set in the Default Tab.
For better performance and maintenance, use this sparingly.
214
CONFIDENTIAL
Visibility
Description
Read/Write
This attribute can be viewed and modified for the step and
profile indicated.
Read-Only
Hide
This attribute will not be shown for the step and profile
indicated.
The Mapping Tab allows users to hide your attribute from Parts, Models, Product Lines or Product
Families. The attribute will only be hidden when the line items are all of the same type and that
type is checked on the Mapping Tab.
This functionality allows you to hide attributes in documents created for a single type of item. For
example, if an attribute is hidden for parts, then the attribute will not appear in documents whose
line items are for parts. However, if the line items are for parts and models, attributes marked
hide for parts would appear.
CONFIDENTIAL
215
DOCUMENT ATTRIBUTES
POINTS TO REMEMBER
216
CONFIDENTIAL
User-Side View:
On the user-side, the Bill To/Ship To Address Attribute Set can look like the image below. You can
make changes to this layout using the Layout Editor (see Chapter 14).
DOCUMENT ATTRIBUTES
CONFIDENTIAL
217
My Approval Attribute
A special attribute for the Reject/Approve icons is created automatically when a standard Submit
Action is created. The Reject/Approve icon attributes includes a set of approve and reject icons
for each reason that has been defined. If reasons are added or modified, the attribute automatically
updates. You do not have the ability to modify other properties of the individual icons. The attribute
value gets saved to the database when the Approve or Reject button is clicked on the commerce
document. When the user clicks the Approve or Reject icon, it updates the value of the reason the
user approved or rejected the quote and also the comments that the approver enters.
218
CONFIDENTIAL
Approval Status
This attribute is created automatically when a standard Submit Action is created. The Approval
Status attribute lists all of the approvals that are currently pending for a quote. If the quote is not
waiting for approvals on anything, the Approval Status section will read No Approvals Pending.
The Approval History attribute is automatically created when a standard Submit Action is created
by you. The Approval History attribute keeps a record of everything that is happening with
the approvals. It shows the user who submitted the quote, when the quote was submitted for
approval and also a history of who has approved the quote and the date of the approval.
CONFIDENTIAL
219
DOCUMENT ATTRIBUTES
Approval History
POINTS TO REMEMBER
The Submit Attribute Set is generated by the system AFTER the Submit Action Set has
been created.
The Submit Attributes must be added to the Commerce Document using the Layout
Editor. Quick Start has placed them in their own tab labeled Approvals.
Document Attributes are created and removed as a set. You can not remove individual
attributes from a set. Think You Go, We Go.
Attribute Sets CANNOT be deleted if they are used as rule inputs. You will need to
delete the related rule first and then delete the attribute set.
Description
There are 41 fields that are
automatically created.
220
Notes:
There is a special attribute type: Link to
Dialog Window that appears for two different
attributes. These types create a link in the
transaction to a dialog window to display
description content. You can edit the text on
the editor page for this type.
CONFIDENTIAL
Description
Notes:
Just as an example, the following is what will be seen on the user-side. This example below is of
the composite attribute: Configurable Attribute Information which is part of the Configurable
Attribute Set. Note: These layouts can be customized using XML.
When you create a commerce attribute type that is Rich Text, in the General Tab, you will see an
option for Manage Templates and the action Edit Templates.
CONFIDENTIAL
221
DOCUMENT ATTRIBUTES
The Rich Text Editor have four main sections: Content Editor Window, Template Tree, Template
Preview and the Toolbar.
Section
Content Editor Window
Description
You can add and edit content in this section. The actions in the Toolbar act on the
selected content within this window.
Template Library
This gives end users access to the templates you or other admins have created.
Template Preview
This allows you and/or the end user to preview a selected template and determine
whether to insert it into the Content Editor Window.
Toolbar
The actions within the Toolbar are grouped into Tabs: Home, Dynamic, Format, Image,
Hyperlink and Table. These function the same as the Document Engine, so please refer to
that section of the cookbook for more information.
222
CONFIDENTIAL
TEMPLATE LIBRARY
Template Options
When you right-click on a template name, you will see a menu of
options that allows you to rename or edit the template. It also gives
you the same options as the Template Preview section: Insert into Text
and Show Preview.
TEMPLATE PREVIEW
The template preview section is where you can take a quick peek at what is included in a template
and perhaps insert it into a new template or decide if should be edited. Click Insert Into Text to
add it to the Content Editor Window.
CONFIDENTIAL
223
DOCUMENT ATTRIBUTES
The Template Library contains the templates that have been saved as well as the folders that they
belong to. You, or a SuperUser, can choose to save a template in the Shared Template folder.
This makes the template available for other rich text type attributes within the process. You can
also save the template in a folder created automatically for this attribute. This ensures that the
template is available for this attribute only. The name of the folder is the same as the variable name
of the attribute.
224
CONFIDENTIAL
DOCUMENT ATTRIBUTES
CONFIDENTIAL
225
226
CONFIDENTIAL
13
DOCUMENT ACTIONS
In This Chapter:
Overview of Actions
Action Types
Maintaining Actions
General Tab
Modify Tab
Destination Tab
Integration Tab
Document Views Tab
Special Tabs
Approvals Tab
Document
(Main or Sub)
User Defined
Actions
System
Generated
Actions
Actions are required to carry out operations based on the business logic.
CONFIDENTIAL
227
All document actions are managed from the Actions List page. You can customize system-generated
actions by modifying action labels and creating action rules. You can also create custom actions for
the purpose of saving document data, directing the system to a different page, offering print or e-mail
options, and showing the change history for a document.
For the most part, users perform document actions. Actions are executed in three ways: as a
button, a timer, or a SOAP call. Timers are discussed in more detail in Chapter 15.
There are two action display types: buttons and hyper-links. Buttons signify most actions, such
as Save, Submit, and Update. Hyper-links designate specific actions, such as View Account,
which allow users to review Customer account records. In order for any action to appear on a
commerce document, it must be included in the document layout, see Document Views Tab for more
information.
Back
Description
This is the most common type of action and is used
to change attribute values, modify quote data and save
modifications to the transaction.
This is an action that takes the user back to the last viewed
page. It does not save user data.
Display History
228
CONFIDENTIAL
Action Name
Description
Copy to Favorites*
Export Attachment
The Copy Line Items action can be defined only for the
main document. This action enables users to make one
or more copies of one or more line items (configured
and non-configured) at a time. It is a modify type action.
However, unlike other modify type actions, the Copy Line
Item Action possesses an Initialization tab and has no
Integration tab. See the Knowledge Database article User
Defined Document Actions for more information.
Submit*
Action Name
Description
Remove [sub-document]
Open [sub-document]
Reconfigure*
CONFIDENTIAL
229
DOCUMENT ACTIONS
The table below represents the system-generated document actions that can be used in main and
sub-documents. These can be edited to suit the document.
Action Name
Description
Recalculate*
The Recalculate action is generated automatically when a Price Attribute Set is added
to a sub-document. The action enables users to recalculate pricing data after a pricing
field is altered. See Recipe 12.9 for more details.
Create [sub-document]*
Autofill/Browse/View/Select
Alternate Address
230
CONFIDENTIAL
Step 3:
Enter a unique Variable Name. Do not use any special characters on this field.
Step 4:
Select the action type you want to create.
Step 5:
Click Add to save changes and open Admin Action editor, or click Cancel to return to
Action List without saving changes.
Step 7:
Click Apply to save changes. Click Update to save changes and return to the Document
List page.
After you have completed these steps, the new action will appear in alphabetical order on
the Actions List page.
POINTS TO REMEMBER
CONFIDENTIAL
231
DOCUMENT ACTIONS
Step 6:
Edit the available tabs. Refer to the recipes for General Tab, Destination Tab, Modify Tab,
Mapping Tab, Integration Tab, Standard Approvals and Special Tabs.
The General Tab is the one tab that is common to all action types. It holds the action information
such as Label,Variable Name, Layout Path and Advanced Modification/Validation.
Description
Text label that is displayed on the transaction button
Unique name to the action. It cant be modified once its
been saved.
Description
Action Icon
Layout Path
232
CONFIDENTIAL
Label
Option
Yes or No
Description
Advanced Modification
No Advanced Modification or
Define Advanced Modification
Advanced Validation
Simple Validations
CONFIDENTIAL
233
DOCUMENT ACTIONS
The Modify Tab is available for all Modify type actions, both system-generated and user-defined.
The Modify Tab controls the way a transaction retrieves its data. You can manipulate the values in
attributes by specifying behavior in this tab. These Modify Tabs are the same and performs the same
functions as the ones you saw in Recipe 12.5. They both modify attribute values.
Modification
Define Function
Use Specified Value
Leave Value Unchanged
Revert to Default
Save from Form
234
CONFIDENTIAL
Destination Option
Parent Page
Same Page
Custom Destination
Upon clicking the action, the user will be taken to the URL
specified in this field. The valid value for this field is the
relative path to any page on the BigMachines application.
Upon clicking the action, the user will be taken to the URL
returned by running a BML function. The valid value return
value for this function is a string. Any URL whose relative
path is a page on the BigMachines application would be a
valid return value.
The Destination Tab allows the user to go to one of two places when the action type is Add From
Catalog: Simple Destination Rule and Define Destination Rule.
ADD FROM CATALOG ACTION
Simple Destination
Upon clicking the action, the user will be taken to the URL specified in this
field. The valid value for this field is the relative path to any page on the
BigMachines application.
You can write an advanced function that returns a string. The string
that is returned specifies the destination URL. The inputs available to
the Advanced Destination are system variables, main document and sub
document attributes. The Advanced Destination can also call commerce
and util library functions.
CONFIDENTIAL
235
DOCUMENT ACTIONS
Destination option
A destination rule can be used to send all Add From Catalog type actions to one page
or another. For example, if you have selected a pump, you are taken to the tank
screen. The script below appends the appropriate model name into a URL string,
which is returned as the destination link. See the BML section for more information.
236
CONFIDENTIAL
The Apply Modify value in this tab cannot be removed. All integrations
can be ordered around it. Refer to the Knowledge Database for more
information regarding Integrations.
You will need to use the radio buttons to determine whether you would like certain actions to be
Active, Inactive or Hidden for a profile in a step.
Visibility
Description
The user will be able to see and use the action.
The user will be able to see the action, but it will be
inactive.
Hide
CONFIDENTIAL
237
DOCUMENT ACTIONS
Active
Inactive
MAPPINGS TAB
The Mapping tab is available only for following actions: Autofill, Browse,View, and Select Alternate
Address. When the user selects a customer account ID and clicks on a modify-type action, the
mapping specified in the respective action will populate the commerce attributes with data from the
corresponding accounts fields. Mapping rules are used to link data from one document to another in
the same process, or from the Account database to a commerce document.
For example, you can use mapping rules to link Account records to a commerce documents Bill To/
Ship To fields.
POINTS TO REMEMBER
Mapping rules have a higher precedence than an attributes default value, however,
they have a lower precedence than Modify rules. To force the system to use mapping
rules when a user performs and Autofill or Select Address action, use the Leave Value
Unchanged setting on the modify tab.
238
CONFIDENTIAL
CONFIDENTIAL
239
DOCUMENT ACTIONS
The approvals tab can also be referred to when discussing Approval Sequences and also the Submit
Action Set. Before we get to the Approvals Tab and what it does, let us introduced you to the
Submit Action set, which are used for creating Approval Sequences.
Step 2:
Add Reasons to the Approvals Tab.
Step 3:
Add Approver Sequences to ALL reasons.
Step 4:
Create Transition Rules.
Step 5:
Set-up E-Mail Notifications.
Step 6:
Add Submit Action Set and Submit Attribute Set to Document Layout.
Step 7:
Deploy the Commerce Process.
ONLY STEPS 2 AND 3 NEED TO BE DONE IF USING BIGMACHINES
QUICK START PACKAGE.
240
CONFIDENTIAL
SUBMIT ACTION
This creates the Submit action as a main document Submit Type action and it runs with a user
clicks the Submit button within a quote. This action decides if the quote needs to enter the
approval sequence or can be automatically approved. The approval reasons are defined within the
approvals tab. Approval reasons contain an approver tree where levels of approval can be defined.
POINTS TO REMEMBER
CONFIDENTIAL
241
DOCUMENT ACTIONS
Any Modification or Transitions for this Action will happen once all Approval conditions
are met at the end of the approval process.
If there are reasons for which this quote needs to be approved, the Request Approval
sub-action will run.
DEPLOY any changes that are made.
APPROVER TREE:
For each node of the Reason Tree, there is an Approver Tree. This contains, in order, the approvers
that must approve the associated reason. Approvers can approve in serial or parallel. For each
approver node, you can specify a next approver condition, which when evaluated to True, activates
the next approvers.
Adding a Reason
Step 1:
Click on the + next to Submit to add a subordinate(child) reason.
Step 2:
Enter a Label and Variable Name for your Reason and click OK.
242
CONFIDENTIAL
Step 3:
Double-Click on the your reason that now displays in the Reason Tree. You will see
the following pop-up:
Step 4:
Click on the gear icon to edit the reason, including setting your conditions. This is
where you can add a reason description and set-up your conditions and notifications.
Step 5:
Conditions are evaluated when the user clicks the Submit button. If the conditions
are returned true, then the approval sequence for the reason is executed and the
system will modify the Approval Status and Reject/Approve icon attributes.
The condition editor is similar to that in Configuration. This is the process of allowing
users to customize a model to suit their needs, except:
The condition attributes that can be selected will be commerce attributes:
System Attributes and Document Attributes.
The advance function editor will be the same as the function editor for the
commerce library functions. See Function Wizard for more details.
DOCUMENT ACTIONS
CONFIDENTIAL
243
Adding Approvers
Now that you have created your reasons, you are ready to add approvers to the
sequence.
POINTS TO REMEMBER
Parallel Approver Sequences: Both Approvers have to approve the quote in order
for it to be considered Approved and move to the next Step in the Workflow.
Serial Approver Sequences: The Reason must be approved by a first-level
approver BEFORE moving on to the next approver.
Step 1:
Double-Click on the reason that you need to add approvers to or modify the
approvers.
Step 2:
Click the + next to the reason label.
Step 3:
Select either Simple or Advanced approver selection.
Simple: Select users or groups from the drop-down menu. Here you can
select groups and/or individual users. If a group is added, only one person in
the group needs to approve the quote to move it to the next approval in the
workflow. If more than one group or user is selected, then the values will be
delimited with an or.
CONFIDENTIAL
Step 5:
Click the gear icon to open the Approver Editor where you can define the
approvers, what conditions must be met as well as notifications. Here you have the
ability to use advanced functionality to select the approver for a particular reason.
You can also use conditions to determine if the next approver should be required and
under what circumstances.
Once you have added your reason and approvers, you will be able to
double-click on any reason and see more details, including the entire
approval sequence for that reason.
DOCUMENT ACTIONS
POINTS TO REMEMBER
If you delete a parent reason or approver, it will also delete all child reasons and
approvers.
You can drag-and-drop reasons from one parent/child to another.
If more than one reason is coming from a parent, then these are considered to
be parallel reason flows. Parent/child relationships are considered serial flows. In
serial flows, once a parent reason has been approved, a child reason notifications
are sent.
CONFIDENTIAL
245
13.10.3: SUB-ACTIONS
As mentioned earlier in this Recipe, along with the Submit Action, there are four sub-actions created.
13.10.3: SUB-ACTIONS
POINTS TO REMEMBER
You CANNOT place this in a group view and make it accessible to users.
Transition rules can be created from this action. Note that email notifications to
the approvers will be sent out using the Approvals Tab, so no email notification
should be sent out using the transition rules on this action.
APPROVE SUB-ACTION
The Approve Sub-Action is automatically generated when the Submit Action is created. The purpose
of this action is to allow you to define what happens after all of the Reasons have been approved.
This action is automatically executed when ALL of the Reasons have been approved via the Reject/
Approve icons attribute. There are three tabs available to you: General, Modify and Integration.
REJECT SUB-ACTION
The Reject Sub-Action is system generated when the Submit Action is created by an administrator.
The purpose of this action is to allow you to define what happens when any approver rejects a
reason. The action is executed after the user clicks the reject icon on the commerce document.
There are multiple tabs available to you: General, Modify, Destination, Integration, Document Views
and Reset Reasons.
See Recipe 13.10.4 for details on Reset Reasons.
246
CONFIDENTIAL
REVISE SUB-ACTION
The Revise Sub-Action is generated when you create the Submit Action. The purpose of this
action is to provide an action to revise a quote. This is standard in an approval process so the
system can automatically reset the approvals when the transaction is revised.
The Revise Sub-Action has 6 different tabs: General, Modify, Destination, Integration, Document
Views and Reset Reasons. Modify, Destination, Integration and Document Views Tabs function the
same as a standard modify function.
See Recipe 13.10.4 for details on the Reset Reasons Tab.
POINTS TO REMEMBER
You have the ability to create transition rules from this action as well as define
the modify properties. See Chapter 15 for more information.
This can be placed in a group view and made accessible to users.
These sub-actions must be active in a step view for it to be executed. See
Chapter 15 for more information.
Order of Operations
Sub doc Modify tab of Update Line item > Update Line Item Validation > Modify Tab of Standard
Approval action > Advanced Modification of Standard Approval Action > Advanced Validation
of Standard Approval action > Recalculate buy side reason approver tree > Step Transition >
Save Reason Tree Info/Update Approval History/Updated Approval Status. NOTE: The first two
operations are run ONLY when the line item data has changed.
SIMPLE RESET
Step 1:
Select the radio button next to Simple.
Step 2:
You should see a Reason Tree, a multi-select check box tree that contains all of the defined
reasons. If the check box is selected, the reason will be reset. If the check box is not selected, the
reason will not be reset. NOTE: The default setting is for all reasons to NOT BE reset.
CONFIDENTIAL
247
DOCUMENT ACTIONS
When a quote is revised or rejected, you need the ability to control if the reasons need to be
reset. If a reason is reset, it will basically remove the approval, if the reason has already been
approved. To reset the approval, the system must modify the standard Reject and Approval icons
as well as the Approval Status attributes. If the reason has already been approved and is not reset,
this will affect the email notifications that are sent out when the users resubmits.
ADVANCED RESET
Step 1:
Select the radio button next to Advanced and click on Define Function.
Step 2:
Write an advanced function that will return the reasons that should be reset. The return format can
be an array or delimited string of the reason variable names. The function editor is the same as the
Commerce Library Function Editor.
1. A quote starts on the Pending step. When the user invokes the Submit action, BigMachines
checks to see if any approval is needed. If no approvals are needed, the Submit action is
performed and the quote is approved. Therefore, on the Submit action, you must define
transition rules to the Approved step.
2. If approvals are needed, the Request for Approval action is triggered and the quote must
be moved to the Submitted for Approval step. You need to define a transition rule on the
Request for Approval action to take the quote to the Pending Approvals step.
3. On the Pending Approvals step, you should define a transition rule on the Submit action to
the Approved step since the final acceptance will automatically trigger the Submit action and
quote will be approved.
248
CONFIDENTIAL
4. You should also define transition rules on the Revise and Reject actions to
the quote back to the Pending Step.
5.
take
The Submit action should be hidden (not inactivated) after the Pending step to prevent
users from continuously resubmitting. Also, the revise action should only be made visible
in the Pending Approval step.
DOCUMENT ACTIONS
CONFIDENTIAL
249
The order of operations for a modify action depict the order in which modifications and validations
are run when a user clicks on a modify action.
250
CONFIDENTIAL
DOCUMENT ACTIONS
CONFIDENTIAL
251
252
CONFIDENTIAL
14
LAYOUT ADMINISTRATION
In This Chapter:
Overview
Inputs Overview
Outer Panels
Commerce Tabs
Input Columns
Input Elements
Column Layouts
Action Strips & Sticky Bar
Line Item Grid
Stylesheet Editor
Attributes
Spacers
CONFIDENTIAL
253
USER-SIDE FEATURES
There is great flexibility available to you, including features like the ability to display help icons, the
sticky action bar, collapsible line items and enhanced stylesheet options should help improve enduser experience.
Line Item Grid Features
Actions that can be performed on the line item grid are now available as icons. These actions are
available to the user when they are active in the applicable Participant Profile.
ADMINISTRATION
At the core of this functionality is the new Layout Editor, which provides a graphical drag & drop
feature for creating and managing document layouts. Admins have the ability to create multiple
columns and tabs, greater flexibility in laying out UI elements, help text for attributes and more.
254
CONFIDENTIAL
Layout Elements
The new commerce layout is layers of objects contained within one another that provide you the
ability to manipulate the layout more easily. They are color-coded for faster identification.
Layout Element
Description
Panels
Tabs
Column Layouts
Columns
Action Strips
Attributes
Actions
Spacers
These have a default of 25px, though you can set the height
as necessary.
The Layout Editor is a fixed-width page that is divided into the following areas:
Visual Editing Area: This is for the visual editing of the Commerce UI Layout
Administration Actions Toolbar: These are actions that can be performed on the layout
editor by you, the administrator.
Sticky Actions:You can manage which commerce actions to persist on the user-side.
CONFIDENTIAL
255
LAYOUT ADMINISTRATION
Layout Editor
1. Attributes
2. Action Strip
3. Spacer
4. Line Item Grid
ADMINISTRATION OF INPUTS
In the Visual Editing Area of the Layout Editor, an Input has the following functionality:
CONFIDENTIAL
Inputs (regardless of type) can be dragged & dropped into any visible Input Column.You can
click and drag to input to a new column by clicking anywhere on the input box.
Input property editing is available by clicking on the cog icon on the right side. The appropriate
input editor dialog box will be opened.
An input is removed from the layout by clicking on the x icon on the right side of each input.
LAYOUT ADMINISTRATION
See Recipe 14.6 for more information how to use Input Elements.
CONFIDENTIAL
257
Highlights:
Layout can have multiple panels.
You can choose to show or hide the label of
the panel.
You can choose the make the outer panel
collapsible by default.
258
CONFIDENTIAL
LAYOUT ADMINISTRATION
Step 2:
Select Layout Element from the drop-down menu.
Step 3:
Select Add a New Panel from the menu.
CONFIDENTIAL
259
Step 4:
Drag & Drop the panel into the Layout Editor. The red dotted line represents where
the panel will be placed. The green check mark indicates that its can be dropped in that
space.
Step 5:
Enter the Label text that should appear on the Panel.
Step 6:
Check the box next to Plain Display to display the panel without labels or the ability to
expand or collapse. If this box is checked, the remaining options (Collapsible, Hide Label
and Start Collapsed) will be grayed out.
Step 7:
If you do not check the Plain Display box, you will be able to check the box labeled
Collapsible. Selecting this option will allow users to collapse the panel. If this box is not
checked, the Start Collapsed option will be grayed out.
Step 8:
Check the box Hide Label if you wish to display the panel without a label.
Step 9:
If you have chosen to make the panel collapsible, you can also choose to have the panel
be collapsed when the page is initially loaded by checking the box Start Collapsed.
Step 10:
Click OK to save the changes and close the dialog box or click Cancel to return to the
Layout Editor without saving changes.
260
CONFIDENTIAL
ADMINISTRATION
In the Visual Layout Editor, a Commerce Tab should be displayed with:
1. Tab Label
2. Cog Icon to open the Panel dialog box.
3. Delete Icon to remove the attribute from the column.
LAYOUT ADMINISTRATION
CONFIDENTIAL
261
Step 4:
Drag & Drop the tab into an Outer Panel. The red dotted line represents where the
panel will be placed. The green check mark indicates that its can be dropped in that
space.
Step 5:
Enter the Label text that should appear on the Tab.
Step 6:
Decide if the tab should be hidden from any Parts, Models or special Product Segments
and if so, select the appropriate check box.
Step 7:
Click OK to save the changes and close the dialog box or click Cancel to return to the
Layout Editor without saving changes.
Tabs can also be dragged & dropped to move the tab into its new position. A GREEN
checkmark displays if the move can be made and a red No sign will appear if it cannot.
262
CONFIDENTIAL
ADMINISTRATION
In the Visual Layout Editor, a Column Layout should be displayed with:
1. Cog Icon to open the Panel dialog box.
2. Delete Icon to remove the attribute from the column. When you delete a Column Layout:
A warning message is displayed.
The column layout is removed from the commerce tab.
CONFIDENTIAL
263
LAYOUT ADMINISTRATION
POINTS TO REMEMBER
To mimic a table, or if you need attributes to be horizontally aligned, stack
multiple column layouts.
Horizontal scrolls are not provided by default. You can enable this using the
alternate stylesheet.
264
CONFIDENTIAL
LAYOUT ADMINISTRATION
CONFIDENTIAL
265
Step 5:
Determine the label padding in pixels. The default padding is 5 pixels.
Step 6:
Enter an Item Class Label, if necessary. The name of the custom CSS class to
associate with this column. Using this class will allow you to style this column differently
than the rest of this page. Lets say you wanted to change the color of the labels to
green. You will need to add a custom CSS class to the alternate spreadsheet. For
example:
.my-class label.form-label
{
color: green.
}
Step 7:
Click OK to save changes and close the dialog box or click Cancel to close the dialog
box without saving your changes.
266
CONFIDENTIAL
In the Visual Editing Area of the Layout Editor, a Spacer should be displayed with the following:
1.
2.
3.
4.
Adding a Spacer
Step 1:
To add a spacer, click Add in the Administration Actions toolbar.
Step 2:
Select Layout Element from the drop-down menu.
Step 3:
Select Add a new Spacer from the menu.
LAYOUT ADMINISTRATION
Step 4:
Drag & Drop the Spacer into an Input Column. The red dotted line represents where
the spacer will be placed. The green check mark indicates it can be dropped in that
space.
CONFIDENTIAL
267
Editing a Spacer
When an administrator clicks on the Cog icon of a Spacer field, an Edit Properties dialog
box will pop-up. The only property that can be edited on a Spacer is the height for the
field.
Step 1:
Determine the height of the Spacer in pixels.
Step 2:
Click OK to save changes or click Cancel to return to the Layout Editor without saving
the changes.
INPUT AN ATTRIBUTE
In the Visual Editor Area of the Layout Editor, an Attribute should be displayed with the following:
1.
2.
3.
4.
Attribute Name
Attribute Icon
Cog Icon to open Edit Properties Window
Delete Icon to remove the attribute from the column. When you delete an Input Attribute:
No warning message is given.
The attribute will become available in the Add Attributes Dialog Window
The attribute is removed from the Input Column.
268
CONFIDENTIAL
Adding An Attribute
Step 1:
To add an attribute, click Add in the Administration Actions toolbar.
Step 2:
Select Attributes from the drop-down menu.
Step 3:
Scroll through Attributes and select one attribute.
CONFIDENTIAL
269
LAYOUT ADMINISTRATION
Step 4:
Drag & Drop Attribute into an Input Column. The red dotted line represents where
the attribute will be placed. The green checkmark indicates that its can be dropped in
that space.
270
CONFIDENTIAL
When an administrator clicks on the Cog icon on the Action Strip, an Edit Properties
dialog box will pop-up. You will see the Action Strip label displayed at the top right of the
pop-up. You will also see two tabs: Content and Field.
Step 1:
Click on the Cog icon on the Action Strip.
Step 2:
Use scroll-bar in the Content section of the Action Strip Editor to view and select
actions to order or remove.
Step 3:
After selecting an action, click the Up an Down arrows to re-order the actions or click
the X to delete the action. See Action Strip for more details.
Step 4:
Click OK to Save and close the Action Strip Editor box or click Cancel to return to the
Layout Editor without saving your changes.
CONFIDENTIAL
271
LAYOUT ADMINISTRATION
Step 5:
Click on the Field Tab to make changes to the Label, Width, Alignment and Layout.
Step 6:
Enter the Label Text or Name for the Action Strip. If you wish to hide the label for the
action strip, check the Hide Label box.
Step 7:
Determine and input a label separator.
Step 8:
Input the desired field width. The field width can be defined in either percent or pixels.
For best results, ensure that all columns in the layout add up to 100%.
Step 9:
Determine the field alignment: Left, Center or Right.
Step 10:
Determine if the actions are to be laid out either horizontally or vertically. If
horizontal, actions are laid side by side. If vertical, the actions are stacked on top of each
other.
Step 11:
Click OK to save changes and close the dialog box or click Cancel to close the dialog
box without saving your changes.
272
CONFIDENTIAL
STICKY ACTIONS
Sticky Actions are commerce actions that always stay in the users browser viewport, regardless of
where the users scrolls to on a page.
You can drag & drop actions into the Sticky Action Bar strip. After selecting an action, click the Up
an Down arrows to re-order the actions and click the X to delete the action. See previous section
for more details.
CONFIDENTIAL
273
LAYOUT ADMINISTRATION
On the Layout Editor page, Sticky Actions are represented as an Action Strip to the right of the
Administration Actions. The Sticky Action Strip should always be visible.
274
CONFIDENTIAL
Step 4:
Drag & Drop the Line Item Grid into an Input Column. The red dotted line represents
where the grid will be placed. The green check mark indicates that its can be dropped in
that space.
Step 1:
Click the New Column button if a new column needs to be added to the grid.
Step 2:
Double-click cell under Label and enter or edit the name of the column object.
Step 3:
Under the header Attribute Mapping, double-click the cell next to your new object.
This will open the Column Mapping Editor Menu.
CONFIDENTIAL
275
LAYOUT ADMINISTRATION
Step 4:
Determine if the object should be editable and be displayed in a pop-up for Copy Line
Item field.
Step 5:
Check the Display Sum check box to show the sum of all the values in the column to
the user.
Step 6:
Determine the label and field alignments for each object: left, right or center. Both
the label and value default to the left.
Step 7:
Determine the width of the column: auto-width or fixed-width.
Auto-width: The width of this column is handled automatically by the grid. If auto
is selected, the width value box is grayed out and disabled.
Fixed-width: The width is fixed by the administrator. An integer text fieldStrings
display to the product upload administrator as text fields. This field type is used to
construct an either/or selection attribute. contains the pixel value to use.
Step 8:
Click the X icon at the end of a column object to delete it.
Step 9:
Select the appropriate check boxes if you would like to display Add From Catalog
Actions and Add Ad-Hoc Items Actions.
276
CONFIDENTIAL
Step 10:
Click OK to save changes or click Cancel to close without saving changes.
POINTS TO REMEMBER
In order to display a part price for an Ad Hoc Line item, you must SAVE the
transaction.
Upon opening up the Stylesheet Editor, you will see you can make edits to five different areas:
Stick Bar
Attributes
Panel Properties
Upload Properties
Line Item Grid Propeties
CONFIDENTIAL
277
LAYOUT ADMINISTRATION
This page allows you to customize the look and feel of the commerce document. To upload
alternate icons for Group Expand, Group Collapse or Recommended Line Items, click Browse.
Click Set Default to reset to the default images. Note: Commerce stylesheet changes do
not require process deployment.They are effective immediately upon saving your
changes to the stylesheet.
UPLOAD PROPERTIES
278
CONFIDENTIAL
ATTRIBUTE PROPERTIES
Specify Attribute Properties for:
Font Color: Specify the text color using the hexadecimal format. For a preview of the color,
click Update<. The color is displayed in the color box next to the field.
Font Size: Select the font-size using the drop-down list provided.You can also specify the
font size in either points or pixels.
Font Style: Select the font-style using the drop-down list provided.
Font Weight: Select the font-weight using the drop-down list provided.
Font Family: Select the font-family using the drop-down list provided. The default font is
Tahoma.
PANEL PROPERTIES
Specify Panel Properties for:
CONFIDENTIAL
279
LAYOUT ADMINISTRATION
Header Background Color: Set a HEX number for the header background.
Header Text Color, Font Size, Font Style, Font Weight and Font Family are set the same way
as the Attribute Properties mentioned above.
Border Color: Set a border color for your panels.
Background Color: Set a background color for your panels.
Label Margin:
POINTS TO REMEMBER
Here is a list of Best Practices and things to keep in mind while creating your commerce
document layout.
The Main Document layout editor looks the same as the Sub-Document Layout
Editor. The only exceptions are that in the sub-document layout editor, you
cannot add attributes , you can only show line item attributes, and Add Action
Strip only shows line item commerce actions.
Height of spacers, attributes and action strips within a column are consistent in
the Layout Editor. All layout elements within a column are drawn with the same
height on the Layout Editor for better usability.You can observe the actual height
of these elements on preview.
You must be careful when using alternate stylesheet as it can affect the enhanced
commerce UI adversely. Some things to look out for are resizing menu or text
type attributes, placement of HTML attributes, etc. Also, you should test any
alternate CSS on all supported browsers since CSS behavior can vary greatly by
browser.
Single-select menus and multi-select menus can be changed from one to another,
but they first have to be removed from the layout and then changed in the
attribute editor itself.
Numeric fields can only have the value field right-aligned in the line item grid.
Deleting a layout container like a panel, tab or column layout will
delete all elements within the container as well.
You cannot mix pixels and percentages within a column layout.
HTML attributes that contained malformed HTML might break the UI.You are
advised to check if an HTML attribute contains tags that are not enclosed in tags.
Including prototype.js in the header or footer of the transaction page may
interfere with the functionality available to the end user, such as switching tabs,
uploading files using the File Attachment attribute, expand/collapse of line items,
etc. Admins are discouraged from using prototype in any advanced customizing
on the transaction page.
If labels intrude into the column space, either increase the label width or provide
a space in the label text so that it can wrap.
Horizontal scrolls are not provided by default. If the column width is bigger than
the page width, then some fields may appear to be cut off on the transaction page.
You can enable the horizontal scroll by using the alternate stylesheet.
280
CONFIDENTIAL
LAYOUT ADMINISTRATION
281
CONFIDENTIAL
282
CONFIDENTIAL
15
COMMERCE WORKFLOW
In This Chapter:
Overview of Workflow
Workflow Steps
Participant Profiles
User Access Rights
Document Views
Transition Rules
Notifications
Mobile Approvals
EXAMPLE OF WORKFLOW
The Quick Start process includes the following 6 Steps:
CONFIDENTIAL
283
Step or Workflow Step: Different stages within the Quote to Order process.
Transition Rule: This is how the quote moves from one Step to the next in the process.
Profiles: Participant Profiles refer to different transaction views. These views are controlled by
user type and grouping. For example, this is how we restrict access to attributes and actions for
certain users.
User Access Rights: Controls what users will be assigned to this profile once a transaction
reaches that step.
Document Views or Views: Each Participant Profile can contain a different set of access rights
for attributes and actions on the Quote.
If you look at the image on the left,
you will see a good overview of how
steps, participant profiles and transition
rules are related to one another.
The workflow is made up of 6 defined
steps. Each step contains at least one
profile. Typically, a profile is linked to
a desired user access level. This helps
control what different user levels have
access to when the transaction is on a
particular step.
For each profile, you can link a
transition rule to a commerce action
(button like Save, Submit, etc.). These
rules are meant to move the current
step to a different desired step. For
example, if you remember Recipe
13.10, if you click on Submit, there is a
transition rule that runs and moves the
transaction from the Pending step to
the Submitted for Approval step.
Remember: You must have users
and groups set-up BEFORE you
start working on your workflow
steps. Refer to Chapter 2 for
more information.
284
CONFIDENTIAL
POINTS TO REMEMBER
Use caution when deleting a step because it is not possible to recover the deleted
data. Upon a deletion, all associated profiles and profile rules are also deleted.
Cloning a step makes a copy of participant profiles and their sub-components
including transition rules.
COMMERCE WORKFLOW
Step 2:
Enter a Variable Name for the step. This is a required field.
Step 3:
Enter a Description for the step. For example, Default Step.
Step 4:
Click Add. This displays the section where you can define forwarding rules for the step.
CONFIDENTIAL
285
Step 5:
Specify the following in the Forward Rule section:
Select None if you do not want to add a forwarding rule. This is the default.
Select Advanced if you want to add an advanced forwarding rule and click Define
Function. This opens the Select Attributes window. On the Select Attributes
window.
Select the required System Variables.
Click Next. This displays the Script Function Editor page for defining the
function. Define the function and click Save and Close to save the function
and close the window
Step 6:
After making changes to the page, click Update. The new step appears on the Steps List
page.
286
CONFIDENTIAL
Notes
Transition Rules
Step 1:
From the Steps List, select a Step and select Participant Profiles from the navigation
menu.
Step 2:
Click Add.
Step 3:
Enter a name and description for the profile. This is required, so try to make it specific.
CONFIDENTIAL
287
COMMERCE WORKFLOW
Document Views
Step 4:
Click Add. This adds the profile name and displays the page for managing participant
profiles.
POINTS TO REMEMBER
Delimiters ( ~, + and @ ) that are part of advanced auto-forwarding rules, cannot
be used in profile names. Profile names can only contain alphanumeric characters
and they must use underscores for spaces. Also, names cannot begin with an
underscore.
Profiles are created in an inactive, pending state. After all components of a
commerce process have been administrated, the process should be deployed.
DEPLOY!!!!
CONFIDENTIAL
Step 1:
From the Participant Profile list page, click List next to User Access Rights of Manager
profile.
Step 2:
Select a company type from the Company Types drop-down list.
Step 3
Select a user type from the User Types drop-down list.
Step 4:
Click the greater than sign (>) button to move the selected Company Type: User Types
set to the Access Rights list box.
Step 6:
Click the greater than sign (>) button to move the selected group to the Selected
Groups list box.
Step 7:
Repeat steps 2-6 until you have assigned the appropriate user types and groups to this
profile.
Step 8:
Click Apply to save your changes.
CONFIDENTIAL
289
COMMERCE WORKFLOW
Step 5
Select a group from the Group List drop-down menu.
You should have seen a section on the bottom of the page that reads: Performer Steps.
This gives access to this profile if you have had previous permissions to access the
transaction.
For example, if a user performs an action at the Start step, then they should have access to
this profile in this new Step.
Step 9:
Under the Performer Steps Section, click Add.
Step 10:
Use the Select or Select All check box to select the steps.
Step 11:
Click Add. The step name appears on the Edit User Access Rights page. Click Cancel to
go back to the Edit User Access Rights page without saving changes.
290
CONFIDENTIAL
COMMERCE WORKFLOW
Step 1:
The top of the page displays the available Process Actions. Using the radio buttons
available, select whether you want them to be Active or Inactive when the profile
triggers. For more information on Process Actions, please see Chapter 16.
Step 2:
Using the Document Settings options, you can select whether to Show or Hide the
document.
CONFIDENTIAL
291
Step 3:
Select the Main Document or Sub Document tabs displays details related to:
All the available Groups (Names and Variable Names): Using the radio buttons
available, select whether to Show or Hide the groups.
All the available Actions (Names and Variable Names): Using the radio buttons
available, select whether you want to actions to be Active or Inactive.
All the available Attributes (Names and Variable Names):
To make attributes editable: Choose the Read/Write radio button. (Default)
To make attributes read-only: Choose the Read-Only radio button.
To hide attributes: Choose the Hide radio button.
Step 4:
You can configure all the listed attributes in one click by selecting the Select All radio
button at the bottom of the column.
Views can also be managed in the attribute editor or action editor.
Step 5:
Click Apply to save the changes on the page.
Step 6:
Click Update to save the changes and go back to the managing participant profiles page
or click Back to return without saving changes.
292
CONFIDENTIAL
CONFIDENTIAL
293
COMMERCE WORKFLOW
Its from this page that you create rules to move documents from one step to another. Notice
that you have access to both Process actions and also user-defined document actions. In the left
columns labeled Rules, you will see the number of transition rules that have been defined for each
action. If it is empty, a rule does not run on that action.
In order to add transition rules to a particular action, you must click on the action name.
POINTS TO REMEMBER
Transition rules are tied to profiles and actions. This means, a transition rule will
trigger if any user in the profile performs the document action.
294
CONFIDENTIAL
Step 5:
If you need to send notifications, select the check box for Sent notification on transition.
This displays a new tab labeled Notification. See Recipe 5.6.1 for more information
regarding notifications.
Step 6:
Under the Conditions section, you can select either of the two:
Always Return True: This is the default selection.
Advanced: If you want to add an advanced rule, click Define Function. This opens
the Select Attributes window. On the Select Attributes window:
Select the required System Variables.
Click Next. This displays the Script Function Editor page for defining the function.
Define the function and click Save and Close to save the function and close the
window.
Step 7:
Under the Transition to Step section, select the radio button corresponding to the step
you want to display when a user in the profile clicks the button.
Step 8:
After making changes to the page, click Update.
COMMERCE WORKFLOW
CONFIDENTIAL
295
15.6.1: NOTIFICATIONS
15.6.1: NOTIFICATIONS
A major feature of the approval sequence functionality are the notifications that are sent to the
involved parties. Default notifications are sent automatically by the system and they are:
Pending Approval Notification: Sent to an approver when the approval becomes active
because a transaction has met a reason.
Retraction Notification: Sent to approvers when a reason is reset and approvers are no
longer need to approval.
Rejection Notification: Sent to the submitter when a reason has been rejected.
Final Approval Notification: Sent to the submitted when the transaction approved.
Final Rejection Notification: Sent to the submitter when the transaction is rejected.
You can choose to override the email body of some of these notifications by using advanced
functions. The notification email advanced function return format allows you to specify a document
engine XSL so the transaction printer-friendly can be attached. For more information on overriding
default notifications with Advanced Functions, please see the article Notifications in the
BigMachines Knowledge Database.
296
CONFIDENTIAL
Rejection
Final Approval
When this tab is clicked, you will notice two options: Send XML and Send Email. You can check
both boxes.
CONFIDENTIAL
297
COMMERCE WORKFLOW
Because of the standard approval functionality, there will not be many instances where you will
have to create a notification on a transition rule. As mentioned in Recipe 15.6, there is an option
to send notifications on a transition rule. When the Send Notification on Transition radio
button is checked, you will see a new tab appear labeled Notification.
Adding/Editing a Notification
Checking the Send Email option will open an Email information section where you will
need to fill out additional information.
15.6.1: NOTIFICATIONS
Step 1:
There are radio button options for defining SENDER and RECIPIENT static email
addresses (simple) or rules-based email addresses (advanced function). You can enter a
comma-delimited email address string in the text field provided, if you select the Simple
Recipient Email Address option.
You can define an advanced function, if you select the Advanced Recipient Email Address
option. Note: This displays the Script Function Editor page for defining the
function.
Step 2:
There are checkboxes that list of the persons / profiles to whom a notification can be
copied. It includes:
Document Creator: Person who created the previous main document in a
process containing multiple main documents
Transaction Creator: Person who created the transaction.
Next Step Participants: Person(s) who belong to the next step in the workflow.
Current Step Participants: Person(s) who have access to the current step in the
workflow.
298
CONFIDENTIAL
Step 3:
There is a text field in which you can append the current document attributes (on which
the action is present) so they can be substituted with the real value when a notification
email is sent out. Select a commerce document attribute from the menu and click Add to
Subject. The maximum field length is 255 characters.
Step 4:
The body of email can come from two sources. Transaction formatted with an XSL file
option outputs HTML content using an XSL template (from the Printer Friendly and
History XSL views). The Body text with Smart Tags option allows you to type custom
text along with current document attribute smart tags. The maximum field length is 4000
characters.
The Transaction formatted with an XSL file option which allows you to use an
XSL template (from Printer Friendly and History XSL views). This option also
allows you to name your attachments using the document attribute smart tags.
You can also attach additional documents as a PDF.
CONFIDENTIAL
299
COMMERCE WORKFLOW
Step 5:
The attachments that go out with a notification email are of two types, denoted by
checkboxes:
This feature allows users to perform modify actions on a quote by replying to an email. The typical
use case for this is to allow a user to approve/reject a quote by responding to a system generated
email from a mobile device. The user can also provide a comment in the email that can be mapped to
a history or text area type attribute. Lets say that the submit sub-action Approve looks like this:
Notice the keywords can be either: accept, approve, approved, yes or OK. As previously discussed,
when a transaction performs a step change, then notifications are sent to approvers and users. If the
Mobile Device approvals process is set-up correctly, then the email sent to the user will contain a
unique key in the subject line. In the subject line, you should see a key (referred to as the Token).
Now, the approver will need to reply to this notification email with the following information:
The subject line MUST contain the unique key or TOKEN.
The first string on the first line of the email will be the keyword associated with the action
that the user is trying to perform.
The second line of the email can be the comment. The comment can be mapped to any text
area or history type attribute in commerce.
300
CONFIDENTIAL
POINTS TO REMEMBER
The user specified comment can contain multi-byte characters.
BigMachines validates that the user email is registered with the system before
sending the unique key. Therefore, only a user with a valid BigMachines
account can receive the unique key and can perform the modify action via email.
Inactivated users will not be sent a key.
Step 3:
Set-up a notification on a transition rule. On this rule, after you have selected Send
Email, you will need to check the box Allow Approval. When this is selected,
BigMachines will automatically generate the unique key in the subject line of the outgoing
email.
CONFIDENTIAL
301
COMMERCE WORKFLOW
Step 2:
You can specify a text area or history type attribute in the Approval Comment Mapping
Field in the Action Editor.
15.7: TIMERS
Timers enable you to schedule the system to automatically perform a document action. Based on
a defined duration of time, a timer triggers when the elapsed time exceeds the duration specified.
The system uses date type document attributes to calculate elapsed time and timers are set up on
modify type commerce actions.
Timers are managed in the steps administration area where they hook into permissions for steps.
You can define ONLY one timer per workflow step. Each timer is associated with a user account
and step participant profile. The user account acts as the performer of the timed action and is
automatically granted permission to view the document where the participant profile defines
whether the timer has permission to perform the action.
15.7: TIMERS
Using transition rules in a timers associated profile, you can configure the system to send email
notifications when a timed system triggers. You can also use transition rules to transition a
workflow step from the current step to any downstream step when a timed action is performed.
Adding/Editing A Timer
Step 1:
Enter a timer Name. For example, Follow Up.
Step 2:
Enter a Variable Name for the timer.
Step 3:
Enter a Description for the timer. For example, Send an email.
Step 4:
Select a user to map the timer to from the Map to User drop-down menu.
Step 5:
Select a profile to map the timer to from the Map to Profile drop-down menu.
Step 6:
Define the duration of time for the timer by specifying the time to elapse in the Elapsed
Time Field. Select the Days, Hours and Minutes in the drop-down lists provided.
302
CONFIDENTIAL
Step 7:
Select an attribute you want to relate to the timer from the Relative to Date
Attribute drop-down list provided. Note: The Relative to Date Attribute drop-down
list contains commerce Date Type attributes that have been added to the data columns.
To view a commerce date attribute in this list, please add the date attribute to the data
columns. See Chapter 16 for more information.
Step 8:
Select a document from the Document drop-down list provided.
Step 9:
Select a modify type action from the Action drop-down list provided.
Step 10:
Click Add. This displays the section where you can define action rules for the step. You
can choose to leave your settings as is (Simple) or you can define an advanced function.
POINTS TO REMEMBER
The system records who performs document actions, including timer actions, in
the change history log. You can create a virtual user solely for the purpose of
performing timer actions.
Profiles define document permissions in each workflow step. The timer action
must be active or hidden in the profile you associate with the timer.
To add email notification or a step transition rule functionality to a timer, you can
add transition rules to the profile associated with the timer.
Timers can perform actions up to 99 days after the date defined by the date.
Timers are created in an inactive, pending state.
A Timer Action is always performed AFTER THE DATE specified by the Relative
to Date Attribute. A timer cannot be set up to occur before a date.
REMEMBER: Permission to timer actions is based on profiles, not the user
account used to perform the action. As long as the timer action is active in the
profile associated with the timer, the user will have permission to perform the
timer action.
CONFIDENTIAL
303
COMMERCE WORKFLOW
Step 11:
Click Apply to save the changes you made.
15.7: TIMERS
304
CONFIDENTIAL
16
TRANSACTION MANAGER
In This Chapter:
When the Transaction Manager is open, four different sections are displayed:
1. View Manager
2. Folders
3. Process Actions
4. Process Manager Columns.
OVERVIEW OF TRANSACTION MANAGER PAGE:
CONFIDENTIAL
305
306
CONFIDENTIAL
TRANSACTION MANAGER
CONFIDENTIAL
307
The Edit User Permissions window will pop-up. Here you can choose from a list of company and
user types, internal groups and external groups for whom you want to restrict access. Use the
arrows to hide and un-hide a groups access.
POINTS TO REMEMBER
On the Edit Data Column page, you can see the attribute type of the attribute
mapped. You can also see the names of the Process Managers that are mapped
to this data column
Data columns cannot be deleted after they are created, however you can remap
them to a different attribute.
Report/Search results are only run on the condition filter attributes that the
user has access to in the data columns. The fullaccess user must be aware that
shared reports/searches might yield erroneous results for certain users if these
users have been restricted from data columns that are used as condition filters
in the shared reports/searches.
Tab Labels are always visible to every user even if this attribute is mapped to a
data column that is hidden from the logged in user.
After creating new Data Columns, you must DEPLOY your commerce process.
308
CONFIDENTIAL
In order to get started, navigate to the Process Manager Columns list page: Commerce and
Documents > Process Definition > Select a Process > Process Manager > List
From this page, you can add, delete, edit, re-order and map columns. Process Manager columns are
displayed in the Transaction Manager in the order that they are maintained on this page, so make
sure that you have set the correct order and click Update. Click on a Column Name in order to
edit it or click Column Mapping to map attributes to columns.
Be careful when deleting columns because it is not possible to recover deleted data. Upon
deletion, all associated column mappings are also deleted. After a process is deployed, you will no
longer be able to delete Process Manager columns and you must contact an engineer for support.
Step 1:
From the Process Manager Columns page, click Add.
Step 2:
In the Label field, enter the Column Name you would like to display in the Transaction
Manager and Click Add or Update to return to the Process Manager Columns page.
Step 3:
Click on the Column Mapping link. Column mapping links specific document fields
to the data columns. The fields then auto-populate the column whenever a document is
generated. For each document, you can map one or more document attributes.
CONFIDENTIAL
309
TRANSACTION MANAGER
Step 4:
In the General tab, select from the Available Data Columns drop-down menu and
click the greater than sign (>) to move the attribute to the Columns Contents list box.
Once you have added all of desired columns, use the arrows to reorder the added
attributes.
Step 5:
Click Add Blank to insert a blank line in the columns. This is useful when you want to
align document attributes across columns containing different numbers of attributes.
Step 6:
Click on the Properties tab. This displays the attributes that have been added to in the
Column Contents list box. For each, you can select the Link to detail page check box to
confirm that the variable should be displayed as a link to the document of origin.
POINTS TO REMEMBER
If no Data Column Mapping are available, then no Process Manager Columns can
be mapped. In that case, the Transaction Manager will show just the ID# of the
quote created.
Multiple attributes can be displayed in the column in the Transaction Manager by
mapping one Process Manager Column to multiple data columns.
New Columns and mappings appear in the Transaction Manager after the process
has been deployed.
Process Manager columns are displayed in the order that they are maintained on
the Process Manager Columns page.
310
CONFIDENTIAL
Transaction Manager:
What youll see in the Transaction Manager are your columns and they contain the values of the
attributes you have mapped to them.
Action Name
Variable Name
Copy
_action_process_resubmit
_action_process_email_print
_action_process_print
Forward
_action_process_forward
Move
_action_process_move
New Transaction
_action_new_transaction
Open Quote
_open_quote_process
CONFIDENTIAL
Description
Enables users to duplicate commerce
transactions. Multiple copy options can be
offered to users, permitting people to copy
up until a certain point in a transaction.
Enables users to access email-friendly
document formatting.
Enables users to access printer-friendly forms
for printing.
Enables users to forward commerce
documents to users or groups
Enables users to move documents into
different folders. A move action appears
as a button next to a drop-down list box
containing folder names.
311
TRANSACTION MANAGER
COPY ACTIONS
The Copy process action permits users to define how much of a transaction is copied when the
action is performed.
You can offer different copying options to different user types. This flexibility is possible through the
use of an administration component called copy action sequences.
During the copy process, the system displays a copying in progress status page. When the process
completes, the new transaction opens.
When you click on the Copy Action from the Process Action List page, you will be able to edit
information on three tabs: General, Initialization and Process Views.
General Tab:
You can edit the label, description and visibility. The Variable Name is system-generated and cannot
be edited. Select either Show or Hide to display or hide the display of this button on the Transaction
Manager page.
Initialization Tab:
Click the Initialization tab to specify how to populate attribute values in documents copied from
other transactions. Initialization rules are used to administrate how the system should set document
attribute values when a user copies a transaction. You can set initialization rules for each document
attribute in a commerce process. When this tab is open, all the attributes contained in the
document are shown. For each document, set how you want to initialize the individual attributes:
Define Function: Click the Define button corresponding to the attribute and use the Script
Editor to set a value for the attribute.
312
CONFIDENTIAL
Use Specified Value: This option lets you hard-code an attributes value in the text field.
Revert to Default: When the Revert to Default option is enabled, the system uses the
default value set for the attribute itself. This option is useful for picking up the systems
current date and time.
Copy from Original: This option means the system will set the attributes value using the
value set in the original document. When this option is used, mapping settings associated
with the create document action are not used.
CONFIDENTIAL
313
TRANSACTION MANAGER
The Process Views tab displays a list of all of the currently active or inactive process views based
on Steps and Participant Profiles. Use the radio buttons to determine if youd like to keep the
Process Views Active, Inactive or Hide them.
Step 2:
Click Add. If you are editing a sequence, click on the Sequence Name.
Step 3:
Enter a Name and Description of the Sequence. This field should describe the
purpose of the sequence to the end user.
Step 4:
Select the document actions you want to system to perform for the Copy action.
Step 5:
Click the greater than (>) sign to move the selected document to the Selected Actions
box.
Step 6:
Once all of the actions have been selected, use the Up and Down arrows to re-order
them as desired.
Step 7:
Assign Access Rights by selecting the Company Type and User Types that should be
able to perform the Copy action. Click the (>) button to move users to the Selected
Users box.
Step 8:
Click Add to add, save and return you to the Copy Sequence List page.
314
CONFIDENTIAL
POINTS TO REMEMBER
The last document action performed by the user for a copy action should leave
the document in a step where data can be saved. If the copy process takes
the transaction through to the end, without letting the user perform a save
(modify) type document action, the document will not be saved on the system.
The sequence name and description should distinguish one type of copy action
from another.
When configuring the system to copy two documents in a transaction, the
Create Document type action must be included in the action sequence so
the system can generate the second document.
General Tab:
The General Tab is the same as described in Managing Copy Actions (p. 119).
XSL Views:
These actions can be associated with on or more XSL views. If multiple XSL views are made
available with the action, users can select the email form they want to use.
CONFIDENTIAL
315
TRANSACTION MANAGER
The XSL Views tab is used to link XSL Stylesheets to print and email process actions. In order to
link XSL Stylesheets with these actions, the XSL files must be developed offline and then uploaded
into the XSL administration area.
Process Views:
The Email and Print actions can also be displayed based on the process view tab settings or their
visibility settings. The Process View Tab Settings will control the visibility of both actions based on
every step of the transaction. The visibility setting of these actions will allow it to be always hidden or
always displayed. The Email and Print action buttons appear as buttons on the Transaction Manager
page.
FORWARD ACTION
The Forward action enables users to forward commerce documents to users or groups configured
in the Users Administration and Groups Administration areas. The user that the transaction is
forwarded to received the same access rights as the user that forwarded the transaction. When you
click on the Forward Action from the Process Actions list page, you can edit information on three
tabs: General, Modify and Process Views.
General Tab:
The General Tab is the same as described in Managing Copy Actions.
Modify Tab:
The Forward action provides a modify tab, which can be used to initialize attribute value settings for
every document in a process, at the time the transaction is forwarded to users or groups.
Process Views:
The Forward action can also be displayed based on the process view tab settings or their visibility
settings. The Process View Tab Settings will control the visibility of the action based on the step
of the transaction. The visibility setting of these actions will allow it to be always hidden or always
displayed.
MOVE ACTION
The move action enables users to move documents between folders. The only information that can
be edited is what is typically found within the General Tab: Label, Description and Visibility.
New Transaction Action:
The New Transaction action enables users to create a new commerce transaction without first
having to add a line item. This action can be made visible based on access rights set up using a
combination of company types and user types. Only the label, description, access rights can be
edited for this action.
316
CONFIDENTIAL
This action enables users to open documents listed on the Transaction Manager page.You can choose
the document attribute you want users to click to trigger this action. When you click on the Open
Quote action from the Process Action list page, you will be able to edit information on three tabs:
General, Modify and Process Views.
We have covered how to edit each of these tabs, however on the General tab, the Visibility option
has been replaced with Modify Options. You must select either:
Modify and Save
Modify Without Saving
CONFIDENTIAL
317
TRANSACTION MANAGER
OPEN QUOTE:
These search filters are created in the View Manager. View Manager will be made available for every
commerce process in the system. The user can save searches for future use, copy them, forward
them or export them as .xls files. Saved searches are known as Views. The maximum number of
saved views is 20.
You can access the View Manager from the Transaction Manager page.
1.
2.
3.
4.
View Manager
Folders
Process Actions
Process Manager Columns
Managing Views
Step 1:
From the Transaction Manager page, click Manage under the Views header.
Step 2:
Select attributes you will like to use to filter the search results
318
CONFIDENTIAL
Step 4:
Select the Column Attributes. The attributes you have selected will be the columns
displayed on the View Results page.
TRANSACTION MANAGER
Step 5:
In the Search Editor, select the number of results to display per page.
CONFIDENTIAL
319
Step 6:
Select a Comparator and enter a Value for each filter attribute. Lets say youd like
to search for all quotes that have been issued for BigMachines, that are NOT closed and
that are from your Sales Rep Tim Robbins:
Step 7:
There will be four buttons displayed: Previous,View Manager, Search and Close.
Click Previous to go back and reselect filter inputs or change input values.
Click Close to close the pop-up box without saving your View.
Click View Manager to return to the View Manager list page.
Click Search to begin your search.
Step 8:
After you click Save As View, you will be taken to a screen when you can name and
Save your View. Once your search is saved, you can click Back to return to the Search
Editor.
320
CONFIDENTIAL
TRANSACTION MANAGER
CONFIDENTIAL
321
322
CONFIDENTIAL
17
PROCESS INVOCATION
In this Chapter:
Invocation Actions
Invocation Rules
Assign User Access Rights
Catalog Page Reference
Multiple Invocations
PROCESS INVOCATION
The image below is a visual representation process invocation. Process Invocation enable you to
create buttons that link product catalog pages with commerce processes
CONFIDENTIAL
323
Process Invocation can be found under the Commerce and Documents section of the Admin Home
Page.
Once you have clicked on the Process Invocation link, you will be taken to what is called the Page
List. This page displays a list of the catalog pages currently available along with details about whether
or not they are Multiple/Single Types, their Attributes, and the date and time the pages were Last
Deployed
From this page, you can manage all of your invocation rules for the pages listed. To set-up a
commerce invocation rule, you will have to click on the Page Title. Doing so will open up the Actions
List page. This page displays the invocation actions that have been created for the selected catalog
page. From this page you can add, edit, or delete an action. You can also set user access rights and
create invocation rules from this page.
CONFIDENTIAL
Step 4:
Click Add. This takes you back to the Action List page for managing invocation actions with
the name of the new action displayed in the list.
POINTS TO REMEMBER
CONFIDENTIAL
325
PROCESS INVOCATION
Step 2:
Enter a Name and Description for the rule.
Step 3:
By default, the Rule Type is selected as Simple. Simple rules take you to a single commerce
process.
Step 4:
Select the radio button corresponding to the commerce process you want to add products
to when a user clicks an invocation button.
Step 5:
Click Add. This refreshes the page and displays the options as described in Editing an
Invocation Rules page (see below).
POINTS TO REMEMBER
It is not possible to recover deleted button rules.
Multiple rules can be created for a single action button when the button should
go to different commerce processes based on the same condition.
326
CONFIDENTIAL
PROCESS INVOCATION
Step 5:
Select a group from the Group List drop-down menu.
Step 6:
Click the greater than sign (>) button to move the selected group to the Selected
Groups list box.
Step 7:
Repeat steps 2-6 until you have assigned the appropriate user types and groups to this
profile and click Apply to save your changes.
POINTS TO REMEMBER
User type assignments take effect after the button is deployed.
CONFIDENTIAL
327
The table below lists all the available catalog pages in the BigMachines system. The marked page
names are the most commonly used pages.
PAGE NAME
*Part Search Results*
DESCRIPTION
The Part Search Results page displays a list of parts, after a
user has conducted a parts search.
*Part Display*
The Part Display page displays part details. This page appears
if a parts search results in a single part or if a user clicks a
part number from the Part Search Results page.
Part Associations
Model Profile
*Model Configuration*
Recommended Spares
*Favorites List*
The Product Line Compare page is used to display a sideby-side comparison of product lines. Users can access this
page from the Product Line List page, after selecting a set of
product lines to compare.
328
CONFIDENTIAL
PROCESS INVOCATION
CONFIDENTIAL
329
330
CONFIDENTIAL
18
SHOPPING CARTS
In This Chapter:
Introduction
Enable Shopping Cart
Invoke Shopping Cart
Navigation Menu
User-Side Functionality
CASE:
You have a sales team member who would like to
create a quote with multiple configured models and
some after-market parts. He would also like to have
the ability to change the quantities of items before
adding them to a commerce transaction.
BigMachines 10 enhances the e-commerce capabilities
of the application by providing new Shopping Cart
functionality that allows users to add multiple products
to a shopping cart before checking out. This new
feature also allows the quantities of non-mandatory
items to be modified before check-out. There is also
the ability to add items to an existing quote from the
shopping cart.
In order to make this feature available for your sales
team, you will have to learn how to enable, configure
and invoke a Shopping Cart.
CONFIDENTIAL
331
HIGHLIGHTS:
Shopping Cart displays the quantity, description, price
and total sum of items.
Add multiple products to the shopping cart before
check-out.
Ability to selectively check-out items from the
shopping cart.
Displays total number of items in the cart and their
prices.
Upon check-out, products in the shopping cart
are displayed as line items in a new commerce
transaction.
332
CONFIDENTIAL
Step 3:
In order to configure the Shopping Cart, make sure the Enable Shopping Cart box is
checked.
Description
CONFIDENTIAL
333
SHOPPING CARTS
Now that you have enabled the Shopping Cart, you will be able to configure it based on your
preferences. You can change the label o the cart buttons and you can also determine where you
would like to display the cart total, if you choose to display it at all. Refer to the table below for
your different options:
The final steps of enabling the Shopping Cart involve customizing the columns of the cart. You can
edit the text and the layout of the Shopping Cart. You can drag & drop the columns into the order
you would like to have them appear. Their are four editable columns: Label, Editable, Alignment and
Width. The three columns available in the Shopping Cart are:
Column
Description
Description
Price
Quantity
334
CONFIDENTIAL
Step 3:
Determine the alignment of the labels (left, right or center).
Step 4:
Determine the width of the columns. You have two options: Auto and Pixel. If you check
Auto, then the columns will auto-size. Otherwise, you can customize the width of the labels
by entering the Pixel size of each column.
Step 6:
Remember to click Save to save the changes.
SHOPPING CARTS
POINTS TO REMEMBER
Description and Price fields cannot be edited by the user. These are based on Model
Names and Part Numbers.
There is only one Shopping Cart available per commerce process.
Be default, the Shopping Cart is disabled.
Shopping Cart is session-based, therefore the user will lose all cart contents if he logs
out.
Now that you have enabled your Shopping Cart, the next step will be to create the invocation
actions and rules.
CONFIDENTIAL
335
USER-SIDE PAGE
Part Search Results
Part Display
Part Association
Model Profile
Model Configuration (End Flow)
Recommended Items
Favorites List
Bill of Materials or Serial Number
Multiple Parts Buy
In order for the Add to Cart button to appear on a page, you will have to follow these steps for
EACH page. Lets begin with the Model Configuration page.
Step 5:
Select Action Type: Shopping Cart and click Add.
336
CONFIDENTIAL
After you have created your new Add to Cart action, you will need to assign User Access Rights.
Determine which users will have access to the Shopping Cart based on Company Type and User
Type.
See the article Shopping Cart Invocation Administration in http://help9.bigmachines.
com for more details on assigning User Access Rights.
Back on the Actions List page, under the Navigation menu for Add to Cart, select Rules and then
click List. This will bring you to the Invocation Rules page.
CONFIDENTIAL
SHOPPING CARTS
Step 5:
Click Apply to save your changes. Click Update to return to the Action List page.
337
After you have created all of your invocation actions and rules for each page you would like to have
access to the Shopping Cart, you must deploy the pages and commerce processes.
Finally, make sure to deploy your commerce processes. This can be done from your Quick Links.
POINTS TO REMEMBER
If you multiple commerce processes, you will have to create individual invocation rules for
all of them.
Dont forget to assign User Access Rights!
Remember to deploy each Page as well as each commerce process for which you created
an invocation rule.
If you can see Add to Cart buttons in some areas of configuration, but not others, verify
that a process invocation is set-up for the desired areas and that you have assigned User
Access Rights.
DEPLOY!!
338
CONFIDENTIAL
Step 6:
Click Update to save changes and return to the main page.
339
SHOPPING CARTS
Step 5:
Configure your link as necessary. Determine if you would like to display the link as a tab or a
link, if you would like it to display a label, icon or both and where you would like the icon to
be placed.
340
CONFIDENTIAL
The View Cart panel displays the current cart items. The panel is a floating, in-line panel which is
shown whenever a user clicks on the View Cart link or Add to Cart button.
OVERVIEW OF THE SHOPPING CART (USER-SIDE)
Element
Description
Cart Total
This displays the total value of the items in the cart. This is
a simple sum and cant be edited.
Expand/Collapse Icon
Quantity
Description
Price
Delete Icon
Clear Cart
Hide Cart
Check Out
SHOPPING CARTS
CONFIDENTIAL
341
342
CONFIDENTIAL
19
REPORTING
In This Chapter:
Report Manager Overview
Report Builder - Filters
Report Builder - Display Columns
Charts
Run Reports
Schedule Reports
Calculated Columns
CONFIDENTIAL
343
There is one Report Manager available for each commerce process. Using this page, you can add,
delete, edit, run, share, schedule and store reports.
Field or Action
Delete
Edit
Report Name
Description
Last Modified
Shared
Run
Schedule
Add
Update
Stylesheet
Refresh Reporting Data
Description
Click on the delete icon next to the report(s) you wish to delete.
Click on the edit icon next to the report youd like to edit.
Report Name label.
Write a description of the report by clicking into the Description field.
Time stamp for the last time the report was updated or edited and saved.
Check this check-box to make your report available to other users.
Click the run button to generate the report.
Click the schedule icon to open the Schedule Report editor and determine how
often to run the reports and to whom the system should email it. See Recipe 19.6.
Click the Add button to create a new report.
Click Update after making changes to the description or checking/un-checking the
Shared option.
Click Style Sheet to open the Reporting Style Sheet Editor.
Click Refresh Reporting Data to refresh the reports with the most up-to-date
information.
FOLDERS
You can create folders to store your reports.
344
CONFIDENTIAL
Step 2:
Click Add Folder from the Admin Folders pop-up.
Step 3:
Enter the Folder name in the text box.
Step 4:
Click OK to save the changes or Cancel to return to the Report Manager.
REPORTING
Note: To edit a Folder, click the Pencil icon. To delete a Folder, click the Delete icon.
ADDING REPORTS
As you saw in the table on the previous page, you can Add reports directly form the Report
Manager.
CONFIDENTIAL
345
Step 2:
Decide if youd like to build a new report or build a report based on an existing search
view.
Step 3:
Click OK to open the Report Builder.
Step 4:
Enter the name of the report and begin customizing your report.
346
CONFIDENTIAL
Step 2:
Use the drop-down menu next to Date Filter and select an option (Date Created, Date
Last Modified, Expiration Date, etc. )
Step 3:
Select the Duration, or time frame, for the quotes youd like in your report, which can be
selected from the drop-down menu. If you choose Custom, you can use the text box or the
date picker to select a custom range of date and time.
Step 4:
Click the arrow next to Advanced Filters or the Pencil icon next to the filter description to
create or edit the filter.
Step 5:
Click the Add Row button to add a filter row.
CONFIDENTIAL
347
REPORTING
Step 6:
Select an attribute from the drop-down menu. Theses are the quote-level attributes that
are mapped to Data Columns, as discussed in Chapter 16.
Step 7:
Select an Operator from the drop-down menu and then enter a static value for the
attribute in the Attribute Value text box.
Step 8:
Repeat Steps 5-7 to add additional filters.
Step 9:
Determine the Row Grouping for the Advanced Filters. Select AND ALL to require that
all attribute conditions must be included to run the report. Select OR ALL if just one of the
filter requirements must be met to run the report. You can also use a combination of AND
and OR with parentheses to customize the row grouping.
348
CONFIDENTIAL
CONFIDENTIAL
349
REPORTING
350
CONFIDENTIAL
Grouping
If you have decided to Group attributes into rows, they will be removed from the Display Columns
header and placed below them. You will then be given the options to sort in Ascending or
Descending orders. Depending on the attribute, you may also see options to Group By certain
specifics. If you notice the example below, there is a Group By Drop down menu for Group 1
which contains options such as grouping by day, week, month, quarter, year and more.
Grouping becomes very important if you plan on adding charts to your report. See Recipe 19.4
for more details.
19.4: CHARTS
Once you have created your report using the Report Builder, you can either run the report as
is or you can add graphic representation in the form of charts. There are multiple chart forms
available: Vertical Bar, Horizontal Bar, Pie, Line and Gauge. You can use a Chart Builder, Additional
Settings and Preview section to assist in the creation of visually appealing graphics.
Chart Builder
Chart Builder is the section where you select if youd like to include a chart, which kind of chart
youd like to show and actually build the chart based on the attributes you selected in the Report
Builder.
CONFIDENTIAL
351
REPORTING
The vertical bar, horizontal bar and line charts are used as graphical representations of data using
bars, columns or lines to compare data. They all share the same Chart Builder and Additional
Settings options.
Options
Description
Include Chart
Chart Type
Use the drop-down menu to select the vertical bar, horizontal bar, or line chart.
X-Axis
Use the drop-down menu to select which attribute will be represented by the x-axis. This
selection will also be the axis name on the chart. If you have grouped your attributes in rows,
these will be available for use.
Y-Axis
Use the drop-down menu to select which attribute will be represented by the y-axis. This
selection will also be the axis name on the chart. Aggregates and calculated columns will be
available for use.
Layout
Determine if youd like the data to be displayed Ungrouped, Grouped or Stacked. See the images
below this chart for details. If you select Grouped or Stacked, the Group option below will be
displayed.
Group
Select which group youd like to group or stack the data by. Remember, these are the same
attributes available for the x-axis. You cannot group by the same attribute you selected to use
on the x-axis.
Chart Position
19.4: CHARTS
Colors [to]
Determine if youd like the chart to be displayed on the top or the bottom of the report.
Select colors to represent the spectrum of data on the x-axis and y-axis. The first value you
select will represent the first piece of data and the second color will represent the final piece of
data on the report. The system automatically selects comparable colors for the data in between.
GROUPED
STACKED
UNGROUPED
352
CONFIDENTIAL
Additional Settings
Additional Settings is the section where you select chart options, such as the size, the Title, the
axis text and if youd like to include a legend.
Settings Option
Description
Size
Select the display size of the chart from the drop-down menu: Small, Medium,
Large or Extra-Large.
Title
[Title Color]
Enter a HEX(hexi-decimal) color code into the text box, or click on the color to
open a color selector. Use this to select the appropriate color and gradient for
the title text.
Axis Text
Select the font youd like the axes to be displayed in from the drop-down menu:
Courier, Helvetica, Times New Roman or Arial Unicode MS.
[Axis Color]
Enter a HEX(hexi-decimal) color code into the text box, or click on the color to
open a color selector. Use this to select the appropriate color and gradient for
the title text.
REPORTING
[Title Font]
Legend
Show Values
3D
Determine if youd like to display a legend. If so, use the menu to decide if it
should be below the chart or to the side of it.
Select the check-box if youd like to display the data labels directly on the chart.
Select the check-box if youd like to display the chart in 3D. This option is not
available for the line graph.
Use the preview section to reflect any changes you make on your chart.
CONFIDENTIAL
353
PIE CHARTS
Pie charts work well when you are trying to graphically represent the proportion of values as they
add up to the total. For example, if youd like to see quote totals from the last 30 days, you can see
the entire total represented and which quotes make up the largest and smallest pieces of the pie.
19.4: CHARTS
Chart Builder
There are a few differences between the Chart Builder seen for Vertical Bar, Horizontal Bar and Line
charts.
Options
Include Chart
Chart Type
Values
Sections
Chart Position
Colors [to]
Description
Click the check box to include a chart with your report.
Use the drop-down menu to select the vertical bar, horizontal bar, or line chart.
Use the drop-down menu to select which attribute will be represented as a value in the pie
chart. If you have grouped your attributes in rows, these will be available for use.
Use the drop-down menu to select which attribute will be represented as a section of the pie
chart. Aggregates and calculated columns will be available for use.
Determine if youd like the chart to be displayed on the top or the bottom of the report.
Select colors to represent the spectrum of data on the x-axis and y-axis. The first value you
select will represent the first piece of data and the second color will represent the final piece
of data on the report. The system automatically selects comparable colors for the data in
between.
Additional Settings
The additional settings section is exactly the same as the one used for Vertical Bar, Horizontal Bar
and Line Charts.
GAUGE CHARTS
Gauges are used to track key performance indicators for a business to measure success. They are
often used at the executive level and are frequently used in dashboards. Gauges are often set with
a target or a range in mind. The black needle on the dial indicates the current value of the attribute
(or key performance indicators). For example, you can set a sales goal for the year, then you can also
set mid-point ranges to represent sales targets by quarter.
354
CONFIDENTIAL
Chart Builder
There are many new options available to you when creating a gauge.
Description
Click the check box to include a chart with your report.
Use the drop-down menu to select the vertical bar, horizontal bar, or line chart.
Aggregate
Use the drop-down menu to select which attribute will be represented in the gauge.
Aggregates and calculated columns are available for use.
Chart Position
Determine if youd like the chart to be displayed on the top or the bottom of the
report.
Minimum Value
Low Color
Low Breakpoint
Mid Color
High Breakpoint
High Color
Maximum Value
Enter a HEX(hexi-decimal) color code into the text box, or click on the color to open
a color selector. Use this to select the appropriate color and gradient for the low
range.
Set the first range breakpoint.
Enter a HEX(hexi-decimal) color code into the text box, or click on the color to open
a color selector. Use this to select the appropriate color and gradient for the medium
range.
Set the second range breakpoint.
Enter a HEX(hexi-decimal) color code into the text box, or click on the color to open
a color selector. Use this to select the appropriate color and gradient for the high
range.
Set the maximum value for the attribute.
Additional Settings
The additional settings section for gauges is similar to those found in the Vertical Bar, Horizontal
Bar and Line Chart sections, except that the options to display the Legend and to display the gauge
in 3D arent available.
CONFIDENTIAL
355
REPORTING
Chart Type
When you have finished creating your reports and charts, its time to run it! Click on the GREEN
Run Report tab.
From here you can create an additional date filter. Use the drop-down menus for Date Filter (Date
Created, Expiration Date or Date Last Modified) and for Date Duration (Custom, Last 30 Days,
Current Quarter, etc.)
Click Run Report again to see the report and the chart that you created!
356
CONFIDENTIAL
If the report that was generated meets your requirements, you can save, email or export the
report to Excel. The report actions are located just next to the report name:
Action
Description
Save
Export to Excel
Back
Email
Clicking on the Email button will display the following pop-up window:
REPORTING
Complete the two required fields (marked by an *) and click Send to email your report and chart.
The file is sent as an email attachment in Excel format.
CONFIDENTIAL
357
To Schedule a Report
Step 1:
Click on the Schedule icon on the Report Manager page.
Step 2:
From the Schedule Report pop-up window, select how often youd like the report to run.
Step 3:
Select the day, month, hour or specific time or date for when you will run the report.
358
CONFIDENTIAL
Step 4:
Enter the email credentials and a subject line for who should receive an email and a report
attachment after the report is run.
As mentioned in Recipe 19.3, you have the ability to create your own calculated columns within
the Report Builder. To create a calculated column, click on the ADD icon next to the Calculated
Column label found under Display Columns.
CONFIDENTIAL
359
REPORTING
Step 4:
Select the attribute(s) that you would like to include in your calculation. This is found in
the Formula Editor section. The attributes that are in this list are the numeric or currency
attributes that you have mapped to Data Columns. Refer to Chapter 16.
Step 5:
Select the aggregate that you will use to calculate the column (i.e.: Average, Count, Sum,
Minimum, Maximum).
360
CONFIDENTIAL
Step 6:
Click the Insert button to add the attribute and aggregate to the script editor.
Step 7:
Use the operator buttons above the script editor to help create your calculation.
Step 8:
Use the drop-down menu under the Functions section to select Logical, Mathematical, or
Summary functions to add to your calculation. Click Insert to add it to the script editor.
REPORTING
Step 9:
Click OK when you have finished creating the calculation to save it.
CONFIDENTIAL
361
APPENDIX A
Test To Production
What is Commerce Test to Production?
Test To Production
Commerce Test to Production provides the ability to easily migrate the changes made to a
commerce process in the test site to the corresponding process on the production site. You can
download the changes from the test site (in XML format) and then upload the same on to the
production site. The Test to Production XML contains the update action tag that allows you to
modify the existing process on the production site.
Process Migration
Please refer to the following chart when referencing what is included in a test to production
migration:
Whats Included
Process Attributes
Accounts
Process Actions
Users
Configuration Rules
Attributes
Configuration Attributes
Actions
Configuration Rules
Library Functions
Parts
Parts Associations
Even though there are items that are not included in a Process Migration, Whats Not Included can
be uploaded/downloaded through the Bulk Upload/Download process discussed in Recipe 3.6.
Before You Begin
1. Prior to starting the migration process, you must verify that the each site is running on the
EXACT same version, including any updates. Refer to Recipe 1.3 for instructions on how to
check the BigMachines version details from the Admin Home Page.
2. If any of the items you are downloading/uploading are greater than 10MB, you will need an FTP
site to complete the upload.
3. The BML functions must match exactly on both the test and production sites. Use the
download/upload manager to download Library Functions. Make sure to keep a back-up
copies from both instances.
Commerce Transactions
Once a transaction is created, it is tied to a specific process definition. Updating a process is fine,
however, changes to the process may cause issues with transactions. It is recommended that you
test legacy transaction within the updated process. If a new process is created, legacy transactions
CANNOT be used because a new Transaction Manager is created. Any transaction in the old
process are lost and cannot be recovered or migrated.
362
CONFIDENTIAL
APPENDIX A
Step 5:
Save the Commerce XML to your local hard drive.
Once you have saved the Commerce XML to your computer, you can begin the migration to the
Production site. The first thing you will need to do is open your production site and navigate to
the Deployment Center for your intended commerce process.
CONFIDENTIAL
363
Test To Production
Step 1:
Click Import Process within the Deployment Center.
Step 2:
Click OK when the dialog box appears.
Step 3:
Use the Upload Files list to upload the ZIP file downloaded from the Test site.
Step 4:
Click Browse to select the ZIP file from your hard drive and click Add.
Step 5:
Select the file in the queue and click Upload.
364
CONFIDENTIAL
After you have uploaded the process, Deploy the new or modified process to make the changes
available on the production site. You can check the status of the upload by navigating to the
Admin Home Page and clicking on View Upload Status. The process upload should take no more
than 15 minutes, even for large processes. If your status is Complete or Failed, it is a good
idea to double-check the log file for any issues or warnings. Please contact customersupport@
bigmachines.com if you run into any problems.
This error will occur if an attribute in the production site with the same variable name has a
different data type. This means that the original attribute has been deleted or another attribute
with the same exact variable name was added with a different data type. To resolve the issue,
delete the attribute on the production site and try the migration again.
[ERROR] Transactions have been removed from process on test site after test site
has been refreshed by production
If you would like to display this error message, a Boolean should be set (transactions_removed_
since_download) when the process is downloaded and then set the value to true if the process
has had the transactions removed. The error message will appear in the upload error log and the
status will read Failed.
[ERROR] Library Function with the same variable name is not found.
This error message will occur when one of the commerce functions call a util library function
which doesnt exist in production. This will require you wo migrate all library functions prior to
the process migration.
CONFIDENTIAL
365
APPENDIX A
[ERROR] com.bm.xchange.util.BMException.log(BMException.ja.va:196) Compilation error: Operand type mismatch(line: 5, column:49): Expected operand
type is Integer [or String]
Test To Production
366
CONFIDENTIAL
APPENDIX A
CONFIDENTIAL
367
BigMachines Application
BigMachines Scripting Language (BML)
20
PROGRAMMING CONCEPTS
In This Chapter:
Programming language
Programming structure
Data Tables
Variable initialization
Language Samples
Basic syntax of BML
If Statements
Examples
Practices Exercises
You will see syntax that is familiar in Java, Basic, Python, and C++, but they arent exactly the same.
By the end of this chapter, you should have a good understanding of what programming language is
and how its used and structured. You should also understand the syntax of BML and have generated
some very basic and functional code.
Highlights of BML
CONFIDENTIAL
371
Language
C
C++
JAVA
Source Code
Write general
instructions
Compiler
Compiles
instructions into
machine language.
Computer executes
machine language
Language
Visual Basic
Perl
Source Code
Write general
instructions
Computer executes
instructions as its
running.
372
CONFIDENTIAL
Integer
Float
String
Boolean
The integer data type allows data to be stored and returned as a whole number. When trying to
assign any value that contains a decimal or a different character, will either round the decimal or
throw an error.
The float data type is also commonly referred to as decimal. This only allows data to be returned
with a decimal.
The string data type will allow text output of any kind to be returned. In BML, string variables will
always be in double quotations ( ).
Boolean data types return either a True or False based on your inputs.
You may also see the element return ;. This is going to return an empty string if there isnt
anything to return. It will not return an integer, float, boolean or array, it will return only a string as signified by the double-quotation marks.
CONFIDENTIAL
373
PROGRAMMING CONCEPTS
//
return
Description
Represents and end statement. This is
required on each line of code.
Indicates a comment line.
This is the beginning of the return statement
which is required at the end of your code.
BML will not process instructions without it.
This function displays all data types in the
console to make debugging easier. You can
give it direct inputs or have it print variables
and results from other functions. It displays
as purple in the Debugger
1. The [//] indicates that the line is a comment and describes the code to the user, without
sending it to the computer as an action.
2. You are declaring your variable in line 3.
3. Line 5 is your return statement. You are letting the computer know that the instructions
are complete and ready to be executed. Anything that occurs after a return statement is
executed will be ignored.
It is considered a Best Practice to add spaces and comments to your code. This
is done to make the code more readable.
20.7:VARIABLE DECLARATION
Variables are placeholders for the data a program may use or manipulate. They are given unique
names so that they can be assigned values and referred to throughout the source code. In order to
use a variable, you must declare it by giving it a unique name.
In many programming languages, once a variable is declared, it must be initialized. However, in BML,
these two steps occur at the same time. The following example shows what your code will look
like when a variable is declared and initialized. For this example, we will be showing string variables
only.
EXAMPLES
String Data Type
Lets assume this is a configuration rule message you have written. Lines 1-3 declare the variables
age, salary, and first_inital.
374
CONFIDENTIAL
The following will returned in the Debugger, which we will cover in the next chapter
PROGRAMMING CONCEPTS
CONFIDENTIAL
375
376
CONFIDENTIAL
If the required return type is Integer, this will return a 6, as it is processed as a regular math
equation. If its a Float return type, it will return a 6.0. However, should your required return
type be a String, the following error message will be returned
This is because all string variables need to be in double quotations. So, lets see what happens if
we put the numbers in quotes:
While in use with integers and floats, the + sign is meant for addition, however when being used
with strings, it is meant to concatenate, meaning it will combine the strings. Therefore, the code
above returns the following:
PROGRAMMING CONCEPTS
CONFIDENTIAL
377
378
CONFIDENTIAL
21
BML FUNCTION EDITOR
In This Chapter:
CONFIDENTIAL
379
Definition of Button
You will run across a few buttons located at the bottom of the editor pane:
Color of Syntax
You will notice that the code below is displayed in different colors
Color
Black
Pink
Aqua
Blue
Green
380
Definition
Variable names, float variables and integer
variables
Numeric Operators
Literals or data types (string, float, integer,
boolean)
Functions and string variables
Conditional functions
CONFIDENTIAL
If we zoom in on the bar across the bottom, you should see the bar that represents the character
position in the code as well as the total number of characters.
The box on the left defines the Position of the character based on its line and index. (Remember
that the character index begins with 0. The box to the right gives you the actual number of
characters in each line.
Use the toolbar above to undo/redo changes, change the font or jump to a specific line in the
script.
will call a search and replace pop-up if you need to find and/or replace part of
CONFIDENTIAL
381
Clicking on the
the script.
In the function editor, you can select attributes to include within your code. These attributes
are specific to the product family that you are working in. For example, when you are in
Configuration you can select from standard product line, model, account, user or configurable
attributes.
382
CONFIDENTIAL
2. To insert the function in your BML function Script Definition Area, click Insert into BML.
3. As you can see, the function populates in the script definition area.
CONFIDENTIAL
383
384
CONFIDENTIAL
You will start in the Input Section, in the upper left-hand corner for the Function Editor. You
should have already added your attributes/parameters under the Attributes tab. Those will show
up in the input section under Action Inputs.
If there is an error in the syntax, an error message will appear ABOVE the tabs.
You may have also noticed that there are a couple of different colors in the Debugger. In Recipe
1.4, we introduced the print function and also return statements. Anything that is sent to the
console using the print function will show up in PURPLE. What you return using the return
statement will show up highlighted in yellow. In the previous example we return an empty string
(using return ), which is why you just see what appears to be a small yellow box.
CONFIDENTIAL
385
1. Click on the corresponding cell in the Value column to select a value for the attribute using
the drop-down list or by simply typing a value into the cell.
2. Click Run to run the function. The result can be seen in the Console section.
3. Click Clear to remove the Value(s) for your attribute(s) as well as clearing the Console.
4. Clicking Expand Console will hide the Input Section of the Debugger.
Commerce Debugger
This is eventually going to be phased out, but there are still many applications and versions out
there that use this.
This Debugger requires that you select at least one variable and then use a Transaction ID number
to import the Values for each attribute you selected. You could also manually enter these values.
Depending on your implementation, you may be able to find it under a tab titled Integration.
Click on the Integration tab and the Transaction ID will be in a text box towards the right of the
screen.
Commerce Library Debugger
There are a number of sub-headings that can be used under the Commerce Library Debugger tab.
386
CONFIDENTIAL
Test Script: Test Script provides a way to test a BML Library function when array type attributes
are input parameters. Within the Test Script, you can populate your own complex data objects and
pass it to the library functions to analyze the results. Test Scripts can also be used to compute
multiple iterations of the library function and print each.
Example of Test Script:
1. Created values for the parameters used in this function.
2. The return statement is written as follows: return.util.function_name(parameters).
CONFIDENTIAL
387
Param: If you defined parameters in the header section, they will appear here for Debugging.
System: This section lists the attributes you added under the System Attribute section. They will
appear here so you can populate/change the parameter values when debugging You can populate
values by double-clicking the Value section next to the attribute(s) of your choice.
Header: This section lists the attributes you added under the Main Document Attribute section.
You can add values by double-clicking the Value section next to the attribute(s) of your choice.
Line Item: This sections lists the attributes you added under the Sub-Document Attribute
section. You can populate values for debugging values by double-clicking the Value section next to
the attribute(s) of your choice.
Common: In the Common Attribute section, click Add to access the common attributes that
are available across the system. For example, suppose your function requires to check the user
type of the logged in user, choose the user type Common Attribute in this section and reference
it in your function.
Util Library
The Util Library Debugger is similar to that of the one shown above in the Commerce Library,
however it contains only the tabs labeled Test Script, Params and Common.
388
CONFIDENTIAL
STANDARD SYNTAX
You will see some standard syntax through this cookbook and the function editor
function(param 1, param 2, param 3, [optional param])
substring(str, start, [end])
Parameter
str
start
[end]
Data Type
String
Integer
Integer
CONFIDENTIAL
Definition
This is the given string for...
This represents the index...
This represents the index...
389
For example
Here is a list of operators that will be used throughout the book. For a list of all operators and
functions, please refer to Appendix A.
Operator
Looks like
==
<number> == <number>
<string> == <string>
<boolean> == <boolean>
<>
<number> <> <number>
<string> <> <string>
<boolean> <> <boolean
<
<number> < <number>
<string> < <string>
>
<number> > <number>
<string> > <string>
<=
<number> <= <number>
<string> <= <string>
>=
<number> >= <number>
<string> >= <string>
<boolean> and <boolean>
<boolean> not <boolean>
<boolean> or <boolean>
equals
not equal
less than
greater than
Numeric operators always return a numeric data type. The following table shows the numeric
operators that can be used in functions.
Numeric Operator
+
*
/
%
390
Meaning
Addition (binary)
Subtraction (binary)
Multiplication
Division
Modulus
CONFIDENTIAL
Looks like
<number> + <number>
<number> - <number>
<number> * <number>
<number> / <number>
<number> % <number>
All numeric operators take numeric values as input and return numeric values as output. Input can
come from numeric literals, numeric identifiers, and numeric functions.
Numeric operators can also be used wherever a numeric value can be plugged in, such as in other
functions, relational operators and expressions. For example:
sqrt (45 + 45)
(3 * 3) + (4 * 4)
(3 + 4) == (4 + 3)
STRING OPERATORS
There is one string operator that can be used to return a string as output.
The string operator + is meant for concatenation and its formation is
<string> + <string>
LITERALS
Literals can be added to scripts following these conventions:
Literal
Integer
Data Type
Numeric
Numeric
String
String
True
False
Boolean
Boolean
Examples
12345
123.45
12345
.345
volume
23 psi
100
True
False
CONFIDENTIAL
391
392
CONFIDENTIAL
22
STRING FUNCTIONS
In This Chapter:
find()
isnumber()
substring()
replace()
len()
atof()
lower ()
atoi()
upper ()
startwith()
trim()
endswith()
CONFIDENTIAL
393
Parameters:
#
1
Parameter
str
Data Type
String
Description
Given input string that must be converted
to uppercase
If the string is empty, then the function will return an empty string
This function is case-sensitive.
394
CONFIDENTIAL
Parameters:
#
1
Parameters
str
Data Type
String
Description
Given input string that is to be parsed
into a float or an integer
CONFIDENTIAL
395
STRING FUNCTIONS
If you try to pass a string with a decimal point (like 123.456) through the atoi() function, you will
see
396
CONFIDENTIAL
Parameters:
#
1
2
Parameter
str
substring
Data Type
String
String
Description
Represents the given input string
Endswith() determines if the given input string ends
with this substring and startswith() determines if this
string begins with this substring.
22.4: LEN(str)
The len() function will return the length of a string.
Example Use Case:
Parameters:
#
1
Parameter
str
Data Type
String
CONFIDENTIAL
Description
Represents the given input string
397
STRING FUNCTIONS
We know that the return of endResults will be true because the string I like this string, ends with
the substring string.
22.4: LEN(str)
Example of len(str)
22.5: ISNUMBER(str)
isnumber() is a Boolean function that returns true when the string is a number and false if it
contains other characters.
Example Use Case:
Check if a table cell contains a number. This check needs to be performed to prevent
system errors when converting that value to a number.
398
CONFIDENTIAL
Parameters:
#
1
Parameter
str
Data Type
String
Description
Represents the given input string
Example of isnumber(str)
STRING FUNCTIONS
22.6 :TRIM(str)
This function removes white space from both edges of strings.
Example Use Case:
399
Parameters:
#
1
Parameter
str
Data Type
String
Description
Represents the given input string
22.4: LEN(str)
Example of trim(str)
You should notice that the string variable contains white space on both ends.
400
CONFIDENTIAL
Parameters:
#
1
2
3
Parameter
str
old
new
Data Type
String
String
String
[n]
Integer
Description
Represents the given input string
Specifies the substring that is being replaced
Specifies the substring that is replacing the old
substring
Optional: Specifies the number of occurrences
of the old that must be replaced
STRING FUNCTIONS
CONFIDENTIAL
401
Parameters:
#
1
2
Parameters
str
substring
Data Type
String
String
[start]
Integer
[end]
Integer
Description
Represents given input string
Required string parameter that specifies the
substring, the position of which this function
will return.
Optional: Can be used to specify the index at
which to begin the search for the substring.
Optional: Can be used to specify the index at
which to end the search for the substring.
402
CONFIDENTIAL
STRING FUNCTIONS
CONFIDENTIAL
403
Parameters:
#
1
2
3
Parameter
str
start
[end]
Data Type
String
Integer
Integer
Description
Represents the original string you are going to parse.
The index where you will begin parsing the string.
Optional: The index where you will stop parsing.
404
CONFIDENTIAL
STRING FUNCTIONS
CONFIDENTIAL
405
406
CONFIDENTIAL
23
NUMERIC FUNCTIONS
In This Chapter:
integer()
round()
ceil()
fabs()
pow()
exp()
fmod()
log()
ln()
sqrt()
hypot()
sin()
cos()
tan()
asin()
acos()
atan()
CONFIDENTIAL
407
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
23.2: ROUND(x)
This function returns the rounded value of a number up to a certain decimal point.
Example Use Case:
408
CONFIDENTIAL
Parameters:
#
1
2
Parameter
x
y
Data Type
Float
Float
Description
Represents a given float parameter
Represents the number of decimals you will
round to.
NUMERIC FUNCTIONS
23.3: CEIL(x)
This function converts a float into the next highest whole number.
Example Use Case:
CONFIDENTIAL
409
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Ceil(num), if num is less than zero but greater than -1.0, then the result is negative zero.
23.4: FABS(x)
Example of ceil(x)
23.4: FABS(x)
This function returns the absolute value of a number.
Example Use Case:
410
CONFIDENTIAL
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Finding the product obtained from multiplying a quantity by itself one or more times.
Parameters:
#
1
2
Parameter
x
y
Data Type
Float
Float
Description
Represents the value of the input float
Represents the power to which you raise the
input float
CONFIDENTIAL
411
NUMERIC FUNCTIONS
pow(x, y)
This function returns the value of the first argument raised to the power of the second argument.
Example of pow(x,y)
23.6: FMOD(x,y)
Find whether a quantity grows or decays at a rate proportional to its current value, such
as compound interest.
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
23.6: FMOD(x,y)
This function returns the remainder after division.
412
CONFIDENTIAL
Parameters:
#
1
2
Parameter
x
y
Data Type
Float
Float
Description
Represents the dividend
Represents the divisor
The answer is 5 with a remainder of 2. If you plug this operation into your calculator, you will see
the answer is 5.66667. That is because the remainder is being divided by the divisor.
log(x)
This function returns the base ten logarithm of the number.
Remember: if x = by, then y=logb(x).
Example:
If 1000=103, then 3=log10(1000). The logarithm of 1000 would be 3 because that is how many
times you must multiply 10 to get 1000.
CONFIDENTIAL
413
NUMERIC FUNCTIONS
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Example of log(x)
ln(x)
This function returns the natural logarithm (base e) of the number.
ln(0) or ln(-0)=infinity
414
ln(infinity)=infinity
CONFIDENTIAL
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Example of ln(x)
NUMERIC FUNCTIONS
CONFIDENTIAL
415
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
hypot(x.y)
This function returns the sqrt(x2+y2) without intermediaries.
Example: sqrt(32+42)=sqrt=(9+16)=sqrt(25)=5.0.
Parameters:
#
1
2
Parameter
x
y
Data Type
Float
Float
Description
Represents the x in sqrt(x2+y2)
Represents the y in sqrt(x2+y2)
Example of hypot(x,y)
416
CONFIDENTIAL
As you can see, we have declared three variables. The two that were required for this function to
work, as well as a third variable so we can round the results of the hypot() function.
The result of this function returned a rather large number. Using the round() function we were
able to round to the third decimal place.
(opposite)
Note:
BML does not accept angle ratios in
degrees. Be sure to convert from
degrees to radians before using the
information in BML.
(adjacent)
sin(x)
This function returns the trigonometric sine of the number/angle.
Example Use Case:
Finding the ratio of the side opposite the given angle and the hypotenuse.
CONFIDENTIAL
417
NUMERIC FUNCTIONS
(hypotenuse)
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Example of sin(x)
cos(x)
This function returns the trigonometric cosine of the number/angle.
Example Use Case:
Find the ratio of the side adjacent the given angle and the hypotenuse.
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
418
CONFIDENTIAL
tan(x)
This function returns the trigonometric tangent of the number/angle.
Example Use Case:
Find the ratio of the side opposite the given angle to the adjacent side.
Parameters:
Parameter
x
Data Type
Float
Description
Represents a given float parameter
CONFIDENTIAL
419
NUMERIC FUNCTIONS
#
1
Remember
The usual notation of the inverse trig function arcsine is, y=arcsin(x), which is defined as x=sin(y).
This notation is the same for arccosine and arctangent.
asin(x)
This function returns the arcsine of a number or angle, the range of which is
-/2 y /2 or -90 y 90 and the domain is -1 x 1
Example Use Case:
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Example of asin(x)
If you enter your float variable as (-1), which is the lowest number in the domain, it will return the
lowest number in the range, which is /2.
420
CONFIDENTIAL
acos(x)
This function returns the arccosine of the number/angle in the range of 0.0 through .
Example Use Case:
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
Example of acos(x)
You should recognize that the number returned is pi.
NUMERIC FUNCTIONS
CONFIDENTIAL
421
atan(x)
This function returns the arc tangent of the number/angle, the range of which is
-/2 y /2
Example Use Case:
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
422
CONFIDENTIAL
sinh(x)
This function returns the hyperbolic sine of the number or angle.
Example Use Case:
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
NUMERIC FUNCTIONS
CONFIDENTIAL
423
cosh(x)
This function returns the hyperbolic cosine of the number or angle.
Example Use Case:
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
tanh(x)
This function returns the hyperbolic tangent of the number or angle.
Example Use Case:
424
CONFIDENTIAL
Parameters:
#
1
Parameter
x
Data Type
Float
Description
Represents a given float parameter
NUMERIC FUNCTIONS
CONFIDENTIAL
425
426
CONFIDENTIAL
24
DATE FUNCTIONS
In This Chapter:
getdate()
isweekend()
isleap()
datetostr()
strtodate()
strtojavadate()
minusdays()
adddays()
getdiffindate()
CONFIDENTIAL
427
24.1: GETDATE()/GETSTRDATE()
This function returns the current date/time based on the base time zone you have set-up.
24.1: GETDATE()/GETSTRDATE()
Parameters:
#
1
Parameter
[includeTime]
Data Type
Boolean
Description
This will include the
hours:minutes:seconds when the date is
returned. The default is TRUE.
24.2: ISWEEKEND(date)
This will determine whether a date falls within a weekend.
Example Use Case:
Parameters:
#
1
Parameter
date
Data Type
Date
Return: Boolean
428
CONFIDENTIAL
Description
Mandatory date parameter
24.3: ISLEAP(year_num)
Using this function will determine whether the date falls within a leap year. The function will
return true if the year provided as a parameter is a leap year.
Example Use Cases:
Parameters:
Parameter
year_num
Data Type
Integer
Description
4-digit Integer that represents the year in
question.
Since the year 2008 was a leap year, the function returns True.
CONFIDENTIAL
429
DATE FUNCTIONS
#
1
24.4: DATETOSTR(date)
This function converts a date to a string.
Example Use Case:
Date fields in commerce are considered string fields so to return a date to a commerce
attribute, you need to convert it to a string first.
24.4: DATETOSTR(date)
Parameters:
#
1
Parameter
date
Data Type
Date
Description
Mandatory date parameter
430
CONFIDENTIAL
Parameters:
#
1
2
Parameter
str
format
Data Type
String
Date Format
Description
String format of a date
Specifies the format that the date is in.
Date Format:
Day
Month
Year
Hour in Day (0-23)
Hour in Day (1-24)
Hour in am/pm (0 - 11)
Hour in am/pm(1-12)
Minute
Second
dd
MM
YY
HH
Kk
KK
Hh
mm
ss
If str is empty string, then this method throws an exception, unlike strtodate() method.
The format strings supported are different from the ones supported by strtodate()
function.
431
DATE FUNCTIONS
The format of the return text is YYYY-MM-DD HH:MM:SS, the same as the strtodate() function.
Parameters:
#
1
2
Parameter
date
num_of_days
Data Type
Date
Integer
Description
Represents the given date.
How many days you want to subtract from
given date.
Often used in commerce to set the time a quote is valid, or when it expires.
Parameters:
#
1
2
Parameter
date
num_of_days
432
Data Type
Date
Integer
Description
Represents the given date.
How many days you want to subtract from
given date.
CONFIDENTIAL
DATE FUNCTIONS
Parameters:
#
1
2
Parameter
date 1
date 2
Data Type
Date
Date
CONFIDENTIAL
Description
Mandatory Date Parameter
Mandatory Date Parameter
433
434
CONFIDENTIAL
DATE FUNCTIONS
CONFIDENTIAL
435
436
CONFIDENTIAL
25
CONDITIONAL FUNCTIONS
In This Chapter:
if
ifelse
forloop
break
continue
CONFIDENTIAL
437
What this is saying in plain language is If (condition) is true, then perform the statement. If that
condition is false, then no action is taken.
Example of if...
This is a very basic example, saying that if the variable string is a number, then we want to convert
it to a float.
In this case, 25 is a number, so we used function atof() to convert the string to a float.
if (condition){
statement;
}else{
statement;
)
So, its saying, Do something if the condition is met. If not, do something else.
You can also have multiple else statements nested within on another.
438
CONFIDENTIAL
Example of if...else
We are saying, if the var=25 is a number, then convert the string to a float. If its not an number,
print NaN (which represents not a number).
The variable represents the element, but you can label however you want. You can call it each or
element or even your name if you wanted to.
Lets think of a table of values that we will name: Table_Array
Row 1
Column 1
1
CONFIDENTIAL
Column 2
2
Column 3
3
439
CONDITIONAL FUNCTIONS
25.3: FOR...LOOP
25.3: FOR...LOOP
So, the code is going to loop through the integer array we have defined and print every element
that is in this 1-D array.
Row 1
Row 2
Row 3
Column 1
Column 2
0
1
2
3
4
5
We are going to cover 2-D arrays in extensive detail in Chapter 26, but this is for your reference.
You will have use a loop within a loop in order to return the row values and the column values.
440
CONFIDENTIAL
So, what we will see is that for each row, it will print a row (Row 1 will return [0,3]), after it loops
through and pulls the value for the row, its going to loop through the row and pull the values for
the columns, returning to you the individual values of 0 and 3.
25.4: BREAK
Example of break
We are going to use a simple 1-D string array. As it is being looped through, we would like it to
stop if and when it reaches the element ccc.
CONFIDENTIAL
441
CONDITIONAL FUNCTIONS
Using this function will break a forloop at the element that you ask it to.
25.5: CONTINUE
As you can see, we are still using the same string array and for loop in the first two lines.
However, we have added an if statement to the third line, which says that if the loop approaches
the element ccc in the array, that it should break.
25.5: CONTINUE
The continue action calls out an element from an array, and essentially skips it, but continues
looping through the rest of the array.
Example of continue
In Recipe 25.4, the break stopped the loop, but in this case the loop continues through the rest of
the array, it just skips over the element ccc.
442
CONFIDENTIAL
CONDITIONAL FUNCTIONS
443
CONFIDENTIAL
25.5: CONTINUE
444
CONFIDENTIAL
26
ARRAYS AND ARRAY FUNCTIONS
In This Chapter:
Overview of arrays
range
sizeOfArryay
append()
remove()
sort()
max()
min()
findinarray()
reverse()
isempty()
replace()
split()
join()
Value
1
Index 0
Value
2
Index 1
Value
3
Index 2
Value
4
Index 3
Value
5
Index 4
Value
6
Index 5
Value
7
Index 6
Value
8
Index 7
Value
9
Index 8
There are also 2-dimensional arrays. These arrays can be though of as a grid or a table with multiple
rows and columns. The convention for defining and accessing these arrays is [row, column].
Col 1
Col 2
Col 3
Variable 1
Variable 2
Variable 3
We can see that for the data set {Variable 2, Col 3}, the value is 1 and the index for this would be
index[1][2].
CONFIDENTIAL
445
What you see above would be a typical array configuration. In this example, the user had selected
that 3 floors needed to have their elevators configured. From this one screen, you can individually
configure each elevator. As you can see, each one has a different combination of door type, door
trim and buttons.
Control Attribute
The size of arrays are defined by the control attribute. When creating a control attribute, the
attribute itself must have a Data Type of integer and you must make sure that the Array Type box
is not checked. In the case below, the user wants to configure 27 floors. Number of Floors is the
control attribute for the array.
446
CONFIDENTIAL
1
Stone
2
Blue
3
Red
1
Stone
Painted
Shiny
2
Blue
White
Easy
3
Red
Stained
Plastic
Meaning
Indicates a 1-D array
1-D array with a defined size
Element within a 1-D array
Element
[][]
[n][n]
{{x,y},{z,r}}
Meaning
Indicates a 2-D Array
2-D array with defined size
Elements within a 2-D array
Limits
For a 1-D array, the maximum number of columns that you can have in an array is 1000.
For a 2-D array, the maximum number of rows an array is 1000 and columns is 50.
Indexes
In a 1-D array, the following represents your index values:
ROW 1
Index 0
Index 1
Index 2
Index 3
Index 4
Index 5
Index 6
Index 7
In a 2-D array, your index values will represent both the row index and the column index, so the
basic syntax will be index[row][column]. A simple 3x3 table will have the following index values:
ROW 1
ROW 2
ROW 3
COL 1
COL 2
COL 3
Index [0][0]
Index [1][0]
Index [2][0]
Index [0][1]
Index [1][1]
Index [2][1]
Index [0][2]
Index [1][2]
Index [2][2]
CONFIDENTIAL
447
#
1
2
Parameter
string[]
[n]
Data Type
String Array
Integer
Description
Used to declare an array
Optional: use number n if you need to
declare an array of a specific size.
Negative number (including NaN, which is equal to -999999) specified for array size
throws a runtime exception. For example, arr = string[-9]; throws a RuntimeException.
The maximum number of rows supported is 1000.
For string array, the value in each field of the array after array declaration (example, arr =
string[10];) is equal to null, if the array fields are not initialized.
These arrays are dynamic in nature and the length can be increased. For example
strArray = String [2]; // This will create a string array of length 2
strArray [4] = a; // This will automatically extend the length of strArray to 5
Example of string[n]
448
CONFIDENTIAL
Unitialized arrays
In order to show you the different ways to declare arrays, we will display two separate arrays
below. myArray is going to show you what to expect if you define an array size without
initializing
array fields. yourArray will show you what is returned when you define the size of an array as
CONFIDENTIAL
449
As you can see, myArray returned a string with four null values because array fields were not
initialized after the array was declared.
integer[n]
Just as you do for string arrays, in order to initialize an array of a particular size, use the function
integer[n].
Parameters:
#
1
2
Parameter
integer[]
[n]
Data Type
String Array
Integer
Description
Used to declare an array
Optional: use number n if you need to
declare an array of a specific size.
Notes:
For integer array, the value in each field of the array after array declaration (example, arr =
integer[10];) is equal to 0, if the array fields are not initialized.
Example of integer[n]
In contrast to the string[] function, if you define an array size without initializing array fieilds, you
450
CONFIDENTIAL
float[n]
Parameters:
#
1
2
Parameter
float[]
[n]
Data Type
String Array
Integer
Description
Used to declare an array
Optional use number n if you need to
declare an array of a specific size.
These functions initialize 2-D arrays without specifying the size. At a later time, when the values
are assigned in a different array index, the system expands the array into the appropriate size
automatically.
string[n][n]
CONFIDENTIAL
451
Parameters:
#
1
2
Parameter
string[][]
[n]
Data Type
String Array
Integer
[n]
Integer
Description
Used to declare an 2-D string array
Optional: use number n if you need to
declare an array of a specific size.
Optional: use number n if you need to
declare an array of a specific size.
For string array, the value in each field of the array after array declaration (example, arr =
string[10][2];) is equal to null, if the array fields are not initialized.
To initialize a 2-D integer array of a specific size, use the function integer[n][n].
452
CONFIDENTIAL
Parameters:
#
1
2
Parameter
integer[][]
[n]
Data Type
Integer Array
Integer
[n]
Integer
Description
Used to declare an 2-D integer array
Optional: use number n if you need to
declare an array of a specific size.
Optional: use number n if you need to
declare an array of a specific size.
For integer array, the value in each field of the array after array declaration (example, arr
= integer[10][2];) is equal to 0, if the array fields are not initialized.
These arrays are dynamic in nature and the length can be increased.
intArray = Integer[2] [2]; // Creates an integer array with two rows and two columns
intArray [2][3] // Automatically extends the length of intArray to include an extra column
Example of integer[n][n]
Notice the multiple print statements being used in the code above. We are printing a specific
element index and value index. Since there are two elements, then element indexes are 0 and 1
respectively. Each element has two values, so the value indexes are also 0 an 1. The syntax used in
the code will print each value in the console.
CONFIDENTIAL
453
float[n][n]
To initialize a 2-D float array of a specific size, use the function float[n][n].
Parameters:
#
1
2
Parameter
float[][]
[n]
Data Type
Integer Array
Integer
[n]
Integer
Description
Used to declare an 2-D float array
Optional: use number n if you need to
declare an array of a specific size.
Optional: use number n if you need to
declare an array of a specific size.
Notes:
For float array, the value in each field of the array after array declaration (example, arr =
float[10][2];) is equal to 0.0, if the array fields are not initialized.
These arrays are dynamic in nature and the length can be increased.
Example of float[n][n]
454
CONFIDENTIAL
26.4: RANGE(x)
Declares an integer array with specified size and initializes it to its index value.
Parameters:
#
Parameter
Date Type
Description
Integer
Example of range(x)
In this example, we are populating a 1-D array. Since range declares an array of indexes, we can
loop through the variable that range is equal to in order to populate a new array.
We are using the example from Recipe 26.1. Lets just say you wanted to concatenate the first
two arrays based on their index values and populate the results in a new array. So for example,
newArray[0]=doorTypeArray[0] + doorTrimArray[0] or
newArray[0] = Stone + Painted = [StonePainted]
CONFIDENTIAL
455
Using range allows you to loop through the index values and use those to pull information out of
the old arrays and input those values into the new array.
1-D Arrays
Create an 1-D array of values equal to the sum of each array element.
456
CONFIDENTIAL
2-D Arrays
In this example, we are going to combine two 2-D arrays by adding together their values and
placing them in a new 2-D array. Remember that range() creates an integer array of indexes. We
will be using two here.
What we are going to do here is add together the values of the two arrays based on their
indexes. colRange and rowRange are initializing integer arrays. So, both colRange and
rowRange=[0,1,2] respectively. Next, we have to declare and initialize the 2D array that we are
going to populate. Next comes the for...loop. As you learned in Chapter 6, the second loop will
loop through a row and pull out the column values.
CONFIDENTIAL
457
The function append() will attach a new element to the end of an array and can be used with
initialized and un-initialized arrays. Append only works with 1-D arrays.
Parameters:
#
1
Parameters
arrayIdentifier
newArrayElem
Data Type
Description
string[], integer[] or
This is the given array that you are
float[]
going to add an element to.
float, float[], integer,
This represents the new element that
integer[], string, string[],
you are appending to the array.
boolean, boolean[]
If array max size is reached and you try to append a new element, it will fail.
If a null element is added to an array, it should be allowed to be added and the value of the
element in the array should be null.
458
CONFIDENTIAL
The function remove() removes an element from an existing array based on a given index.
Parameters:
#
1
Parameters
arrayIdentifier
removePos
Data Type
string[], integer[] or
float[]
Integer
Description
This is the given array from which you
will remove an element.
This represents the index of the
element that you are removing.
CONFIDENTIAL
459
26.8: SORT(arrayID,[sortOrder],[sortType])
Here you can see the new array that is being returned once the element at index[2] was removed.
26.8: SORT(arrayID,[sortOrder],[sortType])
Sorts array elements based on your standard sort method. You can sort in ascending or descending
order. Sort() can only be used with 1-D arrays.
Parameters:
#
1
Parameter
arrayIdentifier
Data Type
string[], integer[], float[]
Description
This is the given array you will
sort
[sortOrder]
String
[sortType]
String
CONFIDENTIAL
Parameter
arrayIdentifier
Data Type
integer[], float[]
Description
This is the given array you will use
to find the max value
CONFIDENTIAL
461
min(arrayIdentifier)
Returns the smallest element of an integer or float array. Min() can only be used with a 1-D array.
Using the same example as above, 123 would be returned in the Console.
Parameter
arrayIdentifier
element
Data Type
string[], integer[], float[]
String, Integer, Float
Description
This is the given array.
Represents the element you are
looking for in the given array.
Return type: Integer that denotes the index of the element in the array.
Example of findinarray(arrayIdentifier, element)
This example is asking to find the element (or value) 123.65. Because it is not found in the array, a
-1 is what is returned.
462
CONFIDENTIAL
26.11: REVERSE(arrayIdentifier)
The function is used to reverse all elements in the array. Reverse() can only be used with 1-D
arrays.
Parameters:
#
1
Parameter
arrayIdentifier
Data Type
string[], integer[], float[]
Description
This is the given array.
Return Type: Returns the array with all of the elements in reverse order.
Example of reverse(arrayIdentifier)
This function determines if the array is empty. Isempty() can only be used with 1-D arrays.
Parameters:
#
1
Parameter
arrayIdentifier
Data Type
string[], integer[], float[]
Description
This is the given array.
CONFIDENTIAL
463
26.12 ISEMPTY(arrayIdentifier)
26.13: SIZEOFARRAY(arrayIdentifier)
Example of isempty(arrayIdentifier)
26.13: SIZEOFARRAY(arrayIdentifier)
This function returns the length of the array for a 1-D array and the number of rows for a 2-D
array.
Parameters:
#
1
Parameter
arrayIdentifier
Data Type
string[], integer[], float[]
Description
This is the given array.
Because there are seven separate elements in the integer array, the Console returns 7.
464
CONFIDENTIAL
While there are 6 separate values in this array, there are only three elements. Remember that
sizeOfArray for a 2-D array will return the number of rows.
Parameters:
#
1
2
Parameter
str
separator
Data Type
String
String
Description
This is the given input string.
Represents a variety of separators,
however they all must be enclosed in
double-quotes, including spaces.
CONFIDENTIAL
465
Split() is a string function that returns as a 1-D string array. The function splits a string with
respect to a specific separator and populates it into a string array.
Notes:
466
CONFIDENTIAL
Parameter
str_Array
delimiter
Data Type
string[]
String
Description
This is the given array.
Represents a delimiter to use when
concatenating string elements.
CONFIDENTIAL
467
Parameter
UserInfo
Data Type
string[]][]
Integer
MaxValue
Integer
MinValue
Integer
UseZero
Boolean
Description
Each row contains the following info
{Name, Email, RegionalRevenues}
where RegionRevenues is a comma
delimited string of sales revenues for the
Region the User is responsible for.
I.E. - 1200, 0 320, 456
Represents sort direction where 0 is
alphabetical, 1 is reverse alphabetical
Represents the maximum revenue
allowed in the return data
Represents the minimum revenue allowed
in the return data
Boolean flag used to determine if 0
valued revenue should count in the Min
constraint
Return Type: String[][] containing all the elements sorted and narrowed
468
CONFIDENTIAL
This code is an example of BML Best Practices. It is commented very well and you will need to
use a wide variety of functions to accomplish your goal.
Here is what you need to do in order for this code to work. It is recommended that these
comments are what you put in your code to explain what is happening. You will need to use
a wide variety of functions to accomplish your goal. The use of dictionaries will be covered in
Chapter 8.
Use Test Script in the Debugger to test the function. The results are on the next page. Chapter 2
explains how to use the Test Script within the Debugger.
CONFIDENTIAL
469
The code below represents the start of your code. In lines 1-29, you could comment out what the
parameters are, similar to what you see on page 19.
470
CONFIDENTIAL
CONFIDENTIAL
471
472
CONFIDENTIAL
27
ADVANCED FUNCTIONS
In This Chapter:
dict()
put()
get()
makeurlparam()
urldatabyget()
urldatabypost
gettabledata()
getpartsdata()
invoke()
getarrayattrstr()
getconfigattrvalue()
A highlight of using dictionaries is that it has better speed and performance than performing table
calls.
As an example of the functionality of a dictionary:
In your line items, if you wanted to retrieve a list price for a line item you could say that key is the
line number and key is the list price.
CONFIDENTIAL
473
27.1: DICT(dictType)
This function creates a dictionary of a specific data type.
Parameters:
#
1
Parameter
dictType
Data Type
Description
string, integer, float, string[],
Specify the data type of the
integer[], float[], sting[][], integer[][],
dictionary.
float[][], boolean or date
27.1: DICT(dictType)
Data Type
Description
Parameter
dictIdentifier
Dictionary
key
value
474
CONFIDENTIAL
Parameters
dictIdentifier
Data Type
Dictionary
key
Description
Identifies the dictionary you are
retrieving values from
United identifier for the value
parameter
Return Type: The return type is based upon the data type of the dictionary.
Example of get(dictIdentifier, key)
Keep in mind that we have created a dictionary with a data type of string. Using the print
function, we can see all of the keys and values in the dictionary. If we ask to receive the value
of auto color, the following will be returned
CONFIDENTIAL
475
ADVANCED FUNCTIONS
As you can see, we have defined three separate keys and values and put them all in the same
dictionary.
Parameter
dictIdentifier
Data Type
Dictionary
key
Description
Identifies the Dictionary you are
looking through to find if it contains
the key you have identified
Unique identifier for the value
parameter
476
CONFIDENTIAL
Parameter
name
value
Data Type
String
String
Description
You will see all of your parameters and their values returned in the console.
CONFIDENTIAL
477
ADVANCED FUNCTIONS
Notice that this code has comments explaining what it is doing. It is considered best practice to
comment your code as much as possible.
27.6: URLDATABYget()
27.6: URLDATABYGET()
The function retrieves data from a URL address by the HTTP Get method.
Parameters:
#
1
2
Parameter
URL
url_param
Data Type
N/A
Dictionary
default_
value
String
Description
The location of the data you are trying to access.
This represents the markurlparam()parameters
you created.
This is the default value (or error message)
displayed if the data cannot be accessed
478
CONFIDENTIAL
We are going to see that just as the function suggests, this information is Not Available.
27.7: URLDATABYPOST()
The function retrieves data from a URL address by the HTTP Post method.
Parameters:
#
1
2
Parameter
URL
url_param
Data Type
N/A
Dictionary
default_
value
String
Description
The location of the data you are trying to access.
This represents the markurlparam()parameters
you created.
This is the default value (or error message)
displayed if the data cannot be accessed
ADVANCED FUNCTIONS
CONFIDENTIAL
479
We are going to see that just as the function suggests, this information is Not Available.
27.8: BMQL()
27.8: BMQL()
BigMachines now provides the ability to query system tables and user-created data tables from
within BML by using a SQL-like syntax. This functionality is replacing the deprecated gettabledata()
and getpartsdata() functions. BMQL is a new function that returns a new data type: Record Set,
that contains the results of an SQL query.
Highlights:
BMQL does not cap the size of the results set at 1,000 records. A query can return all
results unless it uses either DISTINCT or ORDER BY, in which case, the result set can
contain a maximum of 1,000 records.
Can access the parts database or user-defined tables.
BMQL is context-sensitive and will pick up the language, currency and selected price book
depending on where the function is involved.
The Basics
Syntax: RecordSet
bmql(String sqlQuery)
As mentioned above, the new bmql function is based on SQL syntax. In SQL, most actions you
need to perform on a database are done with a statement like: SELECT + FROM.
For Example:
Similar to SQL, in bmql, your statement would essentially read: select(fields you want to return)
from (which database you will be searching through).
480
CONFIDENTIAL
So, when its written that the function syntax is: bmql(String sqlQuery), the sqlQuery is really the
statement, similar to the example above. NOTE: The sqlQuery MUST be written as a STRING.
For Example:
Statement Keywords:
There are a few statement keywords that can use while querying your results.
Keyword
SELECT
Description
This is the keyword used
to select the column(s) of
data you wish to retrieve.
FROM
This is where you select
the database object from
which to retrieve the
data.
[DISTINCT] This keyword can be used
with SELECT to return
distinct values, removing
duplicates.
[ORDER BY] This is used to sort the
data returned. Be default,
the fields will be returned
in ascending order. Use
desc to reverse the sort
order to descending and
use asc to reverse the
order to ascending.
Example
bmql(SELECT part_number FROM _parts);
ADVANCED FUNCTIONS
Parameters:
When using BMQL, your WHERE clause will be your parameters. For example:
CONFIDENTIAL
481
WHERE Condition
27.8: BMQL()
For Example:
part_number = BL-5C
NOTE: String values should be inclosed in single quotations marks when being used in the WHERE
condition. Float and Integer values should be used without them (i.e. valve_pressure = 1.235).
Logical operators can be used to group the conditions:
Parentheses can be used to change the precedence:
This is a conditional evaluation where a boolean value can be used with the AND operator to
conditionally evaluate the predicate in the WHERE clause. Where eval is a boolean variable in
the script. When eval is TRUE, the predicate field = value is used in the criteria and when eval
is FALSE, the predicate field = value is ignored. NOTE: The condition MUST come before the
predicate. See Use Case 3 for more details.
Operators
Relational Operators: =, <>, <, >, <=, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL
Logical Operators: AND and OR
The table on the following page gives the definition and an example of some of the new operators
that can be used in BMQL.
482
CONFIDENTIAL
OPERATOR
DESCRIPTION
LIKE
NOT LIKE
IN
NOT IN
EXAMPLE
IS NULL
IS NOT NULL
Return Type:
RecordSet
Notes:
For security purposes, the query cannot be built dynamically and passed into BMQL.
Dynamic values can be passed in the WHERE clause of the query by assigning it to a BML
variable and prefixing the variable name with $.
EXAMPLE: $var_1 = _quote_line_item
The BMQL query is parsed at compile time.
ORDER BY and DISTINCT cannot be grouped together using AND or OR. The order of
operations can be changed using parentheses.
% is the wild card option.
CONFIDENTIAL
483
ADVANCED FUNCTIONS
Three functions are available to retrieve data from the results set, depending on the data type
of the values being returned: get(string); getInt, and getFloat. See Recipe 8.3 for details.
27.8: BMQL()
Step 2:
Create a for...loop to loop through your record set created using the bmql function.
Step 3:
In this example, we are using the print statement to show the results of the query.
Now, you can compare the results of the query to what is on the table and see that it pulled the
correct Type and Price from the table.
484
CONFIDENTIAL
In this example, we are using the same sample case, but adding the distinct keyword. Remember,
using distinct will only return distinct values, essentially removing any duplicates.
As you can see, where there were multiple sets that were the same in the first example, now those
have been removed:
Sample Use Case 2: Using the get() function and WHERE clause
This example takes Sample Use Case 1 a step further by adding a WHERE clause to the select
statement. We also add the get function.
Step 1:
Using the information from the sammie data table,, we can create a new script using BMQL that
will return Part, Description and Price when the Type in the data table is Hot. Remember that
you use select to choose your columns and from to choose your database object.
Step 2:
Create a for...loop to go through your record set created using the bmql function. See Recipe 25.3
for more information on for...loops.
CONFIDENTIAL
485
ADVANCED FUNCTIONS
Step 3:
Use the get function with record being used like a dictionary and Price being the data to be
returned. See Recipe 8.3 for more information on the get() function.
As you can see below, record acts like a dictionary and returns the columns and data you
requested. You should also notice the get function at work, returning the price for each of the
records.
27.8: BMQL()
In the console, youll notice that when the part number is HS001, the price and type have been
returned.
486
CONFIDENTIAL
In the console, youll notice that when the condition is false, the predicate (Part = HS001) is
ignored and all other results are returned.
ADVANCED FUNCTIONS
CONFIDENTIAL
487
27.9: INVOKE ()
The invoke function is a method to call a global (python) function. You can call a global function
from anywhere you can write BML. Although global functions are being phased out in BigMachines,
we mention the invoke function in the cookbook because many existing BigMachines customers
use this function. Python functions are a method of creating advanced functionality and a method
to call data tables. However, in the past two years BML has evolved and most of the functionality
you could do with a global function can now be done directly in BML. Also, BML performs better
then a global function. This is why we recommend you use BML instead of a global function if
possible.
27.9: INVOKE ()
Parameters:
#
1
Parameter
globalTableFunction
Data Type
String
2
3
delimitedData
defaultData
String
String
Description
Specifies the table function that will be
used
Specifies the inputs to the global function
Specifies the string returned when the
result cannot be obtained from the
globalTableFunction
Model
Appication
QR-25
QR-25
QR-25
210
210
210
Industrial
Industrial
Industrial
Lubrication
Method
Min Cut-In
PSIG
Pressure
Pressure
Pressure
40
40
40
100
100
100
1
1.5
2
Note:
Only one parameter is allowed to be passed to the global function, which is why we usually pass in
a delimited argument string.
488
CONFIDENTIAL
27.10: GETARRAYSTR()
This function returns the delimited string for array attributes with $,$ as the delimiter. This
function is only used for configurable attributes.
Parameters:
#
Parameter
arrayIdentifier
Data
Type
String[]
Description
This is the given input array
Parameter
documentNumber
Data Type
Integer
CONFIDENTIAL
Description
Represents the
489
ADVANCED FUNCTIONS
27.11: GETCONFIGATTRVALUE()
Example of getconfigattrvalue()
ADVANCED FUNCTIONS
CONFIDENTIAL
490
28
LIBRARY FUNCTIONS
In This Chapter:
CONFIDENTIAL
491
As we discussed Recipe 21.6, you can create your own function to be used throughout BML. In
order to add or edit a library function, you will need to navigate to the BML Library.
1.
2.
3.
4.
Create a Name,Variable Name, Description and make sure to select the Return Type.
At this point, you can begin to add any necessary parameters.
Next, create your script, adding any attributes as necessary.
Click Add to add your new library function to make it available for use.
492
CONFIDENTIAL
LIBRARY FUNCTIONS
CONFIDENTIAL
493
You would like to know what your average monthly sales revenue is for the first six months of the
year. You have already checked the Function Wizard and havent found a function that will serve this
purpose, so you will need to create one.
Monthly Sales Revenue
1,651
65,165
1,321
561
521,321
65,161
Parameters:
#
1
Parameter
valuesArray
Data Type
Float
Description
Represents the sales revenue by month.
494
CONFIDENTIAL
Make sure you create an integer array with the sales values found in the table. Then you will need
to return your table. The syntax is:
return util.libraryfunctionvariablename(parameters)
What we have returned in the Console are the values of the index+1. Remember that indexes
start at 0, so in order to find out how many elements we need to divide by, we need to make sure
you add one so it counts from there. The next object that printed was a total of all of the array
elements added together. Finally, we return the average.
LIBRARY FUNCTIONS
CONFIDENTIAL
495
Linear Interpolation
Lets assume your sales team works on a commission curve. You have the following table set of
defined commissions earned based on the amount of a sale
Sales ($)
Under 10,000
10,000
30,000
50,000
80,000
100,000
120,000
150,000
250,000
500,000 and Up
Commission (%)
.5
.6
.7
.8
.9
1.0
1.2
1.5
2.25
3.5
So, you need to be able to determine how much commission a sales team member will earn if
they make a sale that falls somewhere in between your defined values. This is done by creating a
straight line between two sets of data, a process called linear interpolation. It will essentially fill in
the gaps in your table.
Your BigMachines application doesnt provide a pre-defined function for linear interpolation, so
you need to create one. While this will be used in Commerce, it is better to create it as a Util
Library Function in case another administrator finds another use for it.
Parameters:
#
1
Parameter
valueOfSale
Data Type
Float
Description
Represents the value of the sale, which will be
used to find the relative commission.
Return Type: Float (represents the percentage of commission associated with the sale).
What you need to do:
Call table and get the sales values that are below the sales amount that was input
Find the maximum sales value from the table and store both it and the commission %
Call table and get the sales values that are above the sales amount that was input
Find the minimum sales value from the table and store both it and the commission %
After finding values closest to the sale value, plug the values into the formula to estimate
the relative commission
496
CONFIDENTIAL
LIBRARY FUNCTIONS
CONFIDENTIAL
497
498
CONFIDENTIAL
LIBRARY FUNCTIONS
CONFIDENTIAL
499
500
CONFIDENTIAL
29
ADVANCED USE CASES
In This Chapter:
Recommended Items Rules
Looping Through Line Items
Soap Calls in BML
CONFIDENTIAL
501
We are going to assume that a quote has been created and that you would like to return the
price.
Go to your Commerce Library to create a new library function. It would be advantageous to
select your sub-document attributes before you begin writing your code.
You will need to select:
_document_number
_part_number
_part_base_price
_price_quantity
This is the code that you will need to complete this task:
502
CONFIDENTIAL
After you have written your code, you will want to run it through the Debugger. In order for it to
work, you will need to have created a quote and obtained the transaction ID.
Once this is done, you can run your code in the Debugger.
CONFIDENTIAL
503
You will need to put the transaction ID into the Data Import text area and click Import. If you
notice, under the Line Item tab, it has listed the values for the Sub-Document attributes you
selected before writing your code. You can see that Line Item 2 contains part F25X0035 with a
price of $229.95.
The first line represents the partsArray that was created when you looped through the
line items.
The second line shows the DocumentNumbers that were appended in that same loop.
The third line shows the array that you created using getpartsdata().
Next we have a print of the partsDict. You should have created a loop through the array
of those values and put them in the dictionary where the part number is the key and the
price is the value.
The last line is the return string.
504
CONFIDENTIAL
CONFIDENTIAL
505
506
CONFIDENTIAL
Here is a sample of the XML that is being used in the soap call.
CONFIDENTIAL
507
508
CONFIDENTIAL
30
TROUBLESHOOTING BML
In This Chapter:
Common Error Messages
Tips and Reminders
Best Practices for BML
CONFIDENTIAL
509
Compilation Errors
One of the most common error messages is the one shown above and you will see it if you forget
to close a statement with a semi-colon (;). As you can see, the message tells you what line and
index your error occurred so that you can correct it. Notice that the errors will display above the
tabs in the function editor.
The error message lets you know that you are missing a return statement. Remember that BML
will not begin to compile your script without one.
Notice that this error message is saying it has come across a semi-colon, which ends a statement,
but it should have encountered something else first. It was either expecting a curly bracket, which
are used with conditional functions and arrays, or it was looking for an operator. Use the line and
index to double-check your code.
510
CONFIDENTIAL
You will see this error message any time you have a variable that is not intialized. This can be
caused by a number of errors. In order to fix the issue, try doing one of the following
Make sure that your variable in question is spelled the same way wherever it is being used.
Verify that your string variable are in double-quotations.
In this is example, the message is telling us that the data type of the return value should be a
string. What it is really saying is, the wrong return data type is being used for the code you
have written. Lets say you have just written a code in the Util Library using the getpartsdata()
function. We know that the return type for that function is a 2-D string array. However, we have
accidently selected String from the Return Type drop-down menu. This is the exact message
that you will see. You do not need to re-write your code in order to change the value to string,
you can simply change the Return Value to String[][] and the message will disappear.
CONFIDENTIAL
511
TROUBLESHOOTING BML
This is a message similar to the first one we discussed. Make sure that you have a semi-colon
at the end of each statement. If you dont, the compiler will think that you meant to use an
operator to combine two lines of code.
For all functions that are compatible in 1-D arrays only, you can loop through a 2-D array
to populate a 1-D array and then use those functions.
Use $BM_UNCHANGED_NUM$ or $BM_UNCHANGED_STR$ to keep the value of an
array unchanged or constant.
When creating a constraint rule, make sure to use the syntax A |^| B.
Take advantage of the function wizard!! As this cookbook shows, there are many predefined functions that can help you.
Create your attributes at the highest level possible in the hierarchy. For example, if you
try to make changes to a model when the attribute and all rules that are associated with
that attribute is actually at the Product Line level, your rule will not reflect the changes you
made at the model level.
A rule will not work if your chosen condition attribute or action input attribute is not in
the configuration flow or if that attribute is inactive.
Pay attention to the expected format of return value. Look at the example below and you
will see the return will be
(item1~quantity1~comment1~price|^|item2~quantity2~comment2~price2)
Menu values and variable names to match where possible (illegal characters and
integration)
512
CONFIDENTIAL
General (continued)
Do not use special characters in attribute or variable names (Cant have , &).
Do NOT use the following delimiters in any data ~ or , or | or ^ or |^|. |^| is only used
when you need to constrain and/or in Recommended Item rules.
If delimiters are needed, we suggest ** or or && or $,$. Using items listed as DO NOT
USE can cause unforeseen issues and create major problems, such as preventing site
upgrades.
Always use new format instead of legacy where the choice is available (Recommended
Items as shown in the image on the previous page. )
Commerce
Keep in mind the order of operations
Defaults (Advanced Default / Attribute Level)
Modify (Advanced Modify / Modify Tab)
Put all commerce BML in libraries (9.0+)
Comment the library function
Comment the calling function
Looping
No nested loops
Select variables carefully at the line level
Keep in mind the difference between document number and sequence number
Dont modify system generated attributes (any attributes that start with _)
Be aware of and use system generated actions (Update Lines, Add Line, Reconfigure,
Autofill)
When defining attributes use _quote and _line suffixes as well as camelCase
Do not use the Line sub-tab on the Modify tab of the _update_line_items
Commmerce Header action. Ensure to keep the default settings of Save to Form. This
will prevent performance issues.
CONFIDENTIAL
513
TROUBLESHOOTING BML
BigMachines Application
Document Engine
31
GETTING STARTED
In This Chapter:
CONFIDENTIAL
517
The Document Flow Tree determines the structure of the document. The document structure is
made up of the following objects:
Page In the Document Engine, a Page does not represent a literal page as your body
content may end up flowing over to a new page, depending on the data on the user-side when
the document is printed. Think of a Document Engine Page as a place where you can define a
constant header and/or footer with fixed dimensions. If your body content overflows to more
pages, those pages will share the header/footer that you defined on the Document Engine
Page. Additionally, you can insert hard page breaks into your page body content. In technical
terms, a Page will output a complete xsl <fo:page-sequence> node.
How to decide between creating a new Page object versus inserting line breaks. It is cleaner to
create separate Pages, since this will help you visually see your document structure. The
only down side, is you will need to maintain the same header/footer across your Pages
manually.
Loop Loops in the Document Flow Tree repeat over all the line items and can display
individual Products Information pages for each line item in the loop. You can edit the loop to
control how the pages within a loop are generated. In technical terms, a loop is an <xsl:foreach> which will ultimately be inserted outside of the <fo:page-sequence> tags that are
generated for each Document Flow Page. Thus, Document Flow Loops are useful for creating
repeating pages.
XSL Snippet The code that you write in a Document Flow XSL Snippet will be inserted
between the <fo:page-sequence> nodes that are generated by Page objects. Therefore, to
avoid XSL errors, you should only write XSL that will either be <fo:page-sequence> nodes or
generates <fo:page-sequence> nodes.
518
CONFIDENTIAL
View/Options Panel Preview document output and change the document default units.
Preview PDF or RTF Preview the document with a transaction id number
Change Default Units Change the page ruler units (details in Recipe 31.9)
Save Document Icon Saves the document, but not deploy it (details in Recipe 31.3).
Document Menu The document menu consists of the following:
Replace Document Start over with a brand new document template
Output Type Change the output type (details in Recipe 31.11)
Refresh Data Sources Refresh the dynamic data tree to include any new attributes that
may have been added since the last time (details in Appendix B.1)
Edit Custom Master Layouts Edit the XSL code for custom master page layouts
(details in Recipe 32.5)
View Document XSL View the XSL code that is generated for the document (details
in Recipe 40.5)
CONFIDENTIAL
519
GETTING STARTED
Edit Global XSL Snippet Edit the XSL code for global templates & variables (details in
Recipe 40.1)
Step 2:
Fill out the Name & Variable name. Select a Process Output Through of FO to RTF
Converter or FO to PDF Converter. Select Editor as the Edit Mode. Next, click on
Add. Finally, click the Open Document Engine button.
Step 3:
The Document Engine will open in a new window, where you can select a document template
from which to start. You have the following choices:
The Blank Document template creates a blank document with no pre-defined pages.
The Line Item and Cover Page template creates a Cover Page Document followed
by Product Information pages for each line item. A line item loop ensures that individual
pages are created for each line item in a document.
Step 4:
Determine the alignment of the labels (left, right or center).
Step 5:
Determine the width of the columns. You have two options: Auto and Pixel. If you check
Auto, then the columns will auto-size. Otherwise, you can customize the width of the labels
by entering the Pixel size of each column.
Step 6:
Remember to click Save to save the changes.
520
CONFIDENTIAL
Step 2:
The Page Layout Library window will open, where you can select from a list of pre-defined
page layouts to start from. For most cases, the first option Default Page will suffice.
Step 4:
You can drag & drop the Page to its desired location in the Flow. You can rename your Page
by right-clicking on it, and selecting Rename from the menu.
CONFIDENTIAL
521
GETTING STARTED
Step 3:
Select your choice, and click Select to finalize. By default, your new Page will be given an
auto-generated name and appended to the end of the Document Flow Tree.
Step 5:
To edit the page, double-click on the page in the Document Flow Tree. The page editor will
open in the right panel.
CONFIDENTIAL
Step 2:
To deploy your document to production, you will need to go back to the XSL View page (the
page where you opened the Document Engine from), and click the Deploy button. This
will refresh the production XSL with the XSL that is generated by the Document Engine.
When you copy a page and do not save the document before editing the
copied page, the page layout does not get added to the output XSL. This
can be avoided by making sure that you SAVE THE DOCUMENT AFTER
COPYING A PAGE.
523
GETTING STARTED
Drag & drop the pages within the Flow panel to re-order them. You can also re-order any Loops
or XSL Snippets that you have inserted as well. Loops can contain Pages and XSL Snippets , while
Pages & XSL Snippets cannot contain any children at all.
Step 2:
Define type of loop and properties in the Loop Expression Editor that opens. For a loop that
iterates over each line item, sorted by sequence number, select the following:
Loop Over: All Line Items
Sort By: Sequence Number
Sort Type: Ascending By Number. This will sort your results by the standard _
sequence_number line item attribute.
Step 3:
Click Save. A new Loop object will appear in your Flow Tree.
Step 4:
You need to create a new page to be inserted inside of the new loop. There are three ways
of doing this:
1. Drag & drop an existing Page into the new loop.
2. Copy an existing page and insert it into your loop.
3. Create a new Page from the Add menu, and drag it into your loop.
You cannot add Pages to a Document Flow Loop if you save the Document
with a child-less Loop. To avoid this, make sure that you insert any Page(s)
into your loops BEFORE you save the document.
524
CONFIDENTIAL
There may be times you will need to restore your document to a previous state. For example, the
document somehow got corrupted and you want to roll it back. There is no way to rollback a
document in the Document Engine. Instead, it is highly recommended that you create a copy of
the document before editing it in the Document Engine.
For help in creating a backup, see Create a Backup of a Document (Recipe 31.7).
CONFIDENTIAL
525
GETTING STARTED
You must re-open a page for editing to have the rulers re-size accordingly.
As a workaround, save your page after changing the units and then doubleclick on the page (in the Document Flow Tree) to re-open it for editing.
CONFIDENTIAL
Step 2:
Copy the number, and enter it into the Trans ID field in the View/Options panel. Click the
Preview button. The Document Engine will save the last transaction ID that you used for
the next time.
Switch your Output Type in the Document menu. Remember to save your document after.
CONFIDENTIAL
527
GETTING STARTED
It is important to note that the Document Engine will not alter your data in any way if you change
your output type. You will need to manually remove any features from your pages, which are not
supported by the output type that you are switching to. For most cases, no changes are needed.
However, for your reference we have provided a static Processor Compatibility Chart (View
Compatibility Chart menu option above), to help you determine if you need to make any changes.
PDF Merging
528
CONFIDENTIAL
GETTING STARTED
CONFIDENTIAL
529
530
CONFIDENTIAL
32
PAGE LAYOUTS
In This Chapter:
CONFIDENTIAL
531
Step 2:
Under the Page tab, change the Height and Width General properties.
Step 3:
Under the Margins header, enter specific page margin sizes.
Step 4:
Click Apply Layout.
532
CONFIDENTIAL
Step 2:
Click Apply Layout and remember to save your document.
In XSL:FO, the body region is meant to float above the other regions (header, footer, leftbar,
rightbar). This means that you can tweak the margin values to have the body overlap other
regions on the output. By default, the Document Engine will try to set your body margins
appropriately so that no overlap will occur. However, you have the ability to adjust these margin
values manually as well.
CONFIDENTIAL
533
PAGE LAYOUTS
Step 2:
Click on the Body tab at the top. You can edit the margins below:
Step 3:
Click Apply Layout and be sure to save your changes.
534
CONFIDENTIAL
Step 4:
Before you can apply the new layout, you will need to change the Layout Name field. Enter a
unique name into this field. Layout Name should be unique in the document.
PAGE LAYOUTS
Step 5:
Click Apply Layout to apply your new layout and be sure to save your document. You will
notice that the page editor still only displays one column. This is OK. Even though, your
content is displayed as one column, your document output will reflect the number of columns
that you entered in the Column Count field.
CONFIDENTIAL
535
Page Editor:
536
CONFIDENTIAL
PAGE LAYOUTS
537
538
CONFIDENTIAL
PAGE LAYOUTS
CONFIDENTIAL
539
540
CONFIDENTIAL
33
GENERAL PAGE EDITING AND TEXT FORMATTING
In This Chapter:
CONFIDENTIAL
541
Cut (Internal)
Copy (Internal)
Paste (Internal)
Removes text formatting from selection
Font Family
542
CONFIDENTIAL
Font Size
Font Color
Bold
Italic
Underline
Strikethrough
SuperScript
SubScript
CONFIDENTIAL
543
544
CONFIDENTIAL
CONFIDENTIAL
545
Example:
The cursor is placed inside of a paragraph, which is inside a nested table cell. The Bottom
Selection Toolbar shows the following:
You can apply different font-family to selected text. To do so, youll use the drop-down menu
in the Home Toolbar. The menu contains all supported fonts. Below is a list with output-type
compatibility:
546
CONFIDENTIAL
You will first need to place your cursor at a point in the page editor where you would like to
insert the page break. Click the Insert Page-Break icon from the Home Toolbar.
CONFIDENTIAL
547
Padding is not supported on block-level objects that contain other block-level objects
(output format limitation).
Margin is fully supported.
Only one padding value can be applied at a time (left, top, right, OR bottom).
No support for margin.
Step 2:
Click the appropriate Apply button to apply your values uniqueness.
548
CONFIDENTIAL
Step 2:
From the Condition Expression Editor, define your desired condition using the Fiilters grid.
You can add additional filters by clicking Add Row. For more information, refer to the recipe
on Inserting a Conditional Section in Chapter 34.
CONFIDENTIAL
549
Step 3:
Click Save to save your page conditions. If you would like to remove this condition, click
Delete Condition. Be sure to save your page!
Step 3:
In the window that opens, click into the blank text area, and press CTRL + V (hold down the
Control key, and press V) on the keyboard. You should see your text appear in the text area.
Ignore what appears in the text area, as this is the content before it is cleaned up.
550
CONFIDENTIAL
Step 4:
Click the Insert into Editor button. Your content will be pasted, with any non-supported
junk tags stripped out. You can now format the content as needed. Some formatting may
be retained, such as font weight, simple lists, and paragraph alignment. Others such as tables,
images, font size, font family, and color will be stripped.
You can use the Cut and Copy buttons from the Home toolbar to cut/copy the current text
selection. Use the Paste button to paste the text into a new location in the editor.
You cannot use Copy & Paste, with dynamic elements, from the toolbar
buttons or keyboard shortcuts. To achieve this functionality for dynamic
elements, we recommend that you use the Content Library.
CONFIDENTIAL
551
Step 2:
Click outside of the field (where the cursor is below), and the new font family will be applied
to all text within the page. This will only affect text that doesnt have a specified font family
using the Font Family drop-down menu in the Home toolbar. Be sure to save the document
after.
552
CONFIDENTIAL
553
CONFIDENTIAL
554
CONFIDENTIAL
34
DYNAMIC ELEMENTS
In This Chapter:
Add a BigMachines Attribute Value
Insert a Commerce Attribute
Define a Dynamic Element
Insert a Repeating Section
Insert a Conditional Section
Add an Else Clause
Format Dynamic Data as Currency
Sort Line Items to Match Quote
Screen
Insert a Line Item or Config Attribute
CONFIDENTIAL
555
556
CONFIDENTIAL
User - User folder contains attributes related to the current user (user that is printing
the document).
Data Document - The Data Document folder contains all of the data specific to the
transaction & line items.
Quote Contains all header/quote level attributes in the commerce process.
Bill To contains the standard Bill To attribute set.
Ship To contains the standard Ship To attribute set.
Line Contains all line item attributes in the commerce process, in addition to parts
& configurable attributes of products.
Configurable contains your Configured Products hierarchy. Sub-folders are
named after Product Families, Product Lines, and Models. These folders contain
all configurable attributes that are defined in your BigMachines application.
Model Useful attributes such as the Model Name, Segment Name (Product
Family Name), and Product Line Name.
Part Part related attributes.
Price Standard pricing attributes. While not all of these may be used for your
implementation, the most notable ones are Quantity and the Component Prices
string (Config Pricing Rules).
Serial Number Serial Number attributes.
TECHNICAL DETAILS:
CONFIDENTIAL
557
DYNAMIC ELEMENTS
The Dynamic Data tree represents the new XML schema that the Document Engine XSL
processes to produce the output PDF/RTF. You can also write custom XSLs to use the new
schema if you choose. When you upload a custom XSL, you have the choice to select between
transforming the old schema or the new one.
Step 3:
In the Loop Expression Editor that opens, make selections for the following:
Loop Over Select what data will be repeated over. Most likely, you will be using
one of the first three options:
558
CONFIDENTIAL
DYNAMIC ELEMENTS
Step 4:
Click Save and a new LOOP element will be inserted at the current cursor location.
CONFIDENTIAL
559
Step 5:
In the LOOP element, insert the content to display where it says Enter Content Here. You
can also insert more dynamic elements (conditionals, dynamic data, loops, etc) inside of the
content.
Step 3:
The Conditional Expression Editor will open. This allows you to define the conditions for the
section. Details on the various fields:
560
CONFIDENTIAL
Step 4:
Click Save when you are done, and a new IF element will be inserted at the current cursor
location.
Step 5:
In the IF element, insert the content to display where it says Enter Content Here. You
can also insert more dynamic elements (conditionals, dynamic data, repeating section, etc)
inside of the content.
You can add content that will be displayed if the condition in a conditional section is not met.
CONFIDENTIAL
561
DYNAMIC ELEMENTS
Step 2:
An ELSE block should appear below the IF content. Edit the content in the dotted box
which will display if the condition in the IF is not met.
562
CONFIDENTIAL
Step 2:
Double-click on the pencil icon to open the Formatting expression editor.
Step 3:
In the Expression Editor window, select Currency from the Formatting dropdown, and enter
USD in the currency-code field. Click Save.
A complete list of valid currency-code values can be found in Appendix B: Formatting
Functions.
You want to have the line items in a loop appear in the order they are displayed on the quote
screen.
In the Expression Editor for your loop, select Sequence Number (_sequence_number) as the
Sort By, and Ascending By Number as the Sort Type. Click Save. NOTE: If your line items are
sorted by a different attribute, use that one instead of Sequence Number.
CONFIDENTIAL
563
DYNAMIC ELEMENTS
564
CONFIDENTIAL
DYNAMIC ELEMENTS
CONFIDENTIAL
565
566
CONFIDENTIAL
35
CONTENT LIBRARY
In This Chapter:
Add an Item to the Content Library
Insert or Remove Content
CONFIDENTIAL
567
Step 3:
In the popup that appears, give your conditional name and click Add. After the content
library tree refreshes itself, you will see your new item displayed under the appropriate folder.
CONFIDENTIAL
CONTENT LIBRARY
CONFIDENTIAL
569
570
CONFIDENTIAL
36
COMPLEX CONDITIONALS
In This Chapter:
Complex Conditional Library
Insert a Complex Conditional
Add a Complex Conditional
CONFIDENTIAL
571
Step 4:
You can search the library for the complex conditional you need by entering the entire name
or part of the name in the text fieldStrings display to the product upload administrator as
text fields. This field type is used to construct an either/or selection attribute.
Step 5:
You can also search the library by narrowing down the complex conditionals by category.
572
CONFIDENTIAL
Step 6:
Click Search to list all complex conditionals that meet your search requirements.
Step 7:
Select the complex conditional you search for. You can either edit, delete or insert this into
your page.
COMPLEX CONDITIONALS
CONFIDENTIAL
573
574
CONFIDENTIAL
Step 4:
Enter a unique Name for the complex conditional.
Step 5:
Select a Category from the drop-down menu. If no Categories are available, or the
appropriate Category is unavailable, type a new category name directly into the text
fieldStrings display to the product upload administrator as text fields. This field type is used to
construct an either/or selection attribute..
Step 6:
If this complex conditional is Always True, check the box next to Always True. Doing so will
hide the filters section. NOTE: Once it is saved as Always True, it cannot be changed.
COMPLEX CONDITIONALS
Step 7:
If the complex conditional is not Always True, you will need to create simple filters.
CONFIDENTIAL
575
Step 8:
In the Clause Content section, the content is created in a WYSIWYG editor. This functions
very similar to the WYSIWYG editor you use throughout the Document Engine. You
can format text, insert hyperlinks, images, tables, dynamic data, repeating sections and
conditionals. You CANNOT insert a complex conditional.
Step 9:
Click Create.
Step 10:
To add the Clause Content for the Else statement, click the pencil next to Else.
Step 11:
In the Clause Content section, the content is created in a WYSIWYG editor.
Step 12:
Click Save.
576
CONFIDENTIAL
COMPLEX CONDITIONALS
CONFIDENTIAL
577
578
CONFIDENTIAL
37
TABLES
In This Chapter:
The Table Toolbar
Insert/Remove a Table
Insert or Delete a Column or Row
Edit Column Widths
Add/Remove Header Row
Split/Merge Table Cells
Display a Table Row for Each Line
Item
Display Row Based on Conditions
Center Align a Table
Center Align Content in a Table
Insert Dynamic Data Into a Cell
Apply Borders to Table Cells
Apply a Background Color to Cells
Switch Units for a Table
Select Table Cells
Delete Dynamic Data from a Cell
CONFIDENTIAL
579
580
CONFIDENTIAL
To Insert a Table:
Step 1:
Move your cursor to a location where you want to insert the new table.
Step 2:
Click the Insert Table icon on the Home toolbar.
Step 3:
Fill out the following fields:
Number of Rows: The number of rows to insert into your table initially.
Include Table Header? Check this box to include a header row on your table.
This header row will appear with a darker dotted border in the editor. If the
contents of the table body flows onto the next page when generated on the userside, the table header row will repeat on the next page as well.
Column Units: Select the units to use for your column widths.
Column Grid: Add more columns by clicking Add Column. Remove columns
by clicking the X icons. Edit a column width by clicking on the Width cell, and
entering a new value.
TABLES
Step 4:
Click Insert Table.
CONFIDENTIAL
581
You can easily remove a table from a document by moving the cursor to any cell within the table
you want to delete and clicking the -Table button from the Delete group.
Step 3:
Fill out the following fields in the Add Column window that opens:
Width: The width of the column to insert. This is a numeric floating point value.
The units (ex: inches) defined for the table will be appended to it. (To change the
units for a table, see Recipe 37.15)
Insert Before: Check this box to insert the column BEFORE the cursor column.
By default, the column will be inserted AFTER the cursor column.
Step 4:
Click Insert Column.
582
CONFIDENTIAL
Delete a Column
From the Table toolbar tab, click - Column from the Delete group. The column will be
instantly deleted.
Step 3:
In the Columns grid, on the column width that you want to edit, and change the value. Click
Update to apply your changes. Be sure to save your document afterwards.
TABLES
CONFIDENTIAL
583
584
CONFIDENTIAL
Step 3:
Un-check (or check to add a header row) the Include Table Header? checkbox.
TABLES
Step 4:
Click Update Table. Be sure to save your document after.
CONFIDENTIAL
585
It is recommended that you do not select any text before performing the
split operation. Clicking into the cell instead is preferred and will provide
consistent behavior.
586
CONFIDENTIAL
Step 3:
The Loop Expression Editor should appear, and you can define the loop to display on the
output.
Step 2:
Select the cell, by clicking the <Cell> item in the selection toolbar on the bottom of the
page. You should now see the + Condition button enabled in the Table toolbar; click on it.
CONFIDENTIAL
587
TABLES
Step 1:
Place the cursor inside of any table cell within the row that you want to toggle. The table
row must not already be a repeating row or have an existing condition on it.
Step 3:
The Condition Expression Editor will appear, and you can define the conditions to be met for
this table row to display on the output. For more help on using the Condition Expression
Editor, see the recipe on Insert a Conditional Section.
Results In:
It is recommended that you do not select the ENTIRE text to align. Instead,
select portions of the paragraph to align. While selecting all text and
aligning may work, results are inconsistent. If you alight a single paragraph,
insert the cursor anywhere inside that paragraph rather than selecting all of
the text in the paragraph.
588
CONFIDENTIAL
CONFIDENTIAL
589
TABLES
If you want to set the border color to anything other than black, then you
must set the border color prior to applying the border.
Step 3:
Select the desired color from the Color field. Note that the color wheel only appears on
Firefox 3. In Internet Explorer, there is a color swatch picker instead. You can also enter the
color code directly. Click Apply to Cells.
590
CONFIDENTIAL
Step 3:
You can now insert any content into the table cell.
CONFIDENTIAL
591
TABLES
Step 2:
Look at the selection toolbar at the bottom of the page. If <Paragraph> isnt
listed as the parent node (the right-most item in the list), you should insert an
empty paragraph. To do this, just press ENTER on your keyboard, and then select
your cursor location again. You can remove any unnecessary empty paragraphs
that were inserted when you pressed ENTER if you desire.
592
CONFIDENTIAL
38
IMAGES & HYPERLINKS
In This Chapter:
Insert an Image
Insert a Hyperlink
Edit Image Dimensions
Insert an Image From an External URL
You have the ability to add, replace or delete files in
Display a Page Background Image
the File Manager Window. Files cannot be directly
Insert a Link From an External URL
added, replaced, or deleted from the Document Engine.
Edit a Hyperlink
As a workaround, you should open up a new browser
window, and navigate to Admin > File Manager to
manage your files.
CONFIDENTIAL
593
Step 1:
Click File Manager from the Home toolbar tab to open the File Manager window.
Step 2:
Select the folder from the drop-down menu that contains the image file you want. From
the list of files that appear, find the image you want to insert. Note that you can page through
the results by using the next and back arrows at the bottom of the window.
Step 3:
Click your cursor on the location in the editor where you want to insert your image.
Step 4:
In the File Manager window, click the Insert File Image icon for your selected image. If you
would like to preview the file, click the eye icon and a thumbnail preview will appear.
594
CONFIDENTIAL
Step 5:
In the dialog box that appears, select the units of measurement and also enter an image
Height and Width. To preserve aspect ratio, only enter in one of the dimensions, not both.
Step 6:
Click Insert.
Be sure that the dimensions you enter do not exceed the editor width or
table cell width (if you are inserting it into a table cell). The Document
Engine does NOT do any size validation checks for you.
In addition, make sure you are inserting a valid image file as an image. Valid image files include
.jpg and NON-TRANSPARENT .gif formats only. Trying to display an invalid format will produce
errors in your output.
CONFIDENTIAL
595
The other option is to set a specific measurement. In order to do so, you will need to click on
the image within the document editor. Click on the Image tab that appears in the toolbar ribbon,
and click Edit Image. Note that this tab is only visible if you have selected an image in the editor.
Refer to step 5-6 in Recipe 38.1 for details on manipulating dimensions.
Step 3:
In the dialog window that appears, enter the image URL, dimensions (height or width to
preserve aspect ratio), and units of measurement.
Step 4:
Click Insert. You can edit the dimensions again, by following Recipe 38.3.
596
CONFIDENTIAL
Be sure that the dimensions you enter do not exceed the editor width or
table cell width (if you are inserting it into a table cell). The Document
Engine does NOT do any size validation checks for you.
Step 3:
Click Apply Layout and be sure to save your document afterwards.
CONFIDENTIAL
597
Step 4:
Click Insert.
598
CONFIDENTIAL
CONFIDENTIAL
599
600
CONFIDENTIAL
39
PAGINATION & BOOKMARKS
In This Chapter:
Create a Bookmark
Delete a Bookmark
Insert a Link to an External Bookmark
Delete a Bookmark Link
Insert a Page Number
CONFIDENTIAL
601
To Create a Bookmark:
Step 1:
Place your cursor at a point in the Page editor, where you would like to insert the
bookmark.
Step 2:
Click the Bookmark button from the Dynamic Tab Toolbar.
Step 3:
Enter a Name and Description for the bookmark. The Name is used to refer to this
bookmark from other places in the document. The description is only for admin purposes, in
describing what the bookmark is for. Click Save and the bookmark will be inserted at the
current cursor location.
602
CONFIDENTIAL
To Create a Bookmark:
Step 1:
Place your cursor at a point in the Page editor, where you would like to insert the link
Step 2:
Click the Bookmark Link button from the Dynamic Tab Toolbar.
Step 3:
Enter a Name and Description and Select the Bookmark you would like to link to.
Step 4:
Click Save.
CONFIDENTIAL
603
You cannot edit a bookmark link. To work around this, make a note of
the bookmark link text and name. Delete the bookmark link by doubleclicking on the X icon. Place your cursor back at the location where
you want to re-create this link. Refer to Recipe 39.3 to re-create the
bookmark link.
Editing a bookmark link does not work Trying to edit a bookmark link
(double-clicking on the edit icon) behaves as if a new bookmark link is trying to be
inserted. Name & Select Bookmark fields are blank, and clicking Save inserts a new
bookmark link inside of the existing bookmark link and corrupts the interface. DO
NOT EDIT A BOOKMARK BY CLICKING ON ITS EDIT ICON.
To Create a Bookmark:
Step 1:
Place your cursor at a point in the Page editor, where you would like to insert the page
number
Step 2:
Click Page number from the Dynamic Tab Toolbar.
604
CONFIDENTIAL
Step 3:
From the Page Number window that opens, you will have four choices:
1. Current Page Number: Prints the page number in the document where your cursor
is displayed.
2. Current Page Number out of Total Pages: Prints the current page number and the
total number of pages in the format of <CURRENT> OF <TOTAL>.
3. Total Pages: Prints the total number of pages in the document.
4. Page Number of a Bookmark: Prints the page number of the page that contains a
specified bookmark.
Step 4:
Click Save.
CONFIDENTIAL
605
606
CONFIDENTIAL
40
ADVANCED: XSL SNIPPETS
In This Chapter:
Custom Global XSL Templates
Custom XSL:FO Page Sequences
Embedded XSL Snippets
Converting a Page Into Custom XSL
Preview the Output XSL
Using Custom XSL for Loops
Using Custom XSL for Conditions
CONFIDENTIAL
607
There is no validation that runs on any XSL snippet, so be sure to test your
changes afterward
CONFIDENTIAL
is extremely useful in the cases where the standard functionality doesnt let you do things that
you need for the document. Examples of this are:
Step 3:
Enter XSL code into the window that opens.
CONFIDENTIAL
609
Step 4:
Click Save and an XSL object will be inserted at the current location of the cursor.
There is no validation that runs on any XSL snippet, so be sure to test your
changes afterwards.
610
CONFIDENTIAL
The grid selector is not robust enough to handle conditions that you require
You would like to loop over recommended accessories inside of a line item loop
You need to integrate XSL variables into the loop condition
You need to perform formatting on data values before using them in the loop condition
You want to customize the sorting criteria beyond the options that are provided
611
Enough talk, lets walkthrough an example. This recipe will show you how to define a custom
loop expression for a repeating table row. The concept is exactly the same for a repeating
section.
Step 4:
Open the table row loop again for editing, and click on the View XSL button at the bottom of
the window.
Step 5:
You should see your loop condition converted into XSL:
You can modify the code as you need. The table row that is printed out (repeated over) will
be inserted into the XSL directly above the closing </xsl:for-each> tag. This means that you
can define custom XSL variables, etc right below the <xsl:for-each> opening tag, as well as
customize the sorting behavior of this loop. Just be sure that you leave the </xsl:for-each>
closing tag in-tact, and at the end of your expression.
Step 6:
When you are done, click Save Be sure to also save your document after.
*NOTE: Once you save the expression as custom XSL, you will NOT be able to edit it in
the expression grid GUI anymore.
The grid selector is not robust enough to handle conditions that you require
You need to integrate XSL variables into the condition
You need to perform formatting on data values before using them in the condition
612
CONFIDENTIAL
Step 6:
When you are done, click Save to save the code. Be sure to also save your document after.
*NOTE: Once you save the expression as custom XSL, you will NOT be able to edit it in
the expression grid GUI anymore.
CONFIDENTIAL
613
You can see that it is not the entire if block that you can customize, but only the portion
of XSL that appears within the test attribute tag of your conditional. In technical speak, it
is simply the XPATH expression of the conditional statement. You can modify the XPATH
expression as you need.
614
CONFIDENTIAL
41
USEFUL TECHNIQUES
In This Chapter:
Use Impossible Page Conditions
Modify XSL but Keep Design Mode
CONFIDENTIAL
615
You want to use a page as a starter page, strictly to make copies of it because it contains
the page layout & header/footer content. In this case, you dont want your starter page to
show up in the output.
You have a page acting as the backup copy of the live page.
You have a page in progress.
This is a basic technique that can be applied to many things, including other advanced recipes in
this Cookbook.
616
CONFIDENTIAL
The basic idea is to create two versions for the page in question. One version is the Live
Code version. The live version is a page that has been converted to an XSL snippet through the
Page Code option on the Home Toolbar. This is the page that will be printed on your output
document for users. The other page is the Design Template page. It is a Design-Mode (non-XSL
converted) page, that contains the exact same contents as the Live Code page but without the
custom XSL changes. The Design Template page has impossible, never-to-be-met conditions, so
that it will never be shown on the output document. To this effect, its only purpose is to let you
maintain content in this page, which will ultimately replace the Live page. The basic steps can be
summarized as:
1. Add impossible conditions to the page.
2. Make a copy the page, and rename it as the new Live/Code page. Rename the current
page as the Design page.
3. Re-order pages in the flow if need be & save the document
4. Remove the impossible conditions on the new Live/Code page.
5. Convert the Live/Code page to Page Code mode.
6. Make XSL page code edits & save document.
Why go through all of this trouble?
The benefit of this approach is to preserve design mode editing for your page, even though
you need to modify the Page code directly. Of course, if you know XSL well (and whoever will
end up maintaining the document also knows XSL well), you can just bypass all of that and modify
the XSL of the LIVE page directly. However, XSL is much harder to maintain especially for nontechnical administrators.
Complicated? Its not really, as long as you follow the detailed directions below carefully.
CONFIDENTIAL
617
USEFUL TECHNIQUES
Step 2:
Set Impossible Conditions on the page. You dont ever want your page to show up, since it
will be used as a design template going forward, so follow recipe Use Impossible Conditions
(See Recipe 41.1) to ensure that the page will never be shown.
Step 3:
Make a Copy of the page in the Document Flow Tree, by right-clicking on it and selecting
Copy. Open the copy for editing by double-clicking on the copied page.
*NOTE: When you copy a page, and do not save the document before editing the
copied page, the page layout may not get added to the output XSL. This can be avoided by
making sure that you SAVE THE DOCUMENT AFTER COPYING A PAGE.
Step 4:
At this point, you should rename the ORIGINAL page to something that contains DESIGN
in the name. This helps to distinguish it as the page to use to edit content. Also, rename the
COPIED page to something that contains LIVE or CODE. This makes it easy to see that
it is the live/code page.
Step 5:
Re-order the pages if you need to. We recommend placing all the DESIGN pages at the
bottom of your flow tree for organization.
Step 6:
SAVE THE DOCUMENT!!
Step 7:
Open the LIVE page for editing.
Step 8:
Remove the impossible condition from the copied page using Condition from the Home
tab, and click Delete Condition. Note - if you want to have a condition on this page, add
it here. Just make sure that you remove the impossible condition portion from it. This will
make the live page behave the way it should. Click Save.
618
CONFIDENTIAL
Step 9:
Next, you will convert the Live Page into XSL Code (See Recipe 40.4), and modify it. Click
Save Page from the Home toolbar tab, and then click Page Code from the Home tab after.
In the code that appears, make any desired changes that you need to.
IMPORTANT! Due to an issue with Code-Mode Pages you should change the masterreference of the <fo:page-sequence> tag to be that of your Original design-mode page
*NOTE: The Document Engine is going to save this page (which is your copy of the
original) as an XSL snippet. You will NOT be able to revert back to design mode for this
page, which is why we are performing this on a copy and not the original.
USEFUL TECHNIQUES
CONFIDENTIAL
619
620
CONFIDENTIAL
42
EXAMPLE USE CASES
In This Chapter:
CONFIDENTIAL
621
622
CONFIDENTIAL
Step 5:
Click on the Body tab, and go to the Image property. We are going to tell this page layout to
read our global watermark variable. Enter {$watermark} into the Image field. It is important
to enter the {$} brackets as well, since this tells the processor that the image URL is
contained in an XSL variable called $watermark.
Step 6:
Click Apply Layout.
CONFIDENTIAL
Step 7:
Save the document, and test your new watermark!
623
Note that the watermark image will only appear on the document output when printed, and will
not be displayed inside of the page editor.
624
CONFIDENTIAL
Step 3:
With your cursor OUTSIDE the entire conditional block, create another Conditional. This
time, set the conditions to be Show Discount is equal to false. Inside of the content of the
new conditional, insert and populate a table that would appear if the discount column is to be
You want to display part line items that are associated to a parent model line item. In the following
example, we are going to group our models & their associated accessories so that there is a page
for each model. On each model page, there is a table of accessories that belong to the model.
CONFIDENTIAL
625
Step 3:
Add a new Document Flow XSL Snippet. This is going to contain an XSL variable,
model_line, which will contain the data of current line item of the loop. In our case, it will be
model data from the XML. We will need to refer to it later from within the accessories loop,
so insert the following code & save:
626
CONFIDENTIAL
Step 4:
Re-order the snippet in the Flow tree, so it is the first item under the Product Loop. Save
the document afterwards.
We recommend that whenever you create a Flow loop, that you create this XSL
snippet to contain the model data. This way, you can easily refer to the parent
model data whenever you are looping through sub-line items within the detail
pages, etc.
Now our final Flow looks something like the below. It is important that Model Variable is
above the detail page.
Step 5:
Next Open the Model Detail Page for editing by double-clicking on it. Add whatever content
you want, besides the associated parts which we will get to in the next step. In the example
below, weve added some information about the model.
Insert the dynamic data you want to associate to the columns. To avoid frustrations, be sure
to use the best practice tips outlined in the following recipes!
CONFIDENTIAL
627
For the recommended accessories, we created a table of 1 row and a table header. We set a
Repeating Row on the first row in the table.
Display a Table Row for Each Line Item. You may decide to repeat over accessories using a
Repeating Section instead, that is fine too. Just make sure that your loop conditions for the
accessories is set up as the following.
For the Total price, you can insert an XSL Snippet with the following code:
<xsl:call-template name=BMI_universalFormatPrice>
<xsl:with-param name=price select=sum(/transaction/data_xml/
document[@data_type=3 and _parent_doc_number=$model_line/_document_
number]/extendedSellPrice_line)/>
<xsl:with-param name=currency>USD</xsl:with-param>
</xsl:call-template>
Replace extendedSellPrice_line with the line item attribute of your choice. This is what
will be used in the summation. Also notice how you are using the model_line variable you
created in step 3.
Its also a good idea at this point to save the document, in case you get timed out and your
changes get lost.
Step 6:
Setting up the Accessories Loop. This loop is where the magic happens. The end goal here is
to have this loop over all parts that belong to the current model. To do this, set up a loop to
loop over Part Line Items, sorted by Sequence Number ascending by Number.
We are also going to add a Filter for the model comparison check. To do this, check the Add
Filters? Box, and select Parent Document Number =. Leave the value blank for now. Save it
628
CONFIDENTIAL
What does this Filter do? The Filter that you added, (Parent Document Number), will
only select part line items that have a certain parent document number value. Since weve
left the value blank, the loop will probably not return anything. To fix this, we are going to
convert this loop condition into custom XSL. Dont worry, it is pretty painless and easy to
do, since we set up our Model Variable snippet in the Flow earlier.
There are two line item system attributes that are related to line item grouping.
These are Parent Document Number (_parent_doc_number) and Parent Line
Item (_parent_line_item).
Parent Document Number (_parent_doc_number) will equal the Parent Line
Item Document Number (_document_number).
Parent Line Item (_parent_line_item) will equal the Parent Line Item Model
Variable Name (_model_variable_name)
What is the difference? The main difference is that _parent_doc_number will
let you find the EXACT parent line item. _parent_line_item, on the other hand,
only gives you the type of parent (the product it belongs to).
Step 7:
If you havent saved the loop from Step 6 yet, save it now. Once you do, re-open the loop for
editing. You should now see a View XSL button in the window. Click it.
Step 8:
You should now be looking at some generated XSL code that looks like the below:
CONFIDENTIAL
629
The Doc Engine has converted the loop expression into XSL, and is allowing you to
customize it as you wish. Sweet! If you are technical in nature, this should really excite
you. If you arent technical, you may be a little scared at this point. Dont worry, the only
modification we need to do here is to pop in the document number of our model. Heres
how.
Step 9:
In the text area, find the piece that says:
normalize-space(./_parent_doc_number)=
Step 10:
Save the change. You will see a popup that warns you that by saving, you will not be able
to edit your loop using design mode again. Go ahead and click OK. For the most part, not
being able to go back to design mode for expressions is not a big deal, since they can be
created again fairly easily.
Step 11:
Save the document, and preview the output.
630
CONFIDENTIAL
CONFIDENTIAL
631
APPENDIX A
WORKAROUNDS & TROUBLESHOOTING
A.1 - BigMachines attributes are not included in the Dynamic Data Tree
Problem:
The Dynamic Data Window is not displaying a commerce attribute that you added.
Solution:
You need to refresh the data sources. To do this, select Refresh Data Sources from the Document
Menu in the Document Engine. Next, close the Dynamic Data Window (if you have it open) and
then re-open it.
A.2 - You saved content to Content Library, but it is not showing up in the Tree
Problem:
You saved content to the Content Library, but it is not showing up in the Content Library Tree.
Solution:
You need to close and re-open the Dynamic Data Window.
A.3 - The Document Engine froze, and you are not able to edit anything
Problem:
You cannot perform any editing in a page region.
Solution #1:
If the cursor is inside of a dynamic text label, you will not be able to edit it. If you are not inside
of a dynamic text label or icon, the solution is to refresh the Document Engine. You can do this by
both closing and re-opening the Document Engine window, or by pressing F5 on your keyboard.
Solution #2:
If Solution #1 doesnt work, it could be that you have inadvertently corrupted a dynamic label. To
confirm that this is the issue, take a look at the bottom selection toolbar. If you see <Inline Style>
appear at the end, then he only fix is to use the solution in A.4 Firebug in Firefox to remove the
offending item(s).
632
CONFIDENTIAL
A.4 - You opened a Page for editing and see bits of a dynamic data that you cant
remove
Problem:
Sometimes the dynamic labels and icons can get separated from their content. For example, a
heart icon may get separated and left in the editor even if its dynamic data had been deleted.
Solution #1:
If you havent saved the page yet, you can click outside of the dynamic label (anywhere else in the
region editor) and then press CTRL-Z on the keyboard until the dynamic element looks complete
again.
Solution #2:
If you are unable to fix the problem using Solution #1, the only fix is to use the Firebug tool in
Firefox to remove the corrupted label/content. If you are comfortable with editing HTML and
using Firebug, you can open Firebug on the Document Engine and use its Inspect feature to
manually delete the offending bits of HTML. Be sure to save the page afterwards.
If you are not comfortable with doing this, please contact your Engagement Manager or the
BigMachines Support Center for help.
A.5 - Inserted item from Content Library Tree appears corrupted after saving & reopening the Page
Problem:
You inserted an item from the Content Library Tree. It looks fine after insertion, but after you
saved the page and re-opened it, it looks corrupted.
The only fix for this is to use Firebug with Firefox, as outlined in problem A.4 above.
CONFIDENTIAL
633
Appendix A
Solution:
There is a known issue if you save a Conditional or Repeating Section to your content library
AND there was a table contained within the content, inserting back into the editor will cause the
table to break-out of the dynamic container, and leave an un-editable dotted box below it.
A.6 - You have a Condition or Loop on a table row, but cant edit or delete it
Problem:
You are unable to enable to click on the Edit Condition or Edit Loop buttons in the Table
toolbar for a table row.
Solution #1:
Make sure that the cursor is inside of a table cell. The cursor must be inside of a table cell of the
row you want to edit.
Solution #2:
The best way to add or edit Table Row Conditions or Loops, is to click the <Cell> button
(if there are multiple, click on the one that belongs to the table row you want to edit) on the
selection toolbar at the bottom of the editor. After clicking this, the Edit buttons on the Table
toolbar should become enabled if you have an existing Condition or Loop on the row.
634
CONFIDENTIAL
A.8 - How do you insert text before or after a Dynamic Data element? The cursor
seems stuck.
Problem:
You need to add some text before or after a Dynamic Data element, Loop, or Conditional but are
unable to use your mouse to access the space.
Solution:
Use your mouse to single-click on a Dynamic Data label or space between the icons. When
your cursor is on a dynamic element, you can use the keyboard shortcuts SpaceBar and
CTRL+SpaceBar to insert whitespace after or before the dynamic element.
A.9 - Your table column width does not look right in the editor
Problem:
You have a table column of .1 inches as an example. You inserted a dynamic data into the column,
and the column stretched to fit the size of the data element.
Solution:
This is a known issue in Firefox; your output will look fine.
A.10 - Unable to click into a table cell after deleting a dynamic data item
Problem:
You deleted a dynamic data item from a table cell, and now the entire table cell is un-editable.
To avoid this problem in the future, insert a few spaces after the dynamic data item (using the
solution in A.8 above) before deleting it.
CONFIDENTIAL
635
Appendix A
Solution:
This is a problem that is affecting Firefox. It happens when a table cell is completely empty.
Press CTRL + Q to refresh the content in editor. The table cell should appear again. If you still
experience any instabilities, its best to refresh the Document Engine browser completely (Save
your document first).
Problem:
You are no longer able to select table cells in Firefox. Instead, when you try to click & drag to
select cells, random cells from other tables get selected instead, or it selects the wrong ones.
Solution:
This is a known Firefox issue. The fix is simple. Press CTRL + A on the keyboard to perform a
select all on the editor text. Next, just click on the editor to deselect the content. You should
now be able to select cells again.
A.12 - You cant add any content to the end of the editor
Problem:
You are having trouble adding content to an editor, perhaps because the last item in the editor is
a table, and you cant click in the space after the table to add more content.
Solution:
If you find yourself needing to insert some content at the beginning or end of a page region
editor (as in the use case above), use the Insert Paragraph at Beginning and Insert Paragraph at
End buttons on the Home toolbar.
636
CONFIDENTIAL
Sometimes a document will get corrupted for an unknown reason. If you exhaust all options and
are still not able to solve this problem and get the output to work, your best option is to delete
the document and start over with a fresh copy of the original document (which you should have
done before making any new edits see this recipe on how to Backup and Restore a Document.
Make sure any XSL snippets are only accessing variables that are in the scope of the snippet. To
verify this, view the Document XSL output.
A.14 - Trying to view page code doesnt show code box
Problem:
You receive a blank blue background after clicking Page Code.
Solution:
The Document Engine will only display the code box once per editor session. As a workaround,
restart the Document Engine (be sure to save any changes to the document first), and re-open
the page.
A.15 - Changing the font size doesnt work or causes other text to change
Problem:
You see erratic results after changing a font size from the drop-down menu.
Solution:
Try adjusting the paragraph or text selection, inserting spaces before or after dynamic elements
before sizing, and removing formatting from text before applying a new font size.
A.16 - Document XSL generated by Document Engine doesnt work as a custom XSL
Problem:
You edited the XSL generated by the Document Engine, and used it as a custom XSL in
BigMachines. Then you get an XSL error when previewing the output, even before making any
changes.
637
Appendix A
Solution:
Try the following:
Remove all blank fo:table-header tags. They will show up in the document as <fo:tableheader/>
See Troubleshooting for A.13 XSL Error when Previewing Output
APPENDIX B
FORMATTING EXPRESSION EDITOR PARAMETERS
B.1 - General Functions
normalize-space
Trims any extra whitespace before and after the data value
No Parameters
count
Returns the number of times the data value occurs. This function is probably not very useful.
Sum
Returns the sum of the numeric value of each node in the data value. This function can be useful
for summing a particular line item attribute.
B.2 - String Functions
substring
The substring function returns the substring of the data value starting at the start-index with
length of length. For example, if the data value is 12345, then substring(2,3) returns "234".
Parameters:
substring-after
The substring-after function returns the substring of the data value that follows the first
occurrence of the search string, or the empty string if the search string was not found. For
example, if the data value is "1999/04/01", then substring-after("/") returns 04/01, and substringafter("19") returns 99/04/01.
Parameters:
search string : {text} : starting position to take the substring from
substring-before
The substring-before function returns the substring of the data value that precedes the first
occurrence of the search string, or the empty string if the search string was not found. For
example, if the data value is 1999/04/01, then substring-before(/) returns 1999.
Parameters:
search string : {text} : starting position to take the substring from
638
CONFIDENTIAL
translate
The translate function returns the data value with occurrences of characters in the searchcharacters parameter replaced by the character at the corresponding position in the replacecharacters parameter. For example, if the data value is bar, then translate("abc","ABC") returns
the string BAr.
If there is a character in the search-characters parameter with no character at a corresponding
position in the replace-characters parameter (because the search-characters parameter is
longer than the replace-characters parameter), then occurrences of that character in the first
argument string are removed. For example, translate("abc-","ABC"), where the data value "--aaa-", returns "AAA".
If a character occurs more than once in the search-characters parameter, then the first
occurrence determines the replacement character. If the replace-characters parameter is
longer than the search-characters parameter, then excess characters are ignored.
Parameters:
concat
The concat function returns the concatenation of its arguments.
Parameters:
string-length
The string-length function returns the number of characters in the data value
B.3 - Numeric Functions
Most of the below functions are standard XSLT functions. Detailed documentation on
parameters can be found on XSLT reference web sites such as:
http://www.devguru.com/Technologies/xslt/quickref/xslt_index_functions.html
format-number
The format-number function is used to convert the data value into a formatted string.
Parameters:
format : {text} : Required. Specifies the format pattern. Here are some of the characters
used in the formatting pattern:
# (Denotes a digit. Example: ####)
0 (Denotes leading and following zeros. Example: 0000.00)
. (The position of the decimal point Example: ###.##)
CONFIDENTIAL
639
Appendix B
currency
Formats a number into a currency string.
Parameters:
round
Rounds the data value to the nearest integer.
floor
Returns the largest integer that is not greater than the data value
ceiling
Returns the smallest integer that is greater than the data value.
B.4 - Date Functions
shortdate
Formats a BigMachines date attribute into a short-hand readable format such as 2/12/2008.
Parameters:
640
CONFIDENTIAL
longdate
Formats a BigMachines date attribute into a long-hand readable format such as February 12, 2008
Parameters:
separator : {text} : Required, though not used. Enter anything into this field.
Appendix B
CONFIDENTIAL
641
APPENDIX C:
KEYBOARD & MOUSE SHORTCUTS
C.1 - General
Key
Description
CTRL + X
CTRL + C
CTRL + V
CTRL + E
CTRL + Q
CTRL + B
CTRL + I
CTRL + U
CTRL + Z
Undo
CTRL + Y
Redo
Description
CTRL + SpaceBar
SpaceBar
C.3 - TABLES
Key
TAB
642
Description
Inserts a single whitespace character directly
AFTER the current dynamic element. This
prevents you from getting stuck.
On a table cell, this will add the table cell to the
current selection. In IE7, this is the only way to
select table cells for operations such as Borders or
Background.
CONFIDENTIAL
Appendix C:
CONFIDENTIAL
643
INDEX
1-D Arrays
2-D Arrays
456
457
acos(x) 421
Action 164
Adding a Column Layout 264
Adding An Attribute
269
Adding and Editing a Line Item Grid
274
Adding and Editing An Action Strip 270
Adding an Outer Panel 259
Adding Approvers
244
Adding a Reason 242
Adding a Spacer 267
Adding/Editing A Copy Sequence 314
Adding/Editing A Data Column
307
Adding/Editing a Notification
298
Adding/Editing A Process Manager Column 309
Adding/Editing A Timer 302
Adding/Editing a Transition Rule 294
Adding/Editing a Workflow Step 285
Adding/Editing Invocation Actions 324
Adding/Editing Invocation Rules 326
Adding or editing a Commerce Tab 261
Array Attributes 137
Array Control Attributes 137
arrayFunctionTest(UserInfo, SortDirection, MaxValue, MinValue, UseZero)
asin(x) 420
Assign User Rights to Invocation Action
327
atan(x) 422
Attribute Value Pricing Properties 133
109
CONFIDENTIAL
468
339
338
458
395
CONFIDENTIAL
645
462
459
CONFIDENTIAL
460
478
479
224
Example of round(x)
409
Example of sinh(x)
423
Example of sin(x) 418
Example of sizeofarray() for a 1-D array
464
Example of sort(arrayIdentifier, [sortOrder], [sortType])
Example of split(str, separator)
466
Example of sqrt(x)
416
Example of string[n]
448
Example of string [n][n] 452
Example of strtojavadate(str, format)
431
Example of substring(str, start, [end])
404
Example of tanh(x)
425
Example of tan(x) 419
Example of Test Script
471
Example of trim(str)
400
Example of upper(str) or lower(str)
394
Example of urldatabypost(URL, url_param, default_value)
Example of urldatabypost(URL, url_param, default_value)
Example of User Administration List Page: 37
Example of Using Template Preview and Insert Into Text:
Export a Data Table (or multiple tables)
90
Export Methodology
78
exp(x) 412
File List 34
Final Approval 297
Finding an Average
float[n] 451
float[n][n]
454
For Example: 480
For Example: 481
For Example: 482
494
General 512
General (continued)
513
Grouping Attributes Within Tabs
151
89
CONFIDENTIAL
647
integer[n]
integer[n][n]
450
452
Linear Interpolation
496
List of Supported Currencies
LITERALS
391
ln(x) 414
log(x) 413
100
86
Overview of BigMachines:
28
Overview of Configuration Flow (User-Side) 143
Rejection
88
297
CONFIDENTIAL
485
tanh(x) 424
tan(x) 419
To Add a Complex Conditional: 574
To Add a Configurable Attribute 121
To Add a Folder 83
To add a library function: 388
To Add a Model: 116
To Add an Attribute
210
To Add a New Page:
521
To Add a Page to Display for Each Line Item: 524
To Add A Product Family 112
To Add a Product Line
116
To Add a Table 84
To Add Files to the File Manager 32
To Add or Edit a Document Action
230
To Add/Remove a Header Row: 585
To Apply a Background Color to a Table Cell:
To Apply a Margin or Padding Value: 548
To Center Align a Table: 588
To Change Headers and Footers: 533
To Change Page Orientation and Margins: 532
To Change the Default Page Font Family
552
To Change the Default Page Font Family
556
To Convert a Page into Custom XSL Code: 610
To Copy & Paste from Word, Notepad, Etc. 550
To Create a Backup of a Document:
525
To Create a Bookmark: 602
To Create a Bookmark: 603
To Create a Bookmark: 604
To Create a Calculated Column 360
To Create a Custom Part Field
70
590
CONFIDENTIAL
649
CONFIDENTIAL
139
CONFIDENTIAL
651
652
CONFIDENTIAL
CONFIDENTIAL
653