Sunteți pe pagina 1din 653

BigMachines Application

Administration Cookbook

CONFIGURATION

COMMERCE

DOCUMENT ENGINE

Toni Pastorino
With contributions from BigMachines
Development, QA, Professional Services
and Product Management teams

BigMachines Application Administration Cookbook


1st Edition (October 2010)
Copyright 2010 BigMachines, Inc.
All rights reserved. Any technical documentation that is made available by BigMachines, Inc. is the
copyrighted work of BigMachines, Inc. and is owned by BigMachines, Inc.
The technical documentation is being delivered to you AS-IS. BigMachines, Inc. makes every effort to
provide the most accurate and relevant information available to date. Any use of technical documentation
or the information contained therein is at the risk of the user. No part of the contents of this book
may be reproduced or transmitted in any form or by any means without the written permission of
BigMachines, Inc.
The examples companies, organizations, products, people and events depicted herein are fictitious. No
association with any real company, organization, product, person or event is intended or should be
inferred.
THIS DOCUMENT IS CONFIDENTIAL
Definition of Confidential Information.
Confidential Information means any information which the Discloser keeps secret from its business
competitors and the public, and includes information disclosed in writing, verbally, electronically, or any
tangible form. The Recipient shall have a duty to protect only that Confidential Information which (a) is
disclosed in writing or any tangible form and is marked Confidential at the time of disclosure, or (b) is
disclosed by the Discloser in any other manner and is designated as confidential at the time of disclosure
and in a written memorandum delivered to the Recipient within thirty (30) days of the disclosure.
Use, Non-Disclosure.
Recipient shall not disclose Confidential Information to any third parties or employees of Recipient,
except for those with a good faith need to know of this information. Recipient shall not reverse engineer,
disassemble or decompile any prototypes, software or other tangible objects which embody a Disclosers
Confidential Information. Recipient agrees to use the same level of care, but no less than a reasonable
degree of care, as Recipient uses to protect its own Confidential Information of a similar nature, and shall
immediately notify the Discloser in the event of any unauthorized use or disclosure.

Retail Value: $199.95

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

USER AND COMPANY SET-UP


2.1: HOST COMPANY
2.2: USER SET-UP
2.3: USER ADMINISTRATION
2.4: ADMIN ACCESS CONTROL
2.5: GROUP ADMINISTRATION
2.6: PARTNER ORGANIZATIONS
2.7: ACCOUNTS

49
50
52
52
54
57
60

GENERAL APPLICATION SETTINGS


3.1: APPLICATION BRANDING
3.2: PAGE TEMPLATES AND HOME PAGE FLOWS
3.3: NAVIGATION MENUS
3.4: GLOBAL SYSTEM SETTINGS
3.5: FAVORITES LIST
3.6: BULK UPLOAD AND DOWNLOAD

65
66
68
68
70
72
73
75
76
77
78

PARTS AND PRICE BOOKS


4.1: MANUALLY ADDING A PART
4.2: SEARCHING FOR PARTS
4.3: PARTS ASSOCIATIONS
4.4: CUSTOMIZING PARTS FIELDS
4.5: USING FILTERS
4.6: PRICE BOOKS OVERVIEW
4.7: PRICE BOOKS ASSOCIATIONS
4.8: PRICE BOOK FIELDS
4.9: PRICE BOOKS (USER-SIDE)
4.10 INTEGRATING PARTS WITH A PARTNER

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

CONFIGURATION FLOWS AND LAYOUT


9.1: OVERVIEW OF CONFIGURATION FLOWS
9.2: CREATING A CONFIGURATION FLOW
9.3: SETTING TABS IN FLOWS
9.4: GROUPING ATTRIBUTES IN TABS
9.5: DEFINING THE TAB LAYOUT
9.6: DEFINING GROUP LAYOUT
9.7: ADVANCED TEMPLATE EDITOR
9.8 CONFIGURATION STYLESHEET

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

10.8: CONSTRAINT RULES


10.9: RECOMMENDED ITEM RULES
10.10: ARRAYS AND CONFIGURATION RULES
10.11: ORDER OF OPERATIONS

197 COMMERCE
199
200
201

QUICK START OVERVIEW


11.1: COMMERCE OVERVIEW
11.2: COMMERCE DOCUMENTS

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

14.6: INPUT COLUMNS


14.7: INPUT ELEMENTS
14.8: ACTION STRIPS
14.9: LINE ITEM GRIDS
14.10: COMMERCE STYLESHEET

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

369 BIGMACHINES SCRIPTING LANGUAGE (BML)


371
372
372
373
373
374
374
374
377

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

BML FUNCTION EDITOR


21.1: FUNCTION EDITOR BASICS
21.2: SCRIPT DEFINITION AREA
21.3: ATTRIBUTES AND ACTIONS
21.4: FUNCTION WIZARD
21.5:VARIATIONS OF THE DEBUGGER
21.6 : LIBRARY FUNCTIONS

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

ARRAYS AND ARRAY FUNCTIONS


26.1: ARRAY ATTRIBUTES
26.2: 1-D ARRAYS
26.3: 2-D ARRAYS
26.4: RANGE(x)
26.5: POPULATING ARRAYS
26.6: APPEND(arrayID, newArrayElem)
26.7: REMOVE(arrayidentifier, removePos)
26.8: SORT(arrayID,[sortOrder],[sortType])
26.9: MAX(arrayIdentifier) AND MIN(arrayIdentifier)
26.10: FINDINARRAY(arrayID, element)
26.11: REVERSE(arrayIdentifier)
26.12 ISEMPTY(arrayIdentifier)
26.13: SIZEOFARRAY(arrayIdentifier)
26.14: SPLIT(str, separator)
26.15: JOIN(str_Array, delimiter)
ARRAY FUNCTIONS USE CASE

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

28.3: USE CASE: find an average


28.4: USE CASE: linear interpolation

501
502
504

ADVANCED USE CASES


29.1: LOOPING THROUGH LINE ITEMS
29.2: SOAP CALLS IN BML

509
510
512
512

TROUBLESHOOTING BML
30.1: COMMON ERROR MESSAGES
30.2: TIPS AND REMINDERS
30.3: BEST PRACTICES FOR BML

515 DOCUMENT ENGINE


517
518
520
521
522
523
523
524
525
525
526
526
527
528

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

GENERAL PAGE EDITING AND TEXT FORMATTING


The Home Toolbar
The Format Toolbar
The bottom selection toolbar
33.1: CHANGE THE FONT FAMILY
33.2: CHANGE THE FONT SIZE
33.3: CHANGE THE FONT COLOR
33.4: INSERT A SPECIAL CHARACTER/SYMBOL
33.5: INSERT A PAGE BREAK

10

CONFIDENTIAL

33.6: APPLY A MARGIN OR PADDING VALUE


33.7: DISPLAY A PAGE BASED ON CONDITIONS
33.8: COPY/PASTE FROM EXTERNAL SOURCE
33.9: COPY/PASTE FROM WITHIN THE DOC ENGINE
33.10: COPY/PASTE NON-FORMATTED DYNAMIC DATA
33.11: COPY/PASTE FORMATTED DYNAMIC DATA
33.12: CHANGE THE DEFAULT PAGE FONT FAMILY

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

37.19: PARAGRAPH-IFY A TABLE CELL

593
594
595
595
596
597
598
599

IMAGES & HYPERLINKS


38.1: INSERT AN IMAGE
38.2: INSERT A HYPERLINK
38.3: EDIT IMAGE DIMENSIONS
38.4: INSERT AN IMAGE FROM AN EXTERNAL URL
38.5: DISPLAY A PAGE BACKGROUND IMAGE
38.6: INSERT A LINK FROM AN EXTERNAL URL
38.7: EDIT A HYPERLINK

601
602
603
603
604
604

PAGINATION & BOOKMARKS


39.1: CREATE A BOOKMARK
39.2: DELETE A BOOKMARK
39.3: INSERT A LINK TO AN EXISTING BOOKMARK
39.4: DELETE A BOOKMARK LINK
39.5: INSERT A PAGE NUMBER

607
608
608
608
610
611
611
612

ADVANCED: XSL SNIPPETS


40.1: CUSTOM GLOBAL XSL TEMPLATES
40.2: CUSTOM XSL:FO PAGE SEQUENCES
40.3: EMBEDDED XSL SNIPPETS
40.4: CONVERT A PAGE INTO CUSTOM XSL CODE
40.5: PREVIEW THE OUTPUT XSL CODE
40.6: USING CUSTOM XSL FOR LOOP EXPRESSIONS
40.7: USING CUSTOM XSL FOR CONDITIONS

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

EXAMPLE USE CASES


42.1: DISPLAY A CONDITIONAL WATERMARK
42.2: DEFINE A MULTI-COLUMN T&c PAGE
42.3: TABLE COLUMNS BASED ON CONDITIONS
42.4: SHOW MODEL ACCESSORIES
42.5: CREATE A SIMPLE TABLE OF CONTENTS

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

ABOUT THIS BOOK


The purpose of this book is to guide administrators through the entire BigMachines application
through examples and tutorials. Readers will also find a glossary, index, tables of elements, best
practices and reference windows throughout the book.
INTENDED AUDIENCE

ABOUT THIS BOOK

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 USE THIS BOOK


This book provides comprehensive instruction in administration of the BigMachines Commerce
engine. This book is organized in a manner that best explains the Commerce Process and guides
readers through how to customize their Quick Start platform from start to finish. Throughout the
book, you will see different sections that a highlighted for quick reference.

HOW-TO
WINDOW

POINTS TO REMEMBER

TUTORIAL

Anything that is presented in this style of box is a session that combines


reading, hands-on and step-by-step work to guide readers through the
steps and Best Practices.

Throughout the chapters you will come across Points to Remember


boxes. These are tips that anticipate common problems or mistakes.
The red boxes are meant for easy reference and troubleshooting.

Tutorials are provided throughout the cookbook to give administrators


experience working with more advanced elements of Commerce. Some
examples require students to define advanced functions and use basic
BML language.

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.

BIGMACHINES ADMIN PLATFORM


The BigMachines Administration Platform is a rich, powerful tool that allows the BigMachines
administrator to access the application at any time. The admin platform provides tools that assist
administrators in building and customizing their BigMachines application. It allows users to set
up accounts, users, product catalogs, parts, configuration, commerce processes and utilize the
Document Engine.You can also find administration tools such as bulk upload/download, integration,
data tables and a file manager, which makes managing your BigMachines application easier. There are
six main components of the BigMachines Admin Platform:

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.

BIGMACHINES ADMIN PLATFORM

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

COMMERCE AND DOCUMENTS

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.

BIGMACHINES ADMIN PLATFORM

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.

BIGMACHINES ADMIN PLATFORM

STYLES AND TEMPLATES

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

BigMachines digitizes selling processes and captures


an organizations tribal knowledge to provide online
product selection, configuration, quoting, and ordering
capabilities for new products and aftermarket parts
and services.
BigMachines ensures effective quote and order
management and provides powerful reports, analysis
and forecasts across all sales channels and customers.
The application easily integrates to CRM and ERP
systems to eliminate duplicate data entry and
maintenance and to fully leverage the existing IT
infrastructure.

CONFIDENTIAL

27

1.1: UNDERSTANDING BIGMACHINES

1.1: UNDERSTANDING BIGMACHINES


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
our solution from anywhere in the world. As a result, our customer can rapidly implement and
deploy our BigMachines solution globally.
Overview of BigMachines:

28

CONFIDENTIAL

1.2: APPLICATION BASICS


Your Role as the Administrator:




Configures the BigMachines application to satisfy user needs


Maintains data and rules from application requirements
Upload new data tables and part masters as needed
Adds additional products, attributes, and rules when new features arrive
Provides front-line user support for their companys BigMachines implementation

Using Quick Links


Quick Links are available in Configured Products (Configuration) and in Process Definition
(Commerce). BigMachines Best Practice is to use Quick Links as often as possible to quickly
navigate through the application. Quick Links are accessed from the Admin Home Page, by clicking
on the icon next to Configured Products or Process Definition. They can also be accessed from
within both of these section through an Open Quick Links link.

GETTING STARTED

CONFIDENTIAL

29

1.3: VIEWING VERSION DETAILS

1.3: VIEWING VERSION DETAILS


In order to display which version of the application you are using, you will need to be on the Admin
Platform Home Page. Just above the Application Branding and Home Page section, there will be a
link called View BigMachines Version. Click on this link to see basic set up information about
your site, including the BigMachines application version, major features in the release, partner
integration, if any and memory statistics.

On this page you can view the following details:


Site Information
Version
Release Date
Connection Pool Size
Run Task Thread
WebMethods

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

If the reporting module is enabled.

Integration

If the application is integrated with another service


provider.

Configuration Cache

30

If the configuration cache is enabled or not. Enabling the


configuration cache will make your configuration module
faster.

CONFIDENTIAL

1.4: THE FILE MANAGER


An integral part of BigMachines is the File Manager. You can upload any kind of file to the File
Manager, organize them into folders and access them from anywhere on the Internet.
The File Manager is used for:
o External images
o JavaScript files linked to various areas on the site
o CSS stylesheets for Configurations Flow Templates
o Excel spreadsheets, which hold the master data
o Etc.
The File Manager is used mainly to house images that will be used on your site in overall look and
feel such as header and footer, as well as images that appear in your proposal documents. The File
Manager can be accessed from a couple of places on the Admin Home Page: The Navigation Bar and
within the Utilities section.

GETTING STARTED

CONFIDENTIAL

31

To Add Files to the File Manager

1.4: THE FILE MANAGER

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

SEARCHING WITHIN THE FILE MANAGER


There are two different ways to search for files within the File Manager:
1. Using the Search feature
2. Clicking on a letter or number above the File Manager List within a folder.
Search Feature
The Search section in the File Manager allows you to perform a more advanced search for files.

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.

1.4: THE FILE MANAGER

Searching by Letter or Number


You can also search through files within a folder based on the letter or number the file begins with.

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

Use this check box to select a file to be moved to a folder


or to be deleted.

File Name

The name of the file you uploaded.

File Location

Location of the file within your application. You will need


this to reference your file anywhere on the application.

Description

Description of the file.

Replace

Click replace if you need to update the file.

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

The User and Company Setup section allows you to


manage your company information, internal users,
partner organizations and their users, customer
accounts, Single-Sign On (SSO) settings, and Broadcast
Emails. Single Sign On allows customers to utilize their
corporate infrastructure for authentication and to
automatically log into BigMachines without the need
for multiple logins and re-authentication. Broadcast
Emails allows you to send an email blast to your Host
Company Users, Partner Organization Users or both.
Please see the Help for more information on both
of these features. This chapter focuses on setting up
users, groups and companies.

Example of User Administration List Page:

CONFIDENTIAL

37

2.1: HOST COMPANY


The Host Company refers your company (in most cases), which is of FullAccesswithESales company
type.
The Host Company has 4 user types: FullAccess, ChannelAgent, SalesAgent and Restricted Access.
Only the SuperUser and FullAccess users within the Host Company can view and edit all Host
Company information, accounts and internal users. They can also create, view and edit the accounts
of all Partner Organizations and the users associated with these organizations.
Functions

2.1: HOST COMPANY

SuperUser

FullAccess

Upload Products

Modify Commerce

Modify Configuration

View/Modify Users

Manage Accounts

Manage Groups

Manage Own User


Information

SalesAgent

RestrictedAccess

X
X

To Edit Host Company Information


From the Admin Home Page, go the section User and Company Administration >
Host Company.
Step 1:
Complete required information (marked by an *) and as many other fields as you deem
necessary.

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.

2.2: USER SET-UP


Anyone that needs to conduct business on your companys behalf must have a BigMachines user
account. In this section, you can manage the internal users of the system and determine their
access rights. The number of internal users is defined by the BigMachines Customer Agreement.
Users can be set-up manually from the Admin Home Page. You can also use Bulk Upload, manage
with SOAP or manage them with a 3rd party Identity Provider. We recommend using the bulk
upload process for entering large amounts of data. You can manage users individually from the User
Administration List page, which can be found in two different places:
By clicking Users from the Admin Home Page Navigation menu
Navigating to User and Company Information > Internal Users.

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

USER AND COMPANY SET-UP

To Manually Set-Up BigMachines Users

2.2: USER SET-UP

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

2.3: USER ADMINISTRATION


From the User Administration List page, you can perform a variety of maintenance actions:

Action
Add

What Does It Do?


Adds a user account. See Recipe 2.2.
Edits user accounts and groups associations. See Recipe
2.5 for more information regarding groups.

Activate/Inactivate

Activates or deactivates users by selecting the check box


next to the appropriate login ID and clicking Activate or
Inactivate.

Sort Fields
Export User Details
Proxy Login

Sorts fields based on Login ID, Name, User Type or Partner


Login by clicking on the header label.
Exports all user details in CSV format.
Click on the proxy login ID for a user to log into the
system as that particular user type, with the access rights
of that user. You can do anything that particular user type
is able to do.
Clicking the Proxy Profile link displays the User
Administration page for that user. Click Proxy Logout to
return to your user type and the User Admin List page.

Once created, users cannot be deleted. Instead, you must inactivate a user.

CONFIDENTIAL

41

USER AND COMPANY SET-UP

Click [Login] Name

2.4: ADMIN ACCESS CONTROL

2.4: ADMIN ACCESS CONTROL

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.

To Set Admin Permissions


Step 1:
Login as superuser or fullaccess user with superuser permissions.
Step 2:
Click on Users in the Navigation menu or Internal Users from the User and Company
Administration section.
Step 3:
Select a FullAccess user on the User Administration list page.
Step 4:
Select the Product Families and/or Data Tables that this user can have access to on the
Access Permissions tab of the User Administration page.

42

CONFIDENTIAL

2.5: GROUP ADMINISTRATION


Groups are a collection of users and are useful for determining access rights for certain area, for
example, commerce documents. Once you land on the Group Administration List page, you can
Add or Edit user groups.

To Create BigMachines User Groups


From the Admin Home Page, click on Groups in the Navigation menu.
Step 1:
Click Add on the Group Administration List page.
Step 2:
Enter a Group Name and Variable Name. Group names can only contain alphanumeric
characters and underscores. Group names cannot being with an underscore.
Step 3:
Add users by selecting a name from the Users drop-down menu and click Add. The
added users will e visible in the Current Group Members field.

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

USER AND COMPANY SET-UP

Step 4:
Remove users by selecting one or more users and clicking Delete.

2.6: PARTNER ORGANIZATIONS

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.

2.6: PARTNER ORGANIZATIONS


You can control the Partner Organizations use of the system and determine their access rights
in this section. Partner Organizations are typically used when a BigMachines customer has
independent third parties that quote and/or sell products (typically re-sellers or distributors).
All partner organization accounts are created as BuyAccess company types. (Your company is a
FullAccessWithESales company type.) The superuser of each partner organizations account can
manage its own users, groups and company information by logging in to your system with the
appropriate account information. After creating partner organizations, make sure to distribute login
information to the appropriate administrators for each company.
Before creating a new partner organization account, determine the
currencies the company wants to support so that they can be accurately set
at the time the company account gets created. Partner organization admin
users do not have the ability to edit currencies.

To Create a Partner Organization


From the Admin Home Page, go to the Users > Partner Organizations
Step 1:
Click Add on the Company Administration List page.
Step 2:
Enter a Full Company Name and Company Login. Company Login is where you give
your company a login name. This will append the login for all users, so best practice is to
keep it simple. A sample login is JoeSmith@JoesCompanyName.
Step 3:
Select the Base Language and the Supported Currencies for the company.
Step 4:
Complete required information (marked by an *) and as many other fields as you deem
necessary.

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.

It is not possible to delete a Partner Organization. To prohibit access to


your application, change the companys access rights to Denied.

CONFIDENTIAL

45

USER AND COMPANY SET-UP

Step 6:
Click Add to return to the Company Administration List page.

2.6: PARTNER ORGANIZATIONS

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.

Partner Organization Users


Anyone that you want to conduct business on your partner organizations behalf must have a user
account. New user accounts can only be created by your companys superuser. We recommend
using the bulk upload process for entering large amounts of user data. For small amounts of data,
manual entry in the Users Administration area may be a quicker process.
Admin Home Page > Users> Partner Organizations > Users > List
Refer to Recipes 2.1 and 2.2 for information on how to add users.

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

USER AND COMPANY SET-UP

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

Typically, the home page serves as a portal to product


selectors, model configurators, parts search, company
information, general product documentation, and
external links. You can define the look and feel of
the application by using CSS stylesheets, HTML,
JavaScript and XSL. You can use Home Page Flow and
Page Templates to define the User Interface for your
application.
You can also customize an HTML Header and Footer
for the site, which will be used across all pages. You
also have the ability to set your own navigation menus,
which are helpful to users and administrators when
locating frequently used sections on the applications.

CONFIDENTIAL

49

3.1: APPLICATION BRANDING

3.1: APPLICATION BRANDING


The Application Branding and Home Page section within BigMachines is a multipurpose
administration area. Functionality within this section enables you to define the look and feel of
application, including the colors and fonts used in the web pages. You can customize an HTML
Header and Footer for the site, which will be used across all pages. Additionally, this section allows
you to tailor the home page using either HTML or XSL. You can also set-up an email signature that
will be included in all emails sent by the system.
Style Sheet
This section enables you to customize the systems fonts and colors. A CSS file is used to generate
the uniform look and feel of the web site. A default CSS file is provided with the system. The UI
provides an easy way to change the colors and fonts used. For advanced customization, you can
download the default CSS file provided, make changes and then upload it as an alternate CSS file.

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

Header and Footer


This section allows the user to customize an HTML Header and Footer for all web pages in the
web site. The user is allowed to have Javascript code in the Header and Footer section. To edit the
HTML, click the Edit buttons next to the Header or Footer HTML boxes.

CONFIDENTIAL

51

GENERAL APPLICATION SETTINGS

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.

3.2: PAGE TEMPLATES AND HOME PAGE FLOWS

3.2: PAGE TEMPLATES AND HOME PAGE FLOWS


Page Templates
Page Templates offer different layouts for displaying catalog pages. The system supports page
templates for most catalog pages, allowing you to pick the layouts that work best for your system.
Each page template offers a unique layout for displaying catalog data and they control how data is
displayed, not what data is displayed.
For example, there are seven template options available for the Product Line List page: one default
template and six alternative templates. The default template displays product line search results in
a compact row format. The other templates offer alternative formats for the same data. So, if you
prefer product line search results to display in column format, you could choose template 5 which
offers column-based search results.
For more information on the different page templates, please refer to the Help database.
Home Page Flows
The system supports a set of home page flows for the purpose of defining what items are displayed
on the catalog home page. When you select a flow, you choose whether parts or products, or a
combination of both, should appear on the home page. Flow selection also determines catalog
navigation.
Home page flows are used to decide how the systems home page looks, and has an impact on
subsequent navigation. Home page flows are available for many combinations of product offerings.
There are flows for supporting a parts-only catalog, for supporting a products-only catalog, and for
supporting a combination catalog of both products and parts.
For example, if your company supports multiple product families, you could select the flow that
displays a set of product families on the home page so users can begin product searches with
product family selection. On the other hand, if your company supports a single product family, the
flow that displays product lines on the home page would be more suitable because it permits users
to bypass the unnecessary step of product family selection.

3.3: NAVIGATION MENUS


The navigation menu is a shortcut menu that lets you quickly access desired areas of the application.
You can display frequently accessed areas using either Top or Sidebar Navigation. You can also
customize your applications navigation based on Company and User Type.

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.

To Set-Up a Navigation Menu


Navigation Path: Admin Home Page > General > Navigation Menus
Step 1:
Determine whether you would like your Navigation Menus to be Top-Side or Side Bar.
Select the appropriate radio button and click Set.
Step 2:
Click on List Links next to the Navigation Menu Commerce.

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

GENERAL APPLICATION SETTINGS

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.

3.4: GLOBAL SYSTEM SETTINGS

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.

3.4: GLOBAL SYSTEM SETTINGS


You can specify general application options in this section. There are also links to the File Manager,
Error Logs, Administration Logs and setting Countries and States. Using this section, you can :






Customize general application options


Set up exchange rates
Schedule Usage Metrics Reports
Manage the Favorites List (Recipe 3.5)
Manage files within the File Manager
Customize system options in commerce and configuration
Set up validations based on user country and/or state.

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

COUNTRIES AND STATES


The countries added in this section will be displayed on the User, Company and Account
administration pages. They will also get deployed with the commerce process and will be displayed
on the country type fields on user-side transactions.

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.

GENERAL APPLICATION SETTINGS

CONFIDENTIAL

55

3.4: GLOBAL SYSTEM SETTINGS

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

3.5: FAVORITES LIST


Favorites allows each user to list their favorite product and/or parts for quick access as well as
create quotes from their Favorites List. Since Favorites lists are maintained independently of the
product catalog and parts, they can become out of synch with the catalog products and/or parts
they reference. Fortunately, Favorite lists provide an update functionality that ensure that a users
Favorites list is synchronized with the catalog and parts, ensuring that products on the Favorites List
display current catalog information.
The update engine verifies product attributes, pricing, and availability. You can schedule Favorites
List updates to run whenever you like, but ideally, they should be run during your systems low
usage times.

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

GENERAL APPLICATION SETTINGS

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.

Favorites List Status Values


A status column on the Favorites List informs users whether products have changed since they
were added to the list. Status is represented graphically with or without (for normal status) an icon.
You can customize the status icons that display.

3.5: FAVORITES LIST

The following status values are possible:


Normal
Items that can be added to a transaction directly purchased from the Favorites List have a Normal
status. There is no system-defined icon for this status. If you want to display an icon alongside
products with a Normal status, you can associate an icon with the status. Note: The Normal status
displays even if a products price or regular attributes have changed because those types of changes
do not affect whether the product can be purchased.
Delete
Items that are no longer available for purchase because they have been removed from the catalog
or changed from a direct buy to a non-direct buy have a Delete status. The system notifies the user
of this status with a delete icon.
Reconfiguration
Items that require user reconfiguration before purchase have a Reconfigure status. The system
notifies the user of this status with a reconfigure icon.

MANAGING FAVORITES LIST


This administration page is used to update the product data displayed on the Favorites List. You can
tag items for reconfiguration or change the status icons the system uses to indicate changes to the
Favorites List before performing an update.

58

CONFIDENTIAL

Using this page, you can:

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

GENERAL APPLICATION SETTINGS

1) Schedule a Favorites List Update:

3.6: BULK UPLOAD AND DOWNLOAD

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.

3.6: BULK UPLOAD AND DOWNLOAD


DOWNLOADS
Bulk Download enables you to obtain large quantities of system data. You can download data
in bulk, make batch edits to the data and then upload it. Thus, you can make changes to a large
quantity of data in an efficient manner. Downloaded files are stored on the server. Files that are
stored on the server can be downloaded onto your local system or viewed in your browser from
the server location.
The following categories can be downloaded in CSV:







Accounts (including Addresses)


Parts, Part and Pricebook Associations
Serial numbers and Serial Number Associations
User and Company Information
Configurable attributes
Product Lines
Models
File Manager

In addition to the list above, these categories can be downloaded in XML:






Commerce Transactions
Commerce Processes
Configuration Rules
Data Tables
Catalog and Configuration Data

60

CONFIDENTIAL

General Filter Fields


The table below shows the most common IDs you can use to filter records and instructions on
where to find them.
Filter Field Name

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

Company IDs can be found in the home page URL

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.

Viewing Download Status


Standard Navigation Path: Admin Home Page > Utilities > Bulk Data Services >
Download > Next Screen on the Download Category List Page > Download
The Download Status page shows the module name and status, status message and scheduled
date and time of all files scheduled for download in the previous seven days. Successful downloads
showing a completed status are removed from the download status page after seven days
Download tasks with any status other than completed are not removed from the status page.
CONFIDENTIAL

61

GENERAL APPLICATION SETTINGS

serial_number_id

3.6: BULK UPLOAD AND DOWNLOAD

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>

Viewing Upload Status


Standard Navigation Path: Admin Home Page > Utilities > Bulk Data Services > View
Upload Status
This page enables you to view the status of all upload tasks scheduled during the previous week.
Successful uploads showing a completed status are periodically removed from the upload status
page every seven days. Upload tasks with any status other than completed are not removed from
the status page. The page also displays the status message, the scheduled date and time, and other
options.
For more information about bulk upload and download, please go to: Admin Home
Page > Help

CONFIDENTIAL

63

GENERAL APPLICATION SETTINGS

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:








Adding a Part Manually


Searching for Parts
Parts Associations
Custom Parts Fields
Using Filers
Price Books
Price Book Associations
Price Book Fields
Partner Parts Integration

Parts data includes part numbers, serial numbers, part


associations and serial number associations. There are
two ways you can create parts data:
Bulk upload process
Manual entry
The formats supported for a bulk upload of parts are
XML and CSV. This process enables you to enter large
batches of parts data into the system at once. Parts
data can also be entered manually, including setting the
visibility level of BOMs. We recommended using bulk
upload for large amounts of data. Manual entry should
only be used when you need to quickly add or manage
small amounts of parts data.
All parts data is maintained in the Parts Search for
Admin page.

Parts Search for Admin Page:

CONFIDENTIAL

65

4.1: MANUALLY ADDING A PART


As mentioned in the introduction, a part can be manually added directly into BigMachines.

4.1: MANUALLY ADDING A PART

To Manually Add a Part


Navigation Path: Admin Home Page > Products > Item Master > Add New Part
Step 1:
Enter a Part Number for your part.
Step 2:
Enter part data, such as buy type, descriptions, units, and lead time.
Select a buy type using the Direct Buy drop-down list. The options are Direct Buy(can
be purchased alone), Buy Parent Part (must be purchased along with a parent part), and
Buy as Recommended Item Only
Enter more description for the part in the Extended Description 1 and Extended
Description 2 fields. Clicking Edit displays the HTML Editor that enables you to enter
and edit a subset of HTML.You can also link images to the HTML and generate image
rollovers.
Enter the units in the Units field.
Enter the Lead Time in days. This is the time taken for the part to be shipped.

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

PARTS AND PRICE BOOKS

To Edit a Part

4.2: SEARCHING FOR PARTS


All uploaded and manually added parts are accessible through a parts search in the Parts Seach for
Admin page.

To Search For a Part


4.2: SEARCHING FOR PARTS

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.

4.3: PARTS ASSOCIATIONS


Parts can be associated with one another in a parent-child relationship. As mentioned above in
Step 2, you can create a parts association by clicking the Expand icon next to your desired parent
part number. This allows you to create an indented bill of materials.
68

CONFIDENTIAL

To Create a Parts Association


Navigation Path: Admin Home Page > Products > Item Master > Parts Search
Results Page
Step 1:
Click on the Part Number you would like to which you need to add an association.

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

PARTS AND PRICE BOOKS

Step 4:
Enter a value in the Search Child Parts Field and click Search.

4.4: CUSTOMIZING PARTS FIELDS

To Edit or Delete a Part Assocation


From the Parts Search Results page, click on the expand button next to the part number that youd
like to edit or delete. From the Part Tree for Part Number page, you can click the part number
youd like to edit or select the check box corresponding to the part number youd like to delete.
Click Delete to remove the parts association and click Update to save your changes.
Use caution when deleting parts because there is no way to recover the
deleted data. Parts associations can only be added to first level sub-parts.

4.4: CUSTOMIZING PARTS FIELDS


You can add customized parts fields to your BigMachines application. These parts fields will be
available for parts data on the Part Administration page discussed in Recipe 4.1. For example,
perhaps you wanted to add the location of the manufacturing plant as a parts data field.
Clicking the Customize Part Fields button will lead you to a page that displays two sections:
Parts Available Fields section which lists 35 pre-defined fields that are available for
customization. The available Data Types are:
Text: You can choose from a text string or single-select menu field. There are also
two multi-select menu fields available.
Number: You can choose from either a float or integer field.
Parts Defined Fields which shows the list of fields that have been added. When you add a
defined field, one of the Parts Available fields is used. Remember, only 35 are available.

To Create a Custom Part Field


Navigation Path: Admin Home Page > Products > Item Master > Customize Part
Fields
Step 1:
Click on the Customize Part Fields button.
Step 2:
Select a data type and use the drop-down menu, from the Parts Available Fields
section, to determine the type of field you would like to create.

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.

PARTS AND PRICE BOOKS

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.

4.5: USING FILTERS

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.

4.5: USING FILTERS


Filters can be used to set access to rights to parts and price books based on certain information.
For example, you could have two user groups: Girls Scouts and Boy Scouts. If the user was in the
Girl Scouts group, they would only be able to access certain parts.

SIMPLE USE CASE


You would like to add a parts filter that will allow Sales Agent Users in group Girls to
access only parts that have the Group Affiliation field = Girl Scouts. You will also want to
do the same for the group Boys, giving them access to parts that are in Group Affiliated
Boy Scouts. Anyone else will have access to all parts.

To Create a Part or Price Book Filter


Navigation Path: Admin Home Page > Products > Item Master > Customize
Part Fields
Step 1:
From the Parts Defined Field Section, select Filter from the Filter/Normal menu and click
Update. A Define Script button will appear.

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.

4.6: PRICE BOOKS OVERVIEW


Parts are usually 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. If a part is not associated with a
price book, then the price of the part is determined by the price specified when creating the part.
CONFIDENTIAL

73

PARTS AND PRICE BOOKS

Step 4:
Click the Check and Save button to make sure there are no mistakes in your script.

Price books are not enabled for all applications.

4.6: PRICE BOOKS OVERVIEW

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.

To Create a Custom Price Book


Navigation Path: Admin Home Page > Products > Item Master
Step 1:
Click on the List button under the Price Book section.
Step 2:
Click Add to add a price book from the Price Book Administration List page.
Step 3:
Enter a Name, a unique Variable Name and a Description for your price book.

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.

4.7: PRICE BOOKS ASSOCIATIONS

To Create a Custom Price Book


Navigation Path: Admin Home Page > Products > Item Master
Step 1:
Click on the List button under the Price Book section.
Step 2:
Click the Expand icon next to a Price Book to add parts associations.

CONFIDENTIAL

75

PARTS AND PRICE BOOKS

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.

4.8: PRICE BOOK FIELDS

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.

4.8: PRICE BOOK FIELDS


Custom price book fields can be used to create price book filters or to supplement the set of
base price attributes available for price books. The system supports up to five, user-defined,
customizable price book fields. Four of these can be of string data type. One field can be used for
a numerical value (float or integer data type).

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.

4.9: PRICE BOOKS (USER-SIDE)


Price Books are visible to the user in a couple of different places: Within Configuration and on the
Parts Search Page.
Configuration
In Configuration, a Price Book drop-down menu will appear if a configured item has Mandatory or
Recommended Items.

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 AND PRICE BOOKS

Parts Search
Navigate to Home Page > Parts Search > Price Book

4.10 INTEGRATING PARTS WITH A PARTNER

4.10 INTEGRATING PARTS WITH A PARTNER


Partner Parts Integration provides a tighter integration by allowing you to maintain the primary
parts database in either BigMachines or a partner system.

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

PARTS AND PRICE BOOKS

79

CONFIDENTIAL


80

CONFIDENTIAL

5
DATA TABLES
In This Chapter:






Data Tables are used to store product and commerce


data. They can be accessed from any part of the
BigMachines application where BML is used. The
purpose of storing complex business logic in data
tables is for ease of maintenance.

Data Tables Overview


Folders
Manually Adding a Table
Populating Table Information
Importing and Exporting Tables
Upload Status and Error Logs
Data Table Searches

There are some limits to data tables that you should


be aware for:
Item

Limits

Total Columns in a Table

100 columns (50 String, 25


Integer and 25 Float)

Total Rows in a Table

1,000,000+ rows

String Characters in a Cell

256 characters

Integer Characters in a Cell

16 characters

Float Characters in a Cell

9 characters

Data Stored in Excel (CSV File)

Data Stored in BigMachines

CONFIDENTIAL

81

5.1: DATA TABLES OVERVIEW


Information in data tables can be accessed from anywhere in your BigMachines application that uses
advanced functions. To manage data tables, there are two places you can navigate to:

5.1: DATA TABLES OVERVIEW

1. Top or Side Navigation Menu


2. Data Tables section on the Admin Home Page
Upon clicking a Data Tables link, you will be taken to the Data Table Administration page. From
this page, you will be able to add tables and folders, import and export table files and perform data
searches across tables.

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.

The new folder will now be displayed in the Folder List.

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

5.3: MANUALLY ADDING A TABLE

5.3: MANUALLY ADDING A TABLE

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

To Set Data Table Schema


Navigation Path: Admin Home Page > Data Tables > Data Table Name
Step 1:
Click on the Schema tab in the right panel of the Data Table Admin page.
Step 2:
Click on the schema header Name and click on the menu option Columns. From here, you
can select which if the five headers you would like to be displayed when you are looking at
data table schema: Name, Description, Type, Date Added and Date Modified.

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.

5.3: MANUALLY ADDING A TABLE

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.

Repeat Steps 2-6 for each column of your data table.

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.

Manually Populate Table Data


Navigation Path: Admin Home Page > Data Tables > Data Table Name
Step 1:
Click on the Data tab in the right panel of the Data Table Admin page. Notice the columns
you created in the Schema tab now appear on the data table.
Step 2:
Click the Add Row button.

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.

Table has NOT been deployed.


Table HAS been deployed

Edit: This allows you to edit the table


description and view the Date Added, Date
Modified and Date Deployed time stamps.
Deploy: Deploying saves the table and makes it
available for use throughout BigMachines.
Export: Exports the data table to a .CSV file.
Delete: Deletes the table, including its data and
schema.
Clear Data: Deletes ALL table data but will
keep the table and schema intact.

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.

5.4: IMPORT AND EXPORT OF DATA TABLES

5.4: IMPORT AND EXPORT OF DATA TABLES


It is possible to maintain data tables outside of BigMachines, such as Excel (.CSV) or other file
formats. We provide the functionality to allow you to import data tables and their schema directly
into BigMachines. Before attempting to upload a data table, please make sure to follow the
instructions below for setting up your .CSV file with the appropriate meta data tags for upload.

Preparing your .CSV File for Import


Step 1:
Open your Excel file or create your data table in .CSV.
Step 2:
Enter into cell A1 the following entry: _start meta data.
Step 3:
Use Row 2 for your Column Headers and Row 3 should have the Data Type. Note: Data
type needs to be either String, Float or Integer (make sure the first letter is capitalized or your import
will fail).
Step 4:
In cell A5, add the entry: _end meta data.
Step 5:
Populate your table. It should look like this:

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

Importing a Data Table (.CSV)


Navigation Path: Admin Home Page > Data Tables
Step 1:
From the Admin Toolbar, click File and select Import from the drop-down menu.

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

5.4: IMPORT AND EXPORT OF DATA TABLES

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.

Export a Data Table (or multiple tables)


Step 1:
Select one table, or hold down the CTRL button and click multiple tables, for Export.
Selected tables will be highlighted.
Step 2:
Right-click on any highlighted data table or from the Admin Toolbar, click File and select
Import from the drop-down menu.

90

CONFIDENTIAL

Your file or files will be zipped and sent to your desktop or laptop.

5.5: UPLOAD STATUS AND ERROR LOGS


After you have imported or deployed a data table, you can check the status and error logs to make
sure all of your data loaded correctly.

Checking Upload Status


Navigation Path: Admin Home Page > Data Tables
Step 1:
From the Admin Toolbar, click File and select Status from the drop-down menu.

DATA TABLES

Step 2:
Check the status of each data table import or deployment.

CONFIDENTIAL

91

5.6: SEARCH FOR DATA WITHIN A TABLE

Step 3:
If available, click the Log link to check the error logs.

5.6: SEARCH FOR DATA WITHIN A TABLE


You are able to search for a particular data record within the data tables. BigMachines provides the
ability to select tables to search in, columns to search on, and values to search for. This search will
return the tables that contain the data record and display only the rows of matching records within
those tables. You will be able to click on the results and be taken to the cell you need to edit.

Searching Within a Data Table


Navigation Path: Admin Home Page > Data Tables > Search
Step 1:
Select the radio button next to Search within table and use the drop-down menu labeled
Tables to select the table youd like to search for data. Once you have selected your table,
the schema for that table will appear, displaying column names and data types.
Step 2:
Use the drop-down menus under the Operator header to assign the values you would like to
search for and click Search.

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.

It is also possible to search across all tables or selected tables.

Searching Across Data Tables


Navigation Path: Admin Home Page > Data Tables > Search

DATA TABLES

Step 1:
Select the radio button next to Search across tables.

CONFIDENTIAL

93

5.6: SEARCH FOR DATA WITHIN A TABLE

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

Internationalization ensures that the system is able to


provide support for multiple currencies, languages and
numerical/date/time formats. You application supports:



Processing data in a language and storing it.


Displaying different characters.
Multi-byte character support.
Support a variety of locales: currencies, date/
time formats, numerical formats.

For example, if a Chinese user creates and saves a


product line, then he can see the description for the
product line in Chinese. Now, when an English user
logs in, and views this Product line on either the admin
or the buy side, the value in the description fields will
still be in Chinese. When the second user creates a
second product line, then the description field will be
in English. If the Chinese user tries to view the second
product line, he will see the description in English.
Internationalization Tips:
All data and labels are translate-able.
At least one FulleAccess user must have the same language preference as the base language of
the site. Only this FullAccess users are allowed to provide translations of all other supported
languages.
If a translation does not exist, then the user is shown the data in the language that it was created
in.
Variable Names, Part Numbers and Customer ID do not support Multi-byte characters.
Default value translation occurs during the creation of the product line/model.

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

Arabic (Saudi Arabia)

ar_SA

Chinese [Simplified] (China)

zh_CN

Chinese [Traditional] (Taiwan)

zh_TN

Czech

cs_CZ

Danish (Denmark)

da_DK

Dutch (Netherlands)

nl_NL

English (Australia)

en_AL

English (Canada)

en_CA

bEnglish (United Kingdom)

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

Thai [Western Digits]

th_TH

6.2: LANGUAGE AND COMMERCE


The BigMachines application supports users with a language preference that is different from the
language the quote was created in. They can view and print translated values for parts descriptions
98

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

<!-- Itn tag for extended desc -->


<_part_extended_desc_1>engExtendedDescription1</_part_extended_desc_1>

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.

List of Supported Currencies


North America
Country

Currency

Barbados

Barbados Dollar

Symbol

BBD

Canada

Canadian Dollar

CAD

Jamaica

Jamaican Dollar

JMD

Mexico

Mexican Peso

MXN

Guatemala

Quetzal

United States

United States Dollar

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

French Polynesian Franc

XPF

Papau New Guinea

Kina

PGK

New Caledonia

New Caledonia Franc

New Zealand

New Zealand Dollar

Solomon Island

Solomon Island Dollar

Country

Currency

XPF
NZ$

NZD
SBD

Asia
Symbol

Code

Thailand

Baht

THB

Brunei

Brunei Ringgit

BND

China

Chinese Yuan Renminbi

Hong Kong

Hong Kong Dollar

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

North Korean Won

KPW

Macau

Pataca

Phillipines

Phillipine Peso

MOP
P

PHP

Russia

Ruble

RUB

Maldives

Rufiyaa

MVR

Singapore

Singapore Dollar

South Korea

South Korean Won

KRW

Sri Lanka

Sir Lakan Rupee

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

South African Rand

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

United Kingdom Pound

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

CREATING A CONFIGURED PRODUCT


Chapters 7-10 go into detail about how to set up a configuration. Here are the steps:
Step 1:
Create a Product Family (Recipe 7.2)
Step 2:
Create a Product Line and Model (Recipe 7.3)
Step 3:
Deploy the home page (Recipe 7.2)
Step 4:
Create the configurable attributes (Chapter 8)
Step 5:
Create your configuration flow (Recipe 9.2)
Step 6:
Set the tabs within your configuration flow (Recipe 9.3)
Step 7:
Create groups with the tabs (Recipe 9.4)

CREATING A CONFIGURED PRODUCT

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

Products in BigMachines are structured in hierarchical


fashion. There are four tiers in this hierarchy: All
Product Families, Product Family, Product Line and
Model.
Product Families are broad classifications of products,
typically based on industry standards rather than a
single company standard. Product family classifications
could take into consideration how you want to
merchandise your products, or how you want users to
navigate through the catalog. BigMachines supports up
to 30 product families.
All of your product lines could belong to a single,
all encompassing product family, or they could be
split up into several product families. Depending
on the product families created, some catalog page
templates and home page flow templates may be more
appropriate to use than others.

BigMachines Product Hierarchy


ALL PRODUCT FAMILIES
Product Family

Boats

Product Line

Product Line

RACING

OPEN BOW

Model

Model

RC5
RC10
RC50

YL10
YS10
YS50

CONFIDENTIAL

109

7.1: PRODUCT HIERARCHY

7.1: PRODUCT HIERARCHY

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

All Product Families

This is the highest level in the products hierarchy.


Configurable attributes, rules and flows created at this level
will be inherited by all products below.

Product Family

Individual product families inherit attributes and rules from


the All Product Families level. Anything defined at this level
is accessible by the Product Lines and Models within this
Family.

Product Line

Attributes and rules are inherited from All Product Families


and parent Product Families. Anything that is defined at this
level is accessible by the Models within the Product Line.

Model

Individual Models inherit the attributes, rules and flows


from all the product levels above. This is the lowest level
which means that anything defined here is not inherited
anywhere.

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.

Navigating the Product Hierarchy


You can manage your Product Families and Catalog in the Products section on the Admin Home
Page.
To Create Product Families: Products > Product Family Definition
To Create and Manage the Catalog (Product Lines/Models): Products > Configured
Products.

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

7.2: PRODUCT FAMILY MAINTENANCE

7.2: PRODUCT FAMILY MAINTENANCE


Before you begin creating your catalog items, you must first decide the product structure. Based
on this structure you can create your product tree. The first step is to create Product Families.
Product families are broad classifications of products, typically based on industry standards, rather
than a single company standard. Product family classifications could take into consideration how
you want to merchandise your products, or how you want users to navigate through the catalog.
The BigMachines system supports up to 30 product families.

To Add A Product Family


Step 1:
Click Product Family Definition under the Products section of the Admin Home Page
Step 2:
Click Add on the Product Family List page.

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.

7.2: PRODUCT FAMILY MAINTENANCE

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

Editing and Deleting Product Families

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.

To Reorder Product Families:


On the Product Family List page, click Reorder. On the Reorder Product Families page, enter the
new Product Family order and click Update.

PRODUCTS

7.3: PRODUCT LINE/MODEL MAINTENANCE


Once you have created your Product Families, you can begin creating your Product Lines and
Models. In order to do so, navigate to Products > Configurable Products > All Product
Families > Supported Product Families page. Select Product Lines from the navigation
menu of the Product Family, to which you wish to add Product Lines and Models, then click List.

CONFIDENTIAL

115

7.3: PRODUCT LINE/MODEL MAINTENANCE

To Add a Product Line


Step 1:
Click Add from the Product Line Administration page.
Step 2:
Enter a unique Produce Line Name.
Step 3:
Enter a unique Variable Name. This is a required field.
Step 4:
Enter a text Description which will be displayed on the home page. There is also a
button Edit HTML which opens an HTML Editor where you can customize the description, add
images, hyperlinks and much more.

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.

Content HTML Editor


The Content HTML Editor is similar to a Rich Text Editor. In the Design Mode, you can perform
standard functions: save, search, print, find and replace, spell-check, cut and paste, redo, undo, etc.
You will also be able to add and modify text. If you wish to modify the content with HTML, simply
click on Source Mode and begin writing your HTML script.

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

7.3: PRODUCT LINE/MODEL MAINTENANCE

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

Much of the configuration systems functionality


requires the use of these attributes. Product Line and
Model attributes can also be specified as configurable
so that they can be used in rules.
Configurable attributes are used in search flows,
configuration flows and every type of configuration
rules. They differ from general purpose attributes in
that their values can carry over to commerce subdocuments. This gives buyers, sales agents and channel
agents the opportunity to review configured values
from within commerce transactions, and change
attribute values whenever the reconfiguration option
is available.
Configurable attributes can be created at all levels
in the products hierarchy. Adhering to the rules of
inheritance, those attributes created at high levels are
automatically inherited by lower levels.

Configurable Attributes (User-Side):

CONFIDENTIAL

119

8.1: CONFIGURABLE ATTRIBUTE OVERVIEW

8.1: CONFIGURABLE ATTRIBUTE OVERVIEW


Configurable attributes are used to define those characteristics of product families that can be
specified by the buyer. If you refer to the figure on the previous page, you can easily recognize the
Quote Start Date, Quote End Date and Sales Agent as configurable attributes. The image of the
vehicle to the right is also an attribute. Much of the configuration systems functionality requires
the use of these attributes.
DATA TYPES:
There are six different data types of configurable attributes.
Data Type

Attribute Types

Description

Text

Text Field, Single-Select or Multi-Select Menus

This data type displays a text area or text field that


the user can populate with data.

Float

Text Field, Single-Select or Multi-Select Menus

Floating point number fields validate numbers with


decimal values.

Integer

Text Field, Single-Select or Multi-Select Menus

Integer number fields validate that whole numbers


are entered.

HTML

Text Field

Date

Text Field with Date Selector Tool

Currency

Text Field

Insert custom HTML in a configuration page. See


Recipe 8.6 for more details.
Displays a text box with a data selector tool,
allowing the user to either manually enter a date or
select one from a calendar.

Displays a floating point number as currency.

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

8.2: ADDING CONFIGURABLE ATTRIBUTES


Before you begin you will first have to decide at which hierarchy level you would like to create your
configurable attributes. Remember, it is Best Practice to create these at the Product Family level.

To Add a Configurable Attribute


Step 1:
Based on Best Practice, from the Supported Product Families page, select Configurable
Attributes from the Navigation Menu and click List.

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

8.3: ATTRIBUTE EDITOR BASICS

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.

8.3: ATTRIBUTE EDITOR BASICS


Now that you have created your configurable attribute, you should see them in the Configurable
Attribute Administration List. You can access the Attribute Editors after adding a new attribute
or from this list. The attribute editor is customized for the data type and attribute type of the
configurable attribute.
Upon opening ANY editor, youll notice three tabs: General, Related Rules and Template Properties.
The General Tab will vary between all of the editors, but the Related Rules and Template Properties
Tabs will be consistent between the editors. In this section, well show you Related Rules and
Template Properties only.
RELATED RULES TAB
In the Related Rules Tab, you can view all of the rules that are using this particular attribute. You
will see the name of the rule, what level it is located at on the hierarchy, the rule type and its
components. Rules will be discussed in detail in Chapter 10.

122

CONFIDENTIAL

Note Regarding Related Rules:


At the top oft the tab, there is a drop-down menu next to Select Action to Perform. Here you
are given three options: View/Update All Related Rules,View/Update All Rules or Create New Rule.
View/Update All Rules will show you all of the rule that are currently running in configuration.
The rules where the attribute you are editing is used are displayed in bold.
If you select Create New Rule, it allows you to select the type of rule, the product line and
model. Upon clicking Create, you will be taken to the appropriate rule editor. For more
information on Configuration Rules, please refer to Chapter 10.

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.

8.4: TEXT ATTRIBUTE EDITOR


The Text Attribute Editor will open if Data Type Text, Float, Integer or Currency is selected along
with Attribute Type: Text Field. Because we covered the Related Rules and Template Properties tabs
in Recipe 8.3, you will only find information relating to the General Tab in this recipe.
There are three sections found under the General Tab: Main Information, Properties and Default
Data.

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.

8.3: ATTRIBUTE EDITOR BASICS

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

Use the drop-down menu to select one of three options:



None: the user can input ANY value without issue.

Set: There is an option called Auto-Lock. If this is checked, then once the
user changes the value of this attribute, it can NEVER be modified again by a
recommendation rule. If it is not checked, the attribute can only be changed by
the user of the override lock icons. It is a BigMachines Best Practice to use
auto-lock.

Forced Set: The attribute is read-only and cannot be changed by the user. Only
recommendation rules can set this attribute.

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

Use the drop-down menu to select one of three options:



Active: An active attribute will appear to the user an/or be used in rules. This is
the default selection.

Inactive: an inactive attribute cannot appear in a rule or be seen by the user.

Internal: An internal attribute is visible ONLY to admin users.

[Show Start/End Dates]

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.

Default Data/Data Validation


This section allows you to set a default value and/or validate an entry based on the data type.

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.

8.5: DATE ATTRIBUTE EDITOR

8.5: DATE ATTRIBUTE EDITOR

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.

8.6: HTML ATTRIBUTE EDITOR


You have the ability to insert custom HTML in a configuration page. This attribute data type can
be defined at any level of the hierarchy and can be associated with default or custom templates
in the configuration and search flows. HTML attributes can be used as action attributes in
Recommendation and Hiding Rules (Chapter 10).
Configurable HTML Attributes are carried to commerce like other configurable attributes. They
can be displayed in the transaction as well as in printer-friendly documents.
Ill-constructed HTML can break Configuration Layouts, so you must be very
careful when setting values for HTML fields.
HTML data type 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.

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.

For performance reasons, the Hide In Transaction option is checked by


default. This needs to be unchecked if you would like to use these attributes
in the Document Engine.

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.

8.7: MENU ATTRIBUTE EDITOR

8.7: MENU ATTRIBUTE EDITOR

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.

Attribute Value Pricing


Attribute Based Pricing provides you with an easy way of maintaining pricing instead of creating a
pricing rule for each attribute.

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

This feature allows you to associate static


prices with values of a menu type configurable
attribute so that these prices can be displayed to
the user upon selection of the menu values on
the model configuration page.
A unique aspect of attribute value pricing is the
ability to update price totals of a configurable
item instantly without refreshing the page.
Attribute Value Prices can also be defined for
every supported currency.
You have control over if and where prices are to
be displayed. You can also decide if the pricing
should be included in the total price of the
configured item.

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

8.7: MENU ATTRIBUTE EDITOR

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

Grid Image Menu

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

Radio Button Vertical

Multi-Select Menu Display Types


There are three different options if the attribute is a multi-select menu: Horizontal Check Box,
Vertical Check Box and Multi-Select Menu.
Horizontal
Check box

Multi-Select Menu

Attribute Value Pricing


If you decided not to include attribute value pricing when you first created the attribute, you can
do so by selecting the Static Pricing radio button in this section. Conversely, if you decide you no
longer want
CONFIDENTIAL

131

CONFIGURABLE ATTRIBUTES

Vertical Check box

to have static pricing included for your attribute, you can click the None radio button.

8.7: MENU ATTRIBUTE EDITOR

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.

Include in Total 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.

Image Menu Properties


This section will become available if you have selected Yes from the Image Menu options in the Main
Information section.

CONFIDENTIAL

133

CONFIGURABLE ATTRIBUTES

Display Price at Bottom to User

8.7: MENU ATTRIBUTE EDITOR

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

Determine the image size in pixels. It is BEST PRACTICE to create your


images in a size similar to how you will have them be displayed in order to keep
the image dimensions consistent and avoid distortion.

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

8.8: ARRAYS AND SETS


What are Array Attributes?
Array attributes are used to allow users to easily group multiple, scalar attributes using a single
data structure, and are available both for the selection and configuration process. Similar to other
configurable attributes, you can create array attributes at all levels in the configuration hierarchy.
You can delete them only at the level of the hierarchy in which they were created. Array Attributes
can be created for Date, Float, Integer and Text data types. When you set a default value for an
array attribute, the value is applied to all elements of the array. If you need to set different default
values for the various elements of an array, you must define a recommendation rule (see Chapter
10).
CONFIDENTIAL

135

CONFIGURABLE ATTRIBUTES

Image Menus are not an option for non-text menus.


Image menu attributes can be used in Configuration Rules and BML.
Menu values selected in configuration are carried to commerce as
text. The image URL is not available in the sub-document and cant be
rendered in the sub-document or the main document.
Image must be uploaded as JPG or non-transparent GIF format. PNG is
not supported by the Document Engine.
Have as few auto-update attributes as possible.
Be conservative in the length of the attribute value names. This will
make it easier to reference in rules.

8.7: MENU ATTRIBUTE EDITOR

Example of an Array Attribute (User-Side)

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

Warranty Start Date


Warranty End Date
Annual Fee

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

Array Control Attributes


An array control attribute is used as the Set Size Attribute. They are used to define the size of the
array. An array control attribute is a special kind of integer attribute that has been marked as an
Array Control Attribute.
As mentioned in Recipe 8.4, integer attributes are maintained with the Text Attribute Editor. When
you create an attribute with an integer data type and a text field attribute type, there will be a new
field called Array Control Attribute. Checking this box marks the attribute as available to use as
a Set Size Attribute for use in Array Sets.

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.

Creating an Array Set:


Step 1:
From the Configurable Attributes List page, click List Array Sets at the bottom of the page.

8.7: MENU ATTRIBUTE EDITOR

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):


Display only First Label


Display Both Labels and Indices (Tabbed Display Only)
Display Only Labels (Tabbed Display Only)

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

User-Side Examples of Array Attribute and Sets


This first example shows an array set of values that are displayed horizontally:

This next example shows an array set that is displayed vertically:

The final example shows the same array attributes and set, but displayed in tabs:

CONFIGURABLE ATTRIBUTES

CONFIDENTIAL

139

8.7: MENU ATTRIBUTE EDITOR

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

8.7: MENU ATTRIBUTE EDITOR

9
CONFIGURATION FLOWS AND LAYOUT
Flows are special rules that help guide buyers through
the multi-step search and configuration process.

In This Chapter:







Overview of Configuration Flows


Creating a Configuration Flow
Setting Tabs in Flows
Grouping Attributes in Tabs
Defining the Tab Layout
Defining Group Layout
Advanced Template Editor
Configuration Stylesheet

There are two types of flows:


Configuration Flows
Search Flows
Configuration flows walk buyers through the product
configuration process, enabling you to display
configurable attributes in a logical sequence rather
than all at once.
Search Flows, or selectors, enable you to create
advanced search mechanisms for buyers. A search flow
gathers attribute values from the buyer and then uses
those values to help buyers select suitable products.
Please refer to the Help database for more information
on Search Flows and how they are used.

Overview of Configuration Flow (User-Side)

CONFIDENTIAL

143

9.1: OVERVIEW OF CONFIGURATION FLOWS

9.1: OVERVIEW OF CONFIGURATION FLOWS


Configuration Flows and Tabs are used to walk buyers through the configuration process. They
help arrange and organize configurable attributes to make configuration user-friendly. For products
with large sets of configurable attributes, flows can be used to group different attributes and display
them on separate tabs. Configuration flows can also be set up to direct users to different pages or
flows based on their input selections.
Example of a Configuration Flow with Tabs

The example above has the following characteristics:






It is just ONE configuration flow


This flow type is the Start Node and Node
All configurable attributes belong to this one configuration flow.
Attributes are organized into four different tabs
The user can navigate freely between tabs as they like.

144

CONFIDENTIAL

What are Nodes?


The node type refers to the direction of the flow. Do you want to allow users to start and end
from anywhere in the configuration? Do you they need to follow a certain path based on how they
configured something? Like the configuration rules discussed in Chapter 9, a configuration flow
is a rule that consists of a condition and flow attributes. The flow is triggered when the condition
is true. The condition usually depends on user specified values for displayed attributes (account,
configurable, regular or user attributes).
Evaluation of a Configuration Rule
The following steps are followed to evaluate the condition of a configuration flow rule:
Check for Status. The flow rule must be Active for the condition to be evaluated.
A flow is inactive if any of the condition attributes are not available to the current user. All
the condition attributes must be available to the user in either the current or previous
flows for the rule to be valid. An attribute is considered to be in a flow if it is either in the
reference attribute, current display, affected attribute or next display attributes list.
Flow Selection Logic when Multiple Flows are Applicable
When more than one flow is applicable at the same time, the flows are sorted based on the
following criteria (in sequence) to pick up the first flow:

**Rules for Selecting Node Types**


The first flow must be one of the following node types: Start Node, Start and End Node, Primary
Start Node or Primary Start and End Node. Otherwise, attributes are displayed using the default
wizard.
If more than one flow is defined, then the first flow has to be one of the following: Start Node,
Primary Start Node or Transition Node, and the last row has be of node type: End Node for all the
flows to show up.

CONFIDENTIAL

145

CONFIGURATION FLOWS AND LAYOUT

1. Descending order of validity of flows


2. Descending order in product hierarchy (i.e.: model-level rules have highest precedence and
all-family level rules have lowest precedence).
3. Ascending order of node type**
4. Descending order by number of rule inputs (Rules with simple inputs are evaluated last)
5. Ascending order by rule order number

9.2: CREATING A CONFIGURATION FLOW

Differences in Node Types:


The node types are used primarily to set a hierarchy of configuration flows. They all function in the
same way except for two differences. The first difference is that if you reach an end node, start and
end node, or a primary start and end node no additional flows will be displayed for configuration
and the commerce invocation buttons will be printed at this node. If you dont define any type of
end node then the configurable attributes that havent been shown yet will all be shown as an end
node after the last valid flow that has been shown.
The second difference is that the node type plays a role in the order configuration flows are shown.
The order flows will be shown from their flow type is:
Primary Start
Primary Start and End
Start
Start and End
Transition
End

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.

9.2: CREATING A CONFIGURATION FLOW


Once again, Configuration Flows and Tabs are used to walk buyers through the configuration
process. They help arrange and organize configurable attributes to make configuration user-friendly.

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

CONFIGURATION FLOWS AND LAYOUT

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.

9.2: CREATING A CONFIGURATION FLOW

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

9.3: SETTING TABS IN FLOWS


Once you have created your configuration flow, you can start to organize the attributes into
specific tabs. You can Add as many Configuration Tabs as you wish. For each custom tab you will
need to:
Select Display attributes from display attributes selected in parent configuration flow
Organize attributes into multiple groups, which can be used to organize the tab page layout.
Tab will not be displayed if all attributes within it are hidden (either by rule or attribute
definition)

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

CONFIGURATION FLOWS AND LAYOUT

Setting Tabs in Flows

9.4: GROUPING ATTRIBUTES IN TABS

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.

9.4: GROUPING ATTRIBUTES IN TABS


After you have created a tab, you can determine how to group the attributes within the tabs. For
example, lets say that you would like to put the Size and Crust type attributes in one group and the
Specialty and Toppings attribute within a different group, as shown in the image below:

GROUP

150

CONFIDENTIAL

Grouping Attributes Within Tabs


Step 1:
From the Tabs List, click on the name of the Tab where you want to group attributes.

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

CONFIGURATION FLOWS AND LAYOUT

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.

9.5: DEFINING THE TAB LAYOUT

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.

9.5: DEFINING THE TAB LAYOUT


Once you have created all of your tabs and groups, you can begin to customize the look and feel of
each tab and each group within the tab (see Recipe 9.6 for Group Layout). The Tab Layout section
contains multiple page layouts to choose from.

152

CONFIDENTIAL

Defining the Tab Layout


Step 1:
From the Tabs List, click Layout next to the tab youd like to customize.
Step 2:
In the Tab Layout Details section, select an appropriate layout from the drop-down
menu. This will determine the way the groups will be displayed on the tab. Click Create
Layout.

Step 4:
Use the Layout Preferences section Add Spacers to the layout.

CONFIDENTIAL

153

CONFIGURATION FLOWS AND LAYOUT

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.

9.5: DEFINING THE TAB LAYOUT

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

9.6: DEFINING GROUP LAYOUT


As mentioned in Step 6, found in Recipe 9.5, you can set define the Group Layout of each group of
attributes by selecting the group and clicking Group Layout. This page allows you to specify group
layouts and view/edit attribute properties for the attributes that are associated with that group.
The Group Layout section contains some default layouts. You can select a default template and
customize it or you can choose to define your own template.

Defining the Group Layout


Step 1:
From the Tabs Layout Editor, in the Group Settings section, you can select an
attribute group from the drop-down menu and click Group Layout.
Step 2:
Under the Layout Editor Tab, you will see the Group Layout Details section. Select an
appropriate layout from the drop-down menu. This will determine the way the attributes
will be displayed within the group. Click Create Layout.

CONFIGURATION FLOWS AND LAYOUT

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

9.6: DEFINING GROUP LAYOUT

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

CONFIGURATION FLOWS AND LAYOUT

Template Incudes Tab


In this tab, you can select where to show the recommendation and constraint messages. On this
page, you can toggle additional attribute display settings such as constraint and recommendation
rules messages, attribute images, help icon links, attribute label text, etc.

9.7: ADVANCED TEMPLATE EDITOR

9.7: ADVANCED TEMPLATE EDITOR

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.

Defining Templates for Array Attributes


Array attributes are available within default and custom configuration templates. The Default
template allows administrators to set up three display variations of array attributes - Horizontal,
Vertical and Tabbed (See Set Properties Tab page). When defining Custom templates for array
attributes, you must use a special tag to loop through an array attribute and display it on the userside. The loop tag must contain a variable name as a parameter. The variable name will be the
variable name of a Set or an array attribute.

158

CONFIDENTIAL

9.8 CONFIGURATION STYLESHEET


In configuration, Stylesheets provide an easy interface to enable you to define configuration
templates with a choice of skins and layouts. Configuration stylesheets are defined for one or more
tabs and are available for configuration flows across all product families. A default CSS is provided
that the user can customize using the Configuration Style Sheet Editor page. You can also add
alternate stylesheets as well as download a stylesheet for customization.
Style Sheets are created and available to all product families. You can access it by navigating to:
Admin Home Page > Products > Configured Products > Stylesheets.

CONFIGURATION FLOWS AND LAYOUT

CONFIDENTIAL

159

160

CONFIDENTIAL

9.8 CONFIGURATION STYLESHEET

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

Rules enable you to set specific configuration


information for your products. For example, you
can suggest configured values to buyers using
recommendation rules or hide some configurable
attributes from certain user types. Rules can also
be used to recommend items to buyers, prevent
them from selecting opposite values of configurable
attributes and display additional price information.
There are six types of configuration rules:
recommendations, constraints, BOM, pricing, hiding,
and recommended items.
In addition to configuration rules, you can also create
configuration flows and search flows to direct buyers
through the product configuration and the product
search processes. This will be covered in Chapter 9.

CONFIDENTIAL

161

10.1: OVERVIEW OF CONFIGURATION RULES

10.1: OVERVIEW OF CONFIGURATION RULES


There are six types of configuration rules within the BigMachines application. Rules should always
be created at the highest level possible in the hierarchy, though they are available for creating at any
level.
Configuration Rules
Rule Type

Description

Example

Bill of Materials (BOM)

Builds BOM Strings based on


configuration.

When a user selects a deep dish crust type,


a BOM string with sauce, cheese, butter and
type of dough is generated and returned to an
ERP system.

Pricing

Calculates a prices based on how a


product is configured.

When a user configures a model, the price is


displayed based on crust type, pizza size and
the toppings.

Hiding

Hides attributes when a pre-defined


condition is met.

When a user selects a speciality pizza, the


Toppings attribute is hidden from the user.

Recommendations

Sets items you would like the users to


select, or items the users must select.

Constraints

Determines attribute values you


cannot select in configuration.

When a user selects a small pizza size, they


cannot select Deep Dish as a crust type.

Recommended Items

Assigns parts & price to the


configuration based on certain
selections.

When a user selects Hot Sandwiches, the


system returns 4 recommended sandwich
options.

When a user selects the Meat Lovers


speciality pizza, the system recommends only
Pepperoni and Sausage as toppings.

Rules have these things in common:


Rules are created individually, at any level in the system.
Rules can be made active or inactive.
Rules abide by the principles of inheritance, so rules created at a high level are automatically
inherited by lower levels.
When more than one of the same rule type can be triggered at the same time, the
configuration system evaluates which rule to trigger based on rules precedence. Refer to
Recipe 10.11 for more information on the Order of Operations.
Rules evaluate a certain condition and perform some action.
The values of the attributes selected as the condition attribute(s) determines the results of
the condition.

162

CONFIDENTIAL

10.2: GENERAL RULE ELEMENTS


A configuration rule is comprised of a condition and an action. The condition is always evaluated
first. If the condition is evaluated to be true (is met), then the rule is fired (action will be
performed).
Each of the rules starts with a basic template of three sections: Properties, Condition and Action.
Properties
This section is where you will enter the basic details about the rule (for example: the name, status
and where it will be applied).

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.


Edit Start/End Dates

Active: the rule is fired when the condition is met.


Internal: the rule is active only for BigMachines FullAccessUser. the
rule is inactive for all others.
Inactive: the rule is not fired even if the condition is met.

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

10.3: SELECTING CONDITION ATTRIBUTES

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

Define which attributes are to be hidden.

Recommendation
Constraints
Recommended Items

Define which attribute will have its value modified.


Define which attributes needs to have its values constrained or allowed.
No action attributes defined. The action will return the part number and the
quantities for the recommended parts.

10.3: SELECTING CONDITION ATTRIBUTES


In this recipe, we are going to discuss how to select attributes to use in simple conditions and
advanced functions. You use simple conditions when you are a writing a rule that needs to run
under certain conditions. Instead of selecting Always True, you will need to select Define Logic.
When using simple conditions, you simply have to select the necessary condition attributes and
specify the values of the attributes for which the rule is fired. Several comparison operators are
provided for this purpose.

164

CONFIDENTIAL

Defining Simple Conditions

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

Simple Logic with Grouping

10.3: SELECTING CONDITION ATTRIBUTES

Entry Row

Result

1 AND 2 AND 3

Rule fires when myColor = Red AND


myShape = Circle AND mySize = Small

How To Get It

1 OR 2 OR 3

Rule fires when myColor = Red OR


myShape = Circle OR mySize = Small

You can also click OR ALL to achieve this.

1 AND 2 OR 3

Rule fires when myColor = Red AND


myShape = Circle OR mySize = Small

Type in 1 AND 2 OR 3 in the Row Grouping area.

This is the default logic. You can also click AND


ALL to achieve this.

The default is using parentheses from left to right.


This means that first 1 AND 2 is evaluated. The result
of this is OR-ed with 3.
(1 AND 2) OR 3

Rule fires when myColor = Red AND


myShape = Circle OR mySize = Small

Type in (1 AND 2) OR 3 in the Row Grouping area.


This is the default and does not need to be explicitly
defined in the Row Grouping Section. This means
that first 1 AND 2 is evaluated. The result of this is
OR-ed with 3.

1 AND (2 OR 3)

Rule fires when (myShape = Circle OR


mySize = Small) AND myColor = Red

Type 1 AND (2 OR 3) in the Row Grouping area.


The explicit parenthesis in the statement changes the
order in which the statements are evaluated.
At first 2 OR 3 is evaluated. The result of this
evaluation is then AND-ed with statement 1.

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.

10.4: BILL OF MATERIAL (BOM) RULES


A configurable BOM (Bill of Materials) is a set of parts specific to a certain product configuration.
For each configuration, where a product has a different set of parts, you can create a BOM.
When a BOM triggers, it appears to buyers on commerce document line item pages. If the parts
contained in the BOM link up with the parts in the parts database, then parts pricing also appears
on line item pages. Buyers see multiple BOMs when several apply to a given configuration.

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.

10.4: BILL OF MATERIAL (BOM) RULES

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

10.5: PRICING RULES

SIMPLE USE CASE


You will be setting the price for the Soup of the Day. According to the menu, the price of
the soup is $2.00.

10.5: PRICING 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.

ADVANCED USE CASE


You will be setting the prices for the pizzas based on their size and crust type. According
the menu, you have the following options and prices:

10.5: PRICING RULES

Small Thin Crust - $9.00


Medium Thin Crust - $12.00
Large Thin Crust - $15.00
Medium Deep Dish - $17.00
Large Deep Dish - $20.00

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.

10.6: HIDING ATTRIBUTE RULES

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.

10.6: HIDING ATTRIBUTE RULES


Hiding attribute rules tell the system to hide certain attributes when a pre-defined condition has
been met. Hiding rules are a powerful tool to use because basic rules can be created and then be
used in both configuration and search flows (Chapter 10). Like all rules, hiding rules are made up of
a condition and an action, where the action involves removing the action attributes.
Using hidden attribute rules, you can reduce the number of flow rules
needed for a configuration process. You can include different attribute types
in a single flow rule and show one set of attributes in another, based on the
same condition.

174

CONFIDENTIAL

SIMPLE USE CASE


You will be hiding the attribute Dipping Sauces when a user chooses None OR Soup of
the Day from the Other Items menu.
Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of Hiding Attribute
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 want this rule to run ONLY when someone
selects None or Soup of the Day from the Other Items Menu.

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.

Associated Recommendation Rules

10.6: HIDING ATTRIBUTE RULES

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:

SIMPLE USE CASE


Lets pick up where we left off on Step 5 on the previous page. You will add an Associated
Recommendation Rule that will set the value of the Dipping Sauce to Marinara when a
user selects None OR Soup of the Day as their Other Items.

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:

10.7: RECOMMENDATION RULES

User Configures Pizza with Soup of the Day (no error):

User Creates Quote and View Line Item Information:

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.

10.7: RECOMMENDATION RULES


We will now discuss Recommendation Rules, and what they do, in more detail. Recommendation
Rules are used to help buyers configure your products by offering suggested attribute values. For
each configuration where a model (or part) would likely have certain attribute value, you can create
a recommendation rule. For example, a Meat Lovers pizza has only pepperoni and sausage as
toppings and cant be modified by the user. A recommendation rule can achieve this.
When a recommendation rule is triggered, it appears to buyers on the Model Configuration
page. By default, the recommendation displays as text next to the configurable attributes with
recommended values.

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

The setting of a recommended value can by prevented by locking the attribute, in


which case, only the recommended values message is shown. This can be modified
by the user.

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.

STANDARD ACTION USE CASE


The Works pizza consists of the following toppings: sausage, green pepper, mushroom
and onion. Recommend these toppings when a user selects The Works Pizza, without
making it editable. In this particular example, you will see how to create this rule using the
Standard action type.

CONFIDENTIAL

179

CONFIGURATION RULES

Recommending a number that has more than 6 decimals is not


recommended. Functionality will not be affected, but it will generate an error
in the admin error log.

Step 1:
Using Configuration Quick Links, navigate to your Product Family > List of
Recommendation Rules.

10.7: 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

TABLE-BASED ACTION TYPE USE CASE


You can create ONE rule that allows you to set both recommendations for the Meat
Lovers pizza (sausage and pepperoni) and The Works pizza (sausage, green pepper, onion
and mushroom). You should create the following data table first:

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.

10.7: RECOMMENDATION RULES

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.

10.8: CONSTRAINT RULES

10.8: CONSTRAINT RULES

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.

SIMPLE ACTION USE CASE


Deep dish pizzas are only available in Medium and Large pizza sizes. You will need to
constrain the crust type attribute based on the selected pizza size.

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.

Multiple Constraint Rules on an Action Attribute


See Multiple Constraint Rules on an Action Attribute in Recipe 10.7 for more details.

10.9: RECOMMENDED ITEM RULES


Recommended item rules enable you to associate extra sets of parts and models with products
based on user-configured values. The items recommended may be models or parts. If the item
recommended is mandatory, then the user must buy the model selected with the recommended
item. There is no way to delete the item association in the commerce process and buy the selected
model without the recommended item. If the item is not mandatory, then the user can opt to not
buy the recommended item by de-selecting the part in configuration or commerce.
CONFIDENTIAL

185

CONFIGURATION RULES

Constraints and Recommendations


Constraints and recommendations are applied together. First, the constraints are applied to all
the attributes, followed by recommendations and followed by application of constraints again. The
constraints are applied in 2 passes because the first pass of application of constraints determines
the constrained action attributes to which the application of recommendations (if any) is skipped.
The recommendations are applied to only non-constrained action attributes. The second pass of
constraints application is required to determine the new constraints that might have triggered
as a result of running the recommendations. So when the user fixes all the attributes which are
constrained and updates the changes, new recommendations which were not run earlier (due to
the earlier constraints) will also run. This might trigger new constraints which are caught by the
second pass of constraint application. See Recipe 10.11 for more information.

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.

10.8: CONSTRAINT RULES

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.

Recommended Items and Pricing


You can also define prices for your recommended items, other than the base price of parts or
models. When you define prices for the recommended items in your Recommended Items Rules
page, this price is given highest precedence over the other prices defined (price book and/or base
price). If you do not define any recommended item advanced pricing rules, the system looks for the
prices defined in the price book and displays this price to the user. In case the price book is turned
off, then the system displays the base price for the part or model to the user.
Prices defined for the recommended items are assumed to be in the base currency format. When
you enable price books, price_book_var_name is available as an input in recommended items
advanced pricing.
When several rules recommending the same item are fired at the same time, then the
recommended item price is picked up from the rule that is last in the order. The quantity of the
recommended item is decided by adding the quantities that each of the rules provide. This is not
true if the option to not sum is turned on.
SIMPLE USE CASE
When a user orders the Side Item: Mozzarella Sticks, you would like them to purchase
Marinara Dipping Sauce. This is not a mandatory item, but an upsell.

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.

10.8: CONSTRAINT RULES

Now, on the user-side, when someone selects Mozzarella Sticks, the system will automatically
recommend that marinara sauce be added to the order.

Advanced Recommended Item Rules


You can also define an advanced action on recommended item rules. Notice that when you select
Advanced Price and Comments, the return string format is:
part1~quantity~comment~price|^|part2~quantity~comment~price

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

ADVANCED USE CASE


You have Hot Sandwiches on your menu, but you dont want to display them until a
user selects the Hot Sandwiches attribute value. You have stored the sandwich name,
description, type and price in a data table called Sandwiches. Write a rule to recommend
all four hot sandwiches in your data table.
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.
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 Hot Sandwiches when that
attribute value is selected.

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.

10.8: CONSTRAINT RULES

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

10.10: ARRAYS AND CONFIGURATION RULES


Array attributes are available as both condition and action attributes. All elements of array
attributes are accessible within BML. You can loop through the elements of an array using a
standard BML loop. If an array attribute is selected for a rule condition, then the user must define
the condition logic in an advanced function.
If you use an array attribute either as a condition or the action for a rule, it is recommended that
you also select the associated size attribute as a condition attribute.
When an array attribute is controlled with an advanced function within Recommendations and
Constraints, BML defines the return type as an Array based on the data type of the Array Attribute
(string[], string[][], float[], float[][], integer[], integer[][], dictionary[]). BigMachines validates that the
return types in the Advanced function are of type Array before saving the function.
BigMachines returns the whole array, while returning array elements with an advanced function. If
you wish to leave an array element unchanged, the array element must have the value set to the
system variable: $BM_UNCHANGED_STR$ (for Strings) or $BM_UNCHANGED_NUM$ (for
numbers).

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.

ADVANCED USE CASE


You decided to create your configurable attributes as array attributes with Number of
Pizzas being the Attribute Control. In this case, customers can configure more than one
pizza at a time. However, you still want to make sure that when the user select Meat
Lovers, that it automatically forces the toppings Pepperoni and Sausage for each pizza they
order.

CONFIDENTIAL

191

CONFIGURATION RULES

Multiple values can be recommended for a text type array attribute using the
|^| delimiter.

10.10: ARRAYS AND 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, 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.

User-Side View of Array Attributes and Recommendation Rules

10.11: ORDER OF OPERATIONS

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.

10.11: ORDER OF OPERATIONS


Please refer to the chart on the following page for the order in which the configuration rules will
run. Please remember, the data entered on the configuration page will be read before any rules are
run.
194

CONFIDENTIAL

CONFIGURATION RULES

CONFIDENTIAL

195

BigMachines Application
Commerce

11
QUICK START OVERVIEW
In This Chapter:
Commerce Overview
Commerce Documents

New implementations start with a default commerce


process commonly referred to as Quick Start.
Our internal Implementation Engineers are also
working from this Quick Start Process. Quick Start
enables customers to start with many established
BigMachines Best Practices and then tailor the process
to their business requirements. Quick Start Process
also reduces the length of implementation.

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

11.1: COMMERCE OVERVIEW


WHAT IS COMMERCE?

11.1: COMMERCE OVERVIEW

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

11.2: COMMERCE DOCUMENTS


WHAT IS A COMMERCE DOCUMENT?
Each commerce process contains one or more document sets. There are two types of commerce
documents: main document and sub document. A document set is comprised of a main document
or a main document with an attached sub-document. For every process, commerce documents
are created in a one-to-one relationship that is, every main document can be mapped to only one
sub document.

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

Quick START OVERVIEW

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.

USER-SIDE MAIN DOCUMENT

11.2: COMMERCE DOCUMENTS

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

Quick START OVERVIEW

203

CONFIDENTIAL

204

CONFIDENTIAL

11.2: COMMERCE DOCUMENTS

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

Document attributes are input fields for commerce


documents. You can generate custom document
attributes to develop a document or you can use a
combination of custom attributes and special attribute
sets. The system provides default attributes sets for
collecting data such as billing, shipping and pricing
information.
All document attributes are managed from the
Attributes List page. After generating attributes,
you can set attribute defaults and icons and map
which products each attribute applies to. In order
for attributes to appear on documents, they must be
included in document views.
Attributes can be stand-alone input fields or they can
be grouped into sets of related attributes. Custom
attributes are created one document at a time. It is
not possible to copy attributes from one document to
another.

ATTRIBUTES IN A TRANSACTION:
The images below show how different attributes are used in transactions:

CONFIDENTIAL

205

12.1: ATTRIBUTE TYPES

12.1: ATTRIBUTE TYPES

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

Text or Text Area

Free form box or area that can be


populated by the user.

General, Default, Modify, Document Views,


Mapping

Available Tabs

Menu

Creates either a multi-select or singleselect menu field.

General, Default, Modify, Document Views,


Mapping

Currency

Creates an input field and validations for


monetary inputs.

General, Default, Modify, Document Views,


Mapping

Date

Creates a date selection input box.

General, Default, Modify, Document Views,


Mapping

Integer/Float

Used for number inputs.

General, Default, Modify, Document Views,


Mapping

Boolean

Creates a boolean field consisting of two


radio buttons.

Rich Text

Creates an attribute that can be populated


by the end user on the commerce
document.

General, Document Views, Mapping

This attribute is available both on the main


document and the sub-document.
Read-Only or HTML
File Attachment

Creates a file attachment field.

History

Keeps a running history of values entered.

Summation

Updates upon any action.

Attribute Sets

REFER TO RECIPE 12.8

General, Document Views, Mapping


General, Document Views, Mapping
REFER TO RECIPE 12.8

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.

12.2: MAINTAINING ATTRIBUTES


Documents can be edited at any time. This section will explain how to add, delete, edit and reorder commerce attributes.

To Edit Commerce Attributes


Commerce and Documents > Process Definition > Select a Process > Documents > Quote or
Line > Attributes
Step 1:
Choose the attribute or attribute set you would like to edit.

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.

12.2: MAINTAINING ATTRIBUTES

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



System Attributes cannot be deleted.


If you delete attributes after a commerce process has been deployed, , make sure to remap and repopulate your data columns for the transaction manager.
Delete with CAUTION. It is NOT POSSIBLE to recover deleted data.
Check to see if an attribute is being use by searching through BML scripts and looking
at related rules.
CONFIDENTIAL

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

12.3: GENERAL TAB

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.

12.3: GENERAL TAB


This is the first tab that appears in the Attribute Editor. While their are some slight differences in
what appears in this tab (based on attribute type), some common information remains the same, like
Label, Variable Name, Description, Layout Path and Validations(simple).
Main Information Label
Label
Description

210

Description
The visible label that will be seen in the Transaction.
The contents of this field populate the user Help icons.

CONFIDENTIAL

Main Information Label


Required
Trigger Auto-Update

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

Clicking on the Save & Edit button opens the Layout


Editor and shows you where the attribute is located on
the layout

Validation

These are simple validations that can validate the


information in the fields (start date and end date, etc.)

MANAGING THE GENERAL TAB


The top half of the general tab will be where you can make changes to the label, description, and
the Layout Path.

12.4: DEFAULT TAB


The Default Tab contains an area to set the default value of the attribute. Default values are
defined when the document is created. You will see a list of radio buttons that is similar to what
you see in the table below.
CONFIDENTIAL

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.

Radio Button Option

Description

None

Select this button if you do not wish to specify a default


value.

System Variable

To set a default value based on a system attribute, enable


this radio button option and choose the system attribute
you want to auto-populate the field.

Data

To set a static value, enable this radio button and enter a


default value.

Function

Click Define Function to define an advanced function to


determine the value of the attribute.

12.4: DEFAULT TAB

MANAGING THE DEFAULT TAB


From the Attribute Editor, click the Default Tab. Select the appropriate radio button.
Make sure to click Apply to remain on the same page or Update to save and return to the Attributes
List page.

POINTS TO REMEMBER
Defaults cannot be set for the following types of attributes:
Summation
Read-ony Text
HTML
File Attachment
Composite

USING ADVANCED FUNCTIONS AND SYSTEM ATTRIBUTES


Its possible to map an document attribute to a System Attribute. In the quick tutorial
the follows, you will learn how to use the Default Tab to set a default value for an
attribute using an advanced function and system attribute. This is a simple example that
will easily demonstrate how its done, but it is advised that this is used sparingly as it is
not a Best Practice. It is recommended that you follow these steps exactly to get the
full effect of the functionality.

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.

12.5: MODIFY TAB

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.

12.5: MODIFY TAB


The Modify Tab contains a list of actions where you can define a modification on an attribute. These
modifications can be either simple or advanced. Simply stated, similar to the Default Tab, functions
can be written to change the value of the attribute based on an action in the commerce transaction.
You will notice that there are two tabs within the modify tab: Process Actions and Quote. In
this section, we will be covering the Quote tab only. Refer to Chapter 16 for more details on the
Process Actions tab.

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

Use Specified Value


Leave Value Unchanged

What does it do?


Similar to the Default Tab, you can define an advanced
function to modify the attribute value when using this
action. Use sparingly, as it is not a Best Practice. For best
performance and maintenance, define functions on the
advanced modification on the action.
This is a static input value for the attribute.
Action does not apply a modification.

Revert to Default

This will use the default value that was set in the Default Tab.
For better performance and maintenance, use this sparingly.

Save from Form

This will use the current value that is on the transaction.

214

CONFIDENTIAL

12.6: DOCUMENT VIEWS TAB


The Document Views tab holds attribute level access for different Steps and Participant Profiles
(covered in Chapter 15). This allows easy access to change visibility and read/write access of the
attribute based on the Participant Profile of a Step.

Visibility

Description

Read/Write

This attribute can be viewed and modified for the step and
profile indicated.

Read-Only

This attribute can be viewed, but not modified.

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

12.7: MAPPING TAB

POINTS TO REMEMBER

12.8: MAIN-DOC ATTRIBUTE SETS

DEPLOY! DEPLOY! DEPLOY!!!

Changes dont display to the user until they are deployed.

12.8: MAIN-DOC ATTRIBUTE SETS


There are many types of attributes that can be used to create commerce forms. Attribute Sets
contain more than one commerce attribute. There are a number of attribute sets that you can
include in your documents. Quick Start process provides you with four attribute sets by default: Bill
To, Ship To, Price Book Attribute Set and Submit Attribute Sets.
PRICE BOOK ATTRIBUTE SET
The price book attribute set allows you to store price book information for all parts in a transaction.
Only one price book attribute set can be added per sub-document. When you create a price book
attribute set, the commerce system automatically generates several fields, each of which has editable
characteristics. Since Quick Start has already provided this, you will not see it listed in the Attribute
Type menu when you try to Add an Attribute (Recipe 12.2). However, you can edit the individual
attributes on the following tabs: General, Document Views, and Mapping.

BILL TO/SHIP TO ATTRIBUTE SET


The Bill To/Ship To attribute sets can be created only once on every main document. When you
create an address attribute set, the commerce system automatically generates twenty six fields, each
of which has editable characteristics. Quick Start has provided this for you and has already added it
to the Layout Editor under the tab: Customer Addresses. This is editable, of course.

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

12.8: MAIN-DOC ATTRIBUTE SETS

ADDITIONAL ADDRESS ATTRIBUTE SET


Additional Address Sets can be created multiple times on every main document. When you create
an additional address attribute set, the commerce system automatically generates thirteen fields,
each of which has editable characteristics. These attributes are the same ones you see in the figure
above.

Submit Attribute Set


The Submit Attribute Set is automatically generated by the system after the creation of a standard
Submit Action. This has already been done for you in Quick Start. By clicking on the attribute set
name, you can make edits to each attribute on the General, Document Views and Mapping tabs.

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

12.9: SUB-DOC ATTRIBUTE SETS

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.

12.9: SUB-DOC ATTRIBUTE SETS


These attribute sets are created together and removed together. Only one of each of these attribute
sets can be created per sub-document. On the user-side, these attributes are visible when you click
the edit icon on a configured model. They are visible based on how you place them in the subdocument Layout Editor.
Attribute Set Name
Parts Attribute Set

Description
There are 41 fields that are
automatically created.

Serial Number Attribute Set

This allows you to store serial


number information for each part line
item in a transaction.

Segment Attribute Set

Contains all the details of the product


family to which the item belongs.

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

Attribute Set Name

Description

Product Line Attribute Set

Contains all of the details of the


product line to which the item
belongs.

Model Line Attribute Set

Contains all of the details of the


current catalog item.

Configurable Attribute Set

Price Attribute Set

Notes:

There is a special attribute type: Link to Dialog


Window that appears for the Bill of Materials field.
This creates a link in the transaction to a dialog
window that displays the BOM content for the model
coming from configuration. You can edit the text on
the editor page for this type.

Contains all the configurable


attribute details of the current
catalog line item.
Allows you to store pricing
related data for each item.

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

12.10: USING THE RICH TEXT EDITOR

OVERVIEW OF THE RICH TEXT EDITOR

12.9: SUB-DOC ATTRIBUTE SETS

The Rich Text Editor can be accessed in a couple of places:


1. Admin Side: You can navigate to the Rich Text Attribute Editor and click on Edit Template, as
shown on the previous page.
2. User Side: The end user can click into the Rich Text field on the commerce document to
specify the content or select a template to use.

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

CONTENT EDITOR WINDOW


The content editor window is where you will add your text, tables, images, hyperlinks, and dynamic
data. In order to save a newly created document as a template, you must click the Save Template
button. Doing so will add the new template to the Template Library in the left panel. If the
template is NEW, you will see the following pop-up where you will add a name and select a Folder
to add the template to.

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.

12.9: SUB-DOC ATTRIBUTE SETS

Example of Using Template Preview and Insert Into Text:

SETTING A DEFAULT TEMPLATE


To set a default template for a Rich Text Attribute, you will need to navigate to the Default Tab of the
Rich Text Editor. Choose the radio button for Select a Template and use the drop-down menu to
select the default template. The attribute will then pre-populate with the chosen template.

224

CONFIDENTIAL

DOCUMENT ATTRIBUTES

CONFIDENTIAL

225

226

CONFIDENTIAL

12.9: SUB-DOC ATTRIBUTE SETS

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 actions are represented as buttons on


the user-side commerce document. When clicked,
they trigger events within commerce. The commerce
system creates a default set of actions for use in each
document, and generates additional actions when
commerce documents include certain attribute types.
Both main documents and sub-documents can consist
of system generated actions as well as user-defined
actions, created based on supported action types.

Document
(Main or Sub)

User Defined
Actions

System
Generated
Actions

Actions are required to carry out operations based on the business logic.

USER-SIDE ACTION BUTTONS:


When users enter transactions, they will see buttons that perform the actions. The name on the
button is the name of the action created by you.

CONFIDENTIAL

227

13.1: OVERVIEW OF ACTIONS

13.1: OVERVIEW OF ACTIONS

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.

13.2: TYPES OF ACTIONS


USER-DEFINED ACTIONS
The table below represents the user-defined document action types that can be used to build main
and sub-document actions.
Action Name
Modify

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.

Add from Catalog

This sends the user to the home page to select items


to add to the transaction. See the Knowledge Database
article User Defined Document Actions for more
information.

Print

Displays a document created by the Document Engine.


It is a modify type action and hence possess the same
characteristics.

Email

Emails a document created by the Document Engine. See


the Knowledge Database article User Defined Document
Actions for more information.

Display History

228

The Display History action is used to display the change


history for a document. This action requires an XSL
format file that controls how and which changes appear.

CONFIDENTIAL

Action Name

Description

Copy to Favorites*

The Copy To Favorites action is available only on the


main document. It is a special action that is used to copy
selected line items from the transaction to the favorites
list. From here the user can add it back to the transaction.
For more information on Favorites, refer to Chapter 3.

Export Attachment

The Export Attachment action enables a user to add the


proposal (PDF) to the related partner Opportunity (only
on an integrated site). It possesses the same characteristics
as a modify-type action.

Copy Line Items*

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*

This is a Standard Approval Action that creates a special


set of Approval Actions and Attributes used to set-up
approval sequences.

* Represents a system-generated action that is available on the main-document only.


SYSTEM-GENERATED ACTIONS

The system automatically deletes system-generated actions when their


corresponding attribute or attribute set is deleted if attribute sets is
associated.

Action Name

Description

Update Line Items

Enables users to modify line item data on a main document


and then save the changes.

Remove [sub-document]

Enables users to remove products.

Open [sub-document]

Enables users to view product details on a sub-document.

Create [next main document]

The Create button automatically appears with all main


documents. This enables users to move on to the next
main document in the commerce process.

Autofill/Browse/View/Select Alternate Address

The Autofill, Browse,View and Select Address actions are


generated automatically when a Customer ID attribute
field is added to a main document.

Reconfigure*

The system automatically creates a Reconfigure button


when a Configurable Attribute Set (which is a composite
attribute) is added to a sub-document. The action enables
users to change a products configuration.

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.

13.3: MAINTAINING ACTIONS

Create [sub-document]*

Autofill/Browse/View/Select
Alternate Address

The system automatically creates the Create [sub-document] action if there is


another sub-document attached to the next main document in order. This action
enables users to create another sub-document.
These are generated automatically when a Customer ID attribute field is added to
a main document. They are also automatically removed from a main document if the
Customer ID attribute is removed.
Autofill: A user can enter an ID into the Customer ID attribute, click the Autofill
action and automatically link data from the Accounts database to the main document.
Its variable name is_auto_fill_action. To trigger a default autofill with user or account
information, set this option on the process administration page.
Browse: Clicking the Browse action on the main document, pops up a dialog that
enables users to search the Accounts database for a customer record. Its variable
name is _browse_action.
View: This enables suppliers to view a Accounts profile when an ID appears in the
Customer ID attribute. Its variable name is _view_crm_action.
Select an Alternate Address: Enables host company to associate an alternate
Accounts address with a commerce document. The system only displays this action
when the Customer ID associated with a commerce document has multiple addresses.
Its variable name is _select_alternate_address_action.

* Represents a system-generated action that is available on the main-document only.

13.3: MAINTAINING ACTIONS


Both user-defined and system-generated actions can be edited at any time. This section will show
you how to delete, add, and edit document actions.
To delete an action from the Actions List page, choose the action to be deleted by marking the
appropriate check-box under the Select column and clicking the Delete button.

To Add or Edit a Document Action


Standard Navigation Path: Admin Home Page > Commerce and Documents > Process
Definition > Select a Process > Documents > List > Select a Document > Action >List
Step 1:
On the Actions List page, click Add.
Step 2:
Enter a Name. This field will be used to link back to edit the action.

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


It is not possible to delete a system-generated-action.


Edits do not take effect on the application until the process is deployed.
REMEMBER TO DEPLOY!!!!

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.

13.4: GENERAL TAB

13.4: GENERAL TAB

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.

Upper Half of Tab


Label
Label
Variable Name

Description
Text label that is displayed on the transaction button
Unique name to the action. It cant be modified once its
been saved.

Description

Description of the action

Action Icon

Icon that is displayed on the transaction button

Layout Path

Button that opens the Layout Editor located on the main


document.

Email Notification Keyword


Approval Comment Mappings

Used for mobile approvals. See Chapter 15 for more details.


Specify a text area or history type attribute and map the
user comments to this field.

Lower Half of Tab

232

CONFIDENTIAL

Label

Option

Show Loading Dialog

Yes or No

Description

Advanced Modification

No Advanced Modification or
Define Advanced Modification

Advanced modification refers to an actions capability to


modify attribute values in the current document using
an advanced function. This is not a mandatory option.
Advanced modification is run in the end and hence can
override the value set by an attributes modify tab.

Advanced Validation

Simple Validations

With Simple Validation, the system checks attribute


values using individual attribute validations. This is
the default validation setting for document attributes.
Simple validations can include checks for numeric values,
numbers in a range, required attribute values, or any
other type of check that can be set for an individual
attribute.

This turns on or off a loading dialog on the user-side


when the user clicks on an action. The image and
text for the this can be customized in the application
settings. No is the default selection. Use this if the
script takes awhile to validate.

Using this option, the system performs cross-attribute


validations in addition to simple validations. Crossattribute validations between attribute values can be
created using the Script Editor. For example, you can
create validation at the document level that prohibits
discounts in excess of 20% when a purchase price is
under $1000.

Save without Validating

This option is used to turn off all checks on attribute


values when the action is being performed, plus save the
document data. This option guarantees that an action
will succeed and is useful for actions set up on timers,
such as an expiration action.

Modify Without Saving or


Validating

This option is similar to Save Without Validating,


only document data is not saved when the action is
performed. This validation method might be selected for
a modify type action set up to copy data from one set
of fields to another.

DEFINING ADVANCED MODIFICATIONS AND VALIDATIONS


Defining an advanced modification allows you to change the values of multiple attributes
at the same time when a particular action is clicked. For example, it will return values
from a commerce library pricing function, when a user clicks Save, Submit or
Update Line Items. This allows you to create the price logic once and run it on
multiple actions.
Defining an advanced validation allows you to display an error message if the user has
clicked an action, but has entered something incorrectly. For example, you could write
a BML script that has an error message reading -Line Item 2 exceeds the maximum
allowable discount. - based on your particular parameters.

CONFIDENTIAL

233

DOCUMENT ACTIONS

Define Validation Rules

13.5: MODIFY TAB

13.5: MODIFY TAB

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

What does it do?


Define an advanced function to determine the value.
This is a fixed input value for the attribute.
Action does not apply a modification. This is the default
option. It implies that the attribute will retain its current
value.
This option implies that the attribute value will be reset to
its default value when this action button is clicked.
This option implies that the attribute will always get its value
from the user input on the commerce side.

13.6: DESTINATION TAB


The Destination Tab allows you to control what screen the user is taken to after an action is clicked.
You can create destination rules for the Modify and Add from Catalog action types.
MODIFY ACTION

234

CONFIDENTIAL

Destination Option

What does it do?

Parent Page

Upon clicking the action, they will be taken to the parent


page. For example, on a modify action called Save on
the sub-document, the destination could be set to parent
page and the user would be taken to the respective main
document.

Same Page

The user will remain on the current 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.

Partner Object ID Attribute

Upon clicking the action, the user will be punched-in to the


appropriate object on the partner site. A valid value for
this field would be the variable name of the attribute which
stores the partner object Id information.

Define Destination Rule

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

What does it do?

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.

Define Destination Rule

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

Creating a Rule-Based Destination

13.7: INTEGRATION TAB

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.

13.7: INTEGRATION TAB


The Integration tab is displayed only if the site is integrated with another site or service. This tab
determines the order in which data is exchanged between BigMachines and a partner application. The
order in which the integration XSLs are used in this tab determines the order in which data is either
sent to or received from the partner application.

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.

13.8: DOCUMENT VIEWS TAB


The Document Views tab allows you to control the display of an action to different types of users
(Participant Profiles) in different steps of the transaction.

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

The user will not be able to see or use the action.

13.9: SPECIAL TABS


There are certain actions that contain special tabs. For example, the Print, Email, Display History
and Export Attachment actions contain the XSL Views tab.
XSL VIEWS TAB
This is the tab where you pick out what is printed, e-mailed or displayed to the user.

CONFIDENTIAL

237

DOCUMENT ACTIONS

Active
Inactive

13.8: DOCUMENT VIEWS TAB

EMAIL FIELDS TAB


Email actions contain a special tab called Email Fields. Email field rules instruct the system to autopopulate fields in the email pop-up window. With the fields populated by the system, users can send
email quickly. Email field rules apply to the email document action only.

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

13.10: APPROVAL SEQUENCES

APPROVAL SEQUENCES OVERVIEW


Almost all commerce workflows involve multiple approval stages. As an example, lets say
one of your sales agent submits a quote and it has to be approved by multiple Sales Managers.
Additionally, the quote might have to be approved by a Technical Manager before it is finalized.
It may also have to be approved by a VP if the sale is over $100,000 or has a high discount. The
purpose of the Approval Sequence is to provide ease of administration and improved user-side
functionality.
An approval sequence is triggered when the user submits a quote using a Submit action. You
can implement a string of reasons and their corresponding approvers to set up a multi-tiered
approval sequence. If there is no reason for an approver to approve the quote, the submit action
is successful and the quote is approved. If a reason is satisfied, the appropriate approver(s) must
Approve or Reject the quote.

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.

CREATING AN APPROVAL SEQUENCE


Step 1:
Create the Submit Action Set for your chosen Commerce Process.

13.10.1: SUBMIT ACTION SET

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.

13.10.1: SUBMIT ACTION SET


All actions in the submit action set are created automatically when a Submit type action is created.
The Submit Action Set consists of a parent Action and four sub-Actions as indicated below:

240

CONFIDENTIAL

SUBMIT ACTION SET IN ACTION LIST

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

13.10.2: APPROVALS TAB


The Approvals Tab controls the reasons and approval sequences. You can create the reasons that
a quote should be approved as well as set-up the proper required approvers. The Submit Reason
Tree is automatically created when you create a Submit action.
REASON TREE:
A reason tree is an ordered list of the reasons a quote needs to be approved. Each reason has a
condition that is evaluated to determine if a reason will become active.

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.

13.10.2: APPROVALS TAB

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.

13.10.2: APPROVALS TAB

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.

Advanced: Click on Define Function to open a Function Editor.


Step 4:
Click OK for return to the approval tree or click Cancel to go back to the approval
tree without saving your changes.
244

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

REQUEST APPROVAL SUB-ACTION


The Request Approval Sub-Action is automatically invoked when the use performs the Submit action
AND there are active reasons that must be approved. This action can modify the values of attributes
on the transaction document. There are three tabs available to you: General, Modify and Integration.
The Modify Tab functions the same as a standard modify action. The Integration Tab is available when
integration is turned on and will function the same as standard modify actions. See Recipe 13.4 for
information on how to make changes to the General Tab.
Select the Auto-Submit check box if you would like this action to
automatically execute when the parent Submit Action is clicked. If this is
checked, the pop-up box will not be displayed. This is recommended if every
quote must go through an approval process.

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.

13.10.4: RESET REASONS TAB

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

13.10.5: WORKFLOW INTERACTION

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.

13.10.5: WORKFLOW INTERACTION


In order to use Standard Approvals, the newly created Submit Action and its sub-actions must be
added to transition rules within Steps. We can understand how Standard Approvals will interact with
the workflow steps by employing an illustration involving 3 steps - Pending, Pending Approvals and
Approved.
Note: This is already set up in Quick Start.

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

13.11: ORDER OF OPERATIONS

13.11: ORDER OF OPERATIONS

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

13.11: ORDER OF OPERATIONS

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

You can customize and brand the user-side


commerce UI in an easy and intuitive way thanks
to drag & drop functionality, previews, grouping
and more. All of this is managed through the
Layout Editor, which can be accessed from Quick
Links, the Document List or by navigating to any
main or sub-document attribute or action.
The Layout Editor allows you to customize the
look and feel of your commerce UI by using Outer
Panels, Tabs, Columns, Layouts, Line Item Grids,
and the Commerce Stylesheet.

Sticky Action Bar

Attributes

Spacers

Line Item Grid

CONFIDENTIAL

253

14.1: LAYOUT ADMIN OVERVIEW


Standard Navigation Path: Admin Home Page > Commerce and Documents > Process Definition >
Selected Commerce Process > Documents > Quote > Layout > List

14.1: LAYOUT ADMIN OVERVIEW

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

These are the outermost containers for layout elements. A


commerce document can have multiple panels and you can
choose to show a label for a panel and make it collapsible,
or to collapse by default

Tabs

These have replaced Groups, which contain column layouts,


column attributes, action strips and actions.

Column Layouts
Columns
Action Strips
Attributes

Each tab can have one or many column layouts.


These contain attributes, action strips and spacers.
These contain one ore more actions. You can choose the
width and alignment of the actions.
All attribute display properties are available in the Layout
Editor and not the Attribute Editor. For example, rows and
columns of a text area type attribute are available in the
layout.

Actions

These are commerce actions placed in the action strips.

Spacers

These have a default of 25px, though you can set the height
as necessary.

Line Item Grid

The Line Item Grid is available in the Main Document


layout.You can define line item columns and map attributes
to these columns.

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

14.2: INPUTS OVERVIEW


An Input defines a variety of field-level input objects. Each input has editable properties that are
specific to their input type.
EXAMPLE OF INPUT ELEMENTS

14.2: INPUTS OVERVIEW

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:

Inputs are displayed as various color-coded boxes:


Gray: Attributes
256

CONFIDENTIAL

Green: Action Strips


Gold: Line Item Grid
Yellow: Spacers
Each input has an associated icon, which is displayed as a box icon on the left side of each
input:
Action Strip
Attribute
Line Item Grid

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

14.3: OUTER PANELS


Outer Panels are primarily used to group commerce tabs together. They provide the collapsing/
expanding icon for the tab as well as display a label that describes the tabs they contain.

14.3: OUTER PANELS

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.

In the Visual Layout Editor, an Outer


Panel will contain the following
elements: Label, cog icon to open
the panel dialog box, a delete icon
to remove the panel entirely and
a collapse/expand icon to make it
easier to view panels the user is
working on.
On the user-side, the Outer Panels
are viewed as a header and can also
be collapsed/expanded by the user.

OUTER PANELS (USER-SIDE)


When a user opens a transaction, you will notice that the layout elements can be separated into
different section, which is what the Outer Panels represent to the user. In this example, the Outer
Panels are General Information and Items.

258

CONFIDENTIAL

OUTER PANEL (ADMIN SIDE)

Adding an Outer Panel


Step 1:
To add an outer panel, click Add in the Administration Actions toolbar.

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.

14.3: OUTER PANELS

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

14.4: COMMERCE TABS


Commerce Tabs are displayed inside of an Outer Panel. There can be multiple tabs in a panel. Tabs
can be mapped to hide parts, models or special product families. Tabs can also contain multiple
column layouts within them.
COMMERCE TABS (USER-SIDE)

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

Adding or editing a Commerce Tab


Step 1:
To add a commerce tab, click Add in the Administration Actions toolbar.
Step 2:
Select Layout Element from the drop-down menu.
Step 3:
Select Add a New Tab from the menu.

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.

14.4: COMMERCE TABS

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

14.5: COLUMN LAYOUTS


Column Layouts are represented as multi-column structures where each column contains Input
Columns. A commerce tab is the only object that can contain columns layouts. Each layout has an
independent column structure compared to neighboring layouts. There is no relationship between
column layouts.
Example of Columns Layout (user-side)
The example below shows 3 different input columns inside of a commerce tab. See Recipe 14.6
for more information regarding Input Columns.

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

Example of Column Layout (user-side)


On the first line, you will see five different elements highlighted in a different color. Each element
is placed in its own column layout and they have been stacked on top of one another. All the
elements in groups 1 and 2 have each been placed in separate column layouts.

14.5: COLUMN LAYOUTS

Adding a Column Layout


Step 1:
Determine the number of columns that are required for the column layout. There is a
maximum of 20 columns allowed under one Commerce Tab.
Step 2:
Select the Auto-size Columns box if the columns should be auto-sized. Auto-Size will set
the Column Layout to 100% and divide the size equally among the columns. Example: If
you have 4 columns, then the Column Layout will auto-size to 4 columns at 25% each. If
you do not select this box, the first column will default to 100% and the remainder of
the columns will have a default size of 300 pixels. Please see Input Columns for more
information.
Step 3:
Click OK to save the changes and close the dialog box .

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

14.6: INPUT COLUMNS


Input Columns are the columns that make up a Column Layout. They contain the commerce
attributes, actions and the line items group.
INPUT COLUMNS (USER-SIDE)

INPUT COLUMNS (ADMIN)


In the Visual Editing Area of the Layout Editor, an Input Column should be displayed with a:
1. Static Label displaying the column width.
2. Cog Icon to open the Panel dialog box.

LAYOUT ADMINISTRATION

To add a column to a column layout, please see Recipe 14.5.

Editing an Input Column


Step 1:
Set the column width in pixels or percentages. If you chose to set-up the Column
Layout and auto-size the Input Columns, then the width will be grayed out. For best
results, it is recommended that all columns in the layout add up to 100%.
Step 2:
Determine the label alignment: Left, Top or Right.
Step 3:
Determine the label width in pixels. The default width is 100 pixels. If the label is
wider than specified, it will be cut off.
Step 4:
If Collapse Label is checked, the space reserved for the label will be removed.

CONFIDENTIAL

265

Step 5:
Determine the label padding in pixels. The default padding is 5 pixels.

14.7: INPUT ELEMENTS

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.

14.7: INPUT ELEMENTS


Within Input Columns, you can add four different input elements: Action Strips, Attributes, Spacers
and Line Item Grids. In this recipe, you will learn how to add attributes and spacers.
INPUT SPACERS
An Input Spacer is just a blank space with a defined height that is displayed vertically between other
inputs. Spacers are displayed with a height that you define.

266

CONFIDENTIAL

In the Visual Editing Area of the Layout Editor, a Spacer should be displayed with the following:
1.
2.
3.
4.

Static Label: Spacer


A read-only display of the spacers height value.
Cog Icon to open Edit Properties Window
Delete Icon to remove the attribute from the column.

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

14.7: INPUT ELEMENTS

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.

14.8: ACTION STRIPS


There are a few types of input elements that will be discussed in this recipe. First, we will discuss
Action Strips and how to add actions to these strips. We will also touch on Sticky Action Bars, what
they are and why they are used.

14.8: ACTION STRIPS

EXAMPLE OF AN ACTION STRIP (USER-SIDE)


Here is what the action strip will look like to the user.

EXAMPLE OF ACTION STRIP IN LAYOUT


1.
2.
3.
4.
5.

Action Strip Icon


Action Strip Label
List of Commerce Actions that belong to this Strip.
Cog Icon to open Edit Properties Window.
Delete Icon to remove the attribute from the column.

Adding and Editing An Action Strip


Step 1:
To add an Action Strip, click on Add and select Layout Elements from the menu.
Step 2:
Select Add a new Action Strip from the drop-down menu and drag & drop it into
an Input Column. The red dotted line represents where the action strip will be placed.
The green check mark indicates that it can be dropped in that space.
Step 3:
Repeat Step 1 and click on Actions to open up the Actions menu.
Step 4:
Drag & Drop Action into your Action Strip.

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

Editing an Action Strip

14.8: ACTION STRIPS

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.

14.9: LINE ITEM GRIDS

14.9: LINE ITEM GRIDS


The Line Item Grid is a type of input that represents the line item table in a commerce document. In
the Visual Editor Area of the Layout Editor, a Line Item Grid should be displayed with the following:
1.
2.
3.
4.

Static Label: Line Item Grid


Line Item Grid Icon
Cog Icon to open Edit Properties Window
Delete Icon to remove the attribute from the column.

Example of Line Item Grid (User-Side)

Adding and Editing a Line Item Grid


Step 1:
To add a line item grid, click Add in the Administration Actions toolbar.
Step 2:
Select Layout Element from the drop-down menu.
Step 3:
Select Add/Move a Line Item Grid from the menu.

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.

Editing a Line Item Grid

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

To edit a line item grid, first click on the Cog icon.

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.

14.9: LINE ITEM GRIDS

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.

14.10: COMMERCE STYLESHEET


Style sheets are basically CSS (Cascading Style Sheet) files that are used to set up commerce
processes. This stylesheet provides an easy interface for you to define commerce transactions
with a choice of fonts and icons. A default CSS is provided that the user can customize using the
Commerce Stylesheet Editor page.

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

STICKY BAR PROPERTIES


You can use this section of the stylesheet editor to define the color of the Sticky Bar.

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

14.10: COMMERCE STYLESHEET

Specify Upload Icon Properties:

For all icons:


Click Browse to open the File Manager. Scroll through the images in the File Manager. To select an
image, click the image thumbprint. This displays the selected icon next to Browse. Click Reload to
make the change permanent. Ensure that the image is of the size 20 pixel by 20 pixel.
LINE ITEM PROPERTIES
Use this properties section to set header and footer properties that are specific to the line item
grid. There is also a property called Highlight Color which is the color that highlights a line youre
working on in the line item grid.

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:

14.10: COMMERCE STYLESHEET

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

14.10: COMMERCE STYLESHEET

15
COMMERCE WORKFLOW
In This Chapter:







Overview of Workflow
Workflow Steps
Participant Profiles
User Access Rights
Document Views
Transition Rules
Notifications
Mobile Approvals

Workflow administration is the final step in setting up


a commerce process. Workflows are made up of steps,
which define the states transactions can be in, as well
as document permissions and routing. Steps can be
thought of as stages of the Quote to Order process.
Commerce processes can have any number of
workflow steps. For example, an RFQ process could
have steps like Submitted, Quoted, Accepted,
Declined and Expired. These steps could transition
a transaction from an RFQ document to a Quote
document to a PO document using transition rules.
Workflow steps use profiles to define access rights,
transition notification, and transaction views. The
commerce system automatically creates a default
profile for each workflow step. You can customize the
default profile and create additional ones to support
different transaction access rights.

EXAMPLE OF WORKFLOW
The Quick Start process includes the following 6 Steps:

CONFIDENTIAL

283

15.1: OVERVIEW OF WORKFLOW


Lets get started by first learning some important terminology:

15.1: OVERVIEW OF WORKFLOW

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

15.2: WORKFLOW STEPS


Standard Navigation Path: Admin Home Page > Commerce and Documents> Process
Definition > Select a Process > Steps > List
You can manage workflows from this administration area. For example, you can delete, re-order
or clone steps from the Steps List page.

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.

Adding/Editing a Workflow Step


Since you have 6 steps defined in the Quick Start Process, you may not need to add any
steps, but you can use this information if you need to edit the Steps.
Step 1:
Enter a step Name. The name is displayed when you encounter the step. For example,
Start. This is a required field.

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.

15.2: WORKFLOW STEPS

Select Simple if you want to add a simple forwarding rule. If so:


Select a Profile from the drop-down list provided.
Select All Groups if you want to link this step to all the groups.
Select Selected Groups if you want to link this step to a few selected groups.

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

15.3: PARTICIPANT PROFILES


Within workflow steps, profiles are used to create different rules for different user types. The
commerce system always generates a default profile whenever a new workflow step is generated.
In addition to the default profile, you can also create custom profiles.
There are two tasks involved in profile administration. The first task involves creating the profile
name. The system performs this automatically for the default profile. The second task involves
defining the profile rules, including users access, transition rules and views. This must be completed
for all profiles.
When a workflow step contains multiple profiles, you can order them to set the profile
precedence. The BigMachines system uses profile precedence to determine which profile to use
when a user is included in more than one within a single step.
Component

What does it do?

Notes

Controls what attributes and actions


are visible to which users.

In order for attributes and actions to


appear on documents, they must be
included in document views groups.

Transition Rules

Moves the transaction from one step


to another.

Transition rules are set up on


document actions. For example, when
a user performs a Save action on a
document, the document can move
from a Pending step to a Saved step.

User Access Rights

Defines who is included in a profile


and which steps they have access to.

In order for a user to be able to


conduct commerce transactions, they
must be included in a profile for each
step in the transaction.

ADDING A PARTICIPANT PROFILE


This is a simple example of how to set-up a participant profile. Note, the Quick Start
process has already created at least TWO participant profiles per step: Sales Rep and
Admin. In this example, we will create a participant profile for Manager.

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

15.4: USER ACCESS RIGHTS

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!!!!

15.4: USER ACCESS RIGHTS


Users access right designates who is included in a profile. Access can be granted based on user type,
group, or performers in other document steps.
A user is included in a profile if one of the following conditions is satisfied:
The user belongs to a company type and user type granted access rights.
The user belongs to a group granted access rights.
The user is a performer of any action in a listed step.
Users can also be granted access rights through auto-forwarding rules.
288

CONFIDENTIAL

ASSIGNING USER ACCESS RIGHTS


Now that we have created a Manager profile, the next step is assigning rights to this
profile. You can assign rights at a company level, group level or based on other steps.
In this exercise, you are going to add a user type and an approver group to a manager
profile. You will also learn how to set up a performer step.

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.

15.4: USER ACCESS RIGHTS

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

15.5: DOCUMENT VIEWS


Profile views set which document attributes, document actions and process actions are active in a
profile. You can use profiles and profile views to set different permissions to document attributes
and actions for each user group.
For example, you might want to give a supplier read-write access to ship date field, whereas for
buyers, you might just want to display the field, but not let them edit it. To manage two different
types of behavior for the same attributes in a document, you would use two different profiles, each
with its own profile view.
Profile views control whether document attributes are read-write, read-only or hidden. Views also
control whether document actions are active or inactive. Active actions appear to users, inactive
ones are hidden from view and cant be used, and hidden are hidden from view but can still be
used with SOAP and submit actions.
You can define which document attributes, document actions, and process actions you want to
display within each profile. Each document in the process displays as a tab below the process
actions. When a tab is open, all the actions and attributes contained in the document are displayed.
For each document, set how you want each object to display when the profile triggers.

Defining Process/Profile Views

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

15.5: DOCUMENT VIEWS

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

15.6: TRANSITION RULES


Transition rules designate when the next document or document state triggers. Actions that take
users to the same document (or document state) do not require transition rules.
Within transition rules you can also set up email, fax, or XML notification to trigger when an
action occurs. Transitions from one step to another will also trigger auto-forwarding rules that
have been set up for the step a transaction moves into. Remember the Steps in the chapter
introduction? The green arrows below represent the transition rules moving a transaction from
one step to another.

Here are some rules regarding transition rules:

DEFINING TRANSITION RULES


When you select Transition Rules from the navigation menu next to a Participant Profile, you will
see the following page:

CONFIDENTIAL

293

COMMERCE WORKFLOW

They are bound to one and only one action.


They can change the step in the commerce process.
If a user does not belong to a profile in the next step, the user loses all access rights to
the transaction.
You can order transition rules to set rule precedence.
When there is more than one transition rule defined for an action in a single step, the
system utilizes the transition rule with the highest precedence.

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.

15.6: TRANSITION RULES

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.

Adding/Editing a Transition Rule


Step 1:
From the Transition Rules page, click Add.
Step 2:
Enter a rule Name.
Step 3:
Enter a Description for the rule.
Step 4:
Click Add. This displays the section where you can define Condition and Transition
settings for the rule.

NOTE: To edit Transition Rules, continue from Step 3 or click on a <rule


name> link to the Transition Rules page.

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.

EXAMPLE OF DEFAULT NOTIFICATIONS


Pending Approval

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:

15.6.2: MOBILE APPROVALS

15.6.2: MOBILE APPROVALS

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.

Setting Up Mobile Device Approvals


Using your Process Definition Quick Links, go to List of Documents > Quote > Actions
> Approve(or Submit)
Step 1:
Define an Email Notification Keyword for an action. NOTE: Multiple keywords,
separated by a tilde, can be associated with one action. Keyword(s) must be unique, can
use alphabets, umbers and underscores and can only be associated with ONE action in a
process. A keyword cannot have multi-byte characters.

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:



Data Columns Overview


Process Manager Columns
Process Actions
View Manager

Transaction Manager can be referred to as Commerce


Views, Commerce Manager, and Quote Manager. For
the purpose of this cookbook, we will use Transaction
Manager.
You can access the Transaction Manager by clicking on
the Quotes link or tab. This can be access from your
Home Page or the Admin Home Page. The Header on
the Transaction Manager will be <Commerce Process>
Manager. For example, if you have a commerce
process named: Totally Awesome, you will see:

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

16.1: DATA COLUMNS OVERVIEW

16.1: DATA COLUMNS OVERVIEW


Attributes can only be mapped to the document under which they are created. For example, if you
created an attribute named Quote Description under the Quote document, you will not be able
to map it to a sub-document. Data Column Mappings cannot have duplicates; an attribute can be
mapped to only one document.
Data Columns are used to create Process Manager Column mappings. They are also useful in
Reporting and Search because both these functions can only be performed on data of attributes
that have been mapped in the data columns. Data Columns are also important for workflow timers,
which requires attributes be mapped to a data column.
Each commerce process can have 151 data column mappings. 101 one of these can be mappings of
main document attributes with the corresponding main document. The remaining 50 are used to
map line item attributes with the corresponding sub-documents.
MAPPED DATA COLUMNS:

MAPPED DATA COLUMNS SHOWN AS SEARCH VIEW COLUMNS:

MAPPED DATA COLUMNS AVAILABLE AS REPORTING DISPLAY COLUMNS:

306

CONFIDENTIAL

Adding/Editing A Data Column


Step 1:
From the Admin Home Page, navigate to the Mapped Data Column page: Commerce
and Documents > Process Definition > Select a Process > Data Columns > List.
Step 2:
Click Add.
Step 3:
Select the document to map the attribute to from the Document Mapping menu.
Remember that attributes can only be mapped to the document under which they were
created.
Step 4:
Select the attribute you would like to map to your selected document.
Step 5:
Set a default Search and Report label. These are the labels that you will see when
setting Views and when selecting filter attributes within reports.
Step 6:
Click Add to save your changes or click Cancel to return to the Mapping Data Columns
page without saving your changes.

TRANSACTION MANAGER

CONFIDENTIAL

307

16.2: PROCESS MANAGER COLUMNS

RESTRICTING ACCESS FOR DATA COLUMNS


Data columns can be hidden from certain users or groups in Reporting, Search and the Process
Manager. You might choose to set up permissions on data columns to ensure that sensitive
information mapped in the data columns is not visible to all users in Reporting, Search and/or
Process Manager.
From the Mapped Data Columns page, click on the icon on Restrict Access.

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.

16.2: PROCESS MANAGER COLUMNS


Now that your Data Columns have been created, you can use them with Process Manager Columns
to manage the layout of the Transaction Manager page. You can create a Process Manager Column
and map the column to the main document or line item attribute that you want to display in the
Transaction Manager page. The main document or line item attribute must be mapped to the
relevant document in the data columns. The Process Manager Column is actually mapped to the data
column mapping of the main document or line item attribute.

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

Adding/Editing A Process Manager Column

16.2: PROCESS MANAGER COLUMNS

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.

16.3: PROCESS ACTIONS


Process actions trigger events within a Transaction Manager to occur. The BigMachines system
provides a standard set of process actions for each commerce process. The types of process
actions you can support are: copy, email, forward, move, and open transaction.
Process actions can be managed from the Action List for Process page. Each action can be
customized with different options, depending on the actions functionality. For all actions, you
can define action labels and create certain rules depending on the action. For print and email
actions, you can design custom forms using XSL Stylesheets. For the copy action, you can define
initialization options for copied transactions and generate one or more copy options using
sequences.

Action Name

Variable Name

Copy

_action_process_resubmit

Email

_action_process_email_print

Print

_action_process_print

Forward

_action_process_forward

Move

_action_process_move

New Transaction

_action_new_transaction

Enables users to create a new commerce


transaction without first having to add a line
item

Open Quote

_open_quote_process

Enables users to open documents listed in


the Transaction Manager. This a dynamically
generated hyperlink to each transaction.

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

NOTE: It is not possible to create your own Process Actions.

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.

16.3: PROCESS ACTIONS

During the copy process, the system displays a copying in progress status page. When the process
completes, the new transaction opens.

MANAGING COPY ACTIONS

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.

Process Views Tab:

MANAGING COPY SEQUENCES


One or more sequences can be created for a copy process action to offer users multiple options
for copying transactions. Sequences can be used for copy process actions only. A sequence
informs the system which document actions to perform while copying a transaction and who
should have access to the copy option. Users only see the copy options they have access rights to.
When only one sequence exists for a user type, the system automatically performs it upon the
user selecting to copy a transaction. When no sequence exists, the system performs the default
copy behavior which is to copy the first step of the first document in a transaction.

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.

Adding/Editing A Copy Sequence


Step 1:
Click on Sequence List from the Process Actions List page.

16.3: PROCESS ACTIONS

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.

EMAIL AND PRINT ACTIONS:


The email and print action enables users to access email-friendly OR printer-friendly document
formatting. This allows user to print/email without opening the transaction. When you click on
the either the Email or Print action from the Process Action List page, you will be able to edit
information on three tabs: General, XSL Views and Process Views.

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.

16.3: PROCESS ACTIONS

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

Setting Access Rights for New Transaction Action:


Step 1:
From the Process Actions List page, click on Access Rights.
Step 2:
Select a company type from the Company Type drop-down list who you want to be
able to perform the Copy action.
Step 3:
Select a user type from the User Types drop-down list who you want to be able to
perform the Copy action.
Step 4:
Click the greater than (>) sign button for moving the selected Company Type:User
Types set to the Access Rights list box.
Step 5:
Remove a Company Type: User Types set from the Access Rights list box by selecting the
Company Type: User Types set and clicking the lesser than (<) sign button.
Step 6:
Click Apply to save the changes made.

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:

16.4: VIEW MANAGER


BigMachines provides the ability to search through transaction data. You can generate search on
commerce main document and line item attribute data as long as the attributes have been mapped in
the data columns. Search will return results based on user permissions. The user can specify criteria
for the attributes so that the search returns only those records that satisfy the criteria.

16.4: VIEW MANAGER

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

Example of Filter Attributes


Step 3:
After you have selected your filter attributes, Click Next.

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

16.4: VIEW MANAGER

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

16.4: VIEW MANAGER

322

CONFIDENTIAL

17
PROCESS INVOCATION
In this Chapter:




Invocation Actions
Invocation Rules
Assign User Access Rights
Catalog Page Reference
Multiple Invocations

Process Invocation is the transition from any catalog


or invocation page into any commerce process. In
commerce administration, it is where you define the
link between the product catalog and the commerce
transaction. For example, similar buttons are found
at the bottom of a catalog page (model configuration,
parts, etc.):

Custom button behavior can be defined for each


user type. Before you can manage catalog actions,
commerce processes must already exist as they create
the processes that the buttons invoke. If commerce
processes have already been created, you can generate
process invocation buttons one at a time for each
catalog page.
Similar to other commerce components, process
invocation buttons are created in an active, pending
state. In order for a button to be visible outside of administration, the button must be deployed. The
deploy process can be performed for individual catalog pages.

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

17.1: INVOCATION ACTIONS

17.1: INVOCATION ACTIONS

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.

Adding/Editing Invocation Actions


From the Page List: Click on a Page Title > Click Add.
Step 1:
Enter an action (button) name in the Name field. The button name is used to label the
button on the selected catalog page. This is a mandatory field and cannot be left blank.
Step 2:
Enter a Description for the action (button).
Step 3:
Select the Action Type (the type of action the button will perform).
Start Process Action: Creates a button that spawns a commerce processor add to
an exiting transaction. (The specific commerce process is configured later as a rule.)
Shopping Cart: Creates a button that allows users to add multiple products to a
shopping cart before checking out.
Favorites List: This creates a button that adds catalog products to the Favorites List.
324

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

17.2: INVOCATION RULES


Once your action has been created, you will need to create the invocation rule associated with
it. First, from the Actions List, you will have to select Rules from the Navigation Menu next to the
selected action.
After you have created your actions, rules and have established user
access rights, you must return to the Page List. Select the required Page
Titles and click Deploy. Doing so will activate all buttons contained in the
catalog-page on the user-side.

CONFIDENTIAL

325

PROCESS INVOCATION

Action types cannot be changed after the button is deployed.


Buttons are created in an inactive, pending state. After a button is complete,
meaning both user types and rules have been created, the button can be
deployed to become active on catalog pages.
Use caution when deleting a process invocation action button, it is NOT
possible to undo this operation.

Adding/Editing Invocation Rules


Step 1:
From the Actions List Page > Select an Action > Select Rules from the drop-down menu>
Click List > Click Add.

17.2: INVOCATION RULES

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

17.3: ASSIGN USER RIGHTS


From the Actions List, you can select User Access Rights from the Navigation menu. This page
helps you assign access to a button action based on the user type. Invocation buttons will not be
shown to the user if access rights are not assigned.

Assign User Rights to Invocation Action


Step 1:
From the Action list page > Select an Action > Select User Access Rights from the
drop-down menu > Click List.
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.

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

17.4: CATALOG PAGE REFERENCE

17.4: CATALOG PAGE REFERENCE

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

The Part Associations (or Part Tree) page displays subparts


associated with a part. This page appears after a user clicks
on a part listed on the Part Display page.

Product Line List

The Product Line List page displays a list of product lines,


after a user has conducted a product line search.

Product Line Profile

The Product Line Profile page shows product line details


for a single product line. This page appears if a product line
search results in a single product line or if a user clicks a
product line from the Product Line List page.

Model Profile

The Model Profile page displays model details for a single


model. This page appears if a model search results in a single
model or if a user clicks a model from the Model List page.

*Model Configuration*

The Model Configuration page displays configurable


attributes for configurable models. This page is accessible
from the Model Profile page, only when a model has
configurable attributes. Process invocation buttons created
for this page display on the last page of a configuration flow.

Recommended Spares

The Recommended Spares page shows the spare models or


parts available for a single model. This page is accessible from
the Model Profile or Model Configuration page, depending
on whether the model has configurable attributes. The
Recommended Spares page is accessible only when models
have spare parts.

*Favorites List*

The Favorite List acts like a shopping cart, only it maintains


products continuously, even after products are purchased.
When process invocation links exist, users can add products
to the Favorite List, and then make purchases from the list.

Product Line Compare

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.

Bill of Materials or Serial Number

The Bill of Materials page displays a BOM after a user clicks


a serial number on the Serial Number Search Results page.

Multiple Parts Buy

328

The Multiple Parts Buy page is available when the part


search template is used on the commerce home page,
enables users to submit quotes, orders or purchases for
more than one part. This page contains a parts entry form
for putting together multiple parts orders.

CONFIDENTIAL

PROCESS INVOCATION

CONFIDENTIAL

329

330

CONFIDENTIAL

17.4: CATALOG PAGE REFERENCE

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

18.1: SHOPPING CART INTRODUCTION

18.1: SHOPPING CART INTRODUCTION


Shopping Cart functionality is a requirement for many B2C e-commerce businesses. The BigMachines
shopping cart enhances the e-commerce capability by providing this functionality.

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.

Overview of the Shopping Cart Process:

332

CONFIDENTIAL

This feature is designed to allow


users to search for parts or
configure line items and add
them to the Shopping Cart while
remaining on the same page.
Users will be able to increase or
decrease quantities, delete nonmandatory items and invoke a
commerce process from the cart.
They will also be able to hide the
cart in the navigation menu or clear
the cart entirely.
It is important to note that the
shopping cart is session-based. If
a user logs out of BigMachines, the
contents of his cart will be lost.

18.2: ENABLE SHOPPING CART


There is one Shopping Cart available per commerce process. This functionality is disabled by
default. The first step to making the shopping cart visible to your users is to enable it.

To Open the Shopping Cart Editor:


Step 1:
From the Admin Home Page, click on Process Definition. Find the process that you are
going to add the Shopping Cart feature to.
Step 2:
Select Shopping Cart from the drop-down menu under Navigation and click List to open
the Shopping Cart Editor.

Step 3:
In order to configure the Shopping Cart, make sure the Enable Shopping Cart box is
checked.

Shopping Cart Option

Description

Check Out Button Label

By default, Check Out will be displayed on this button.


However, this can be edited to your preference.

Display Cart Total Value

This is the position at which to display the cart total. You


can display this above the cart items, below the cart items
or you can select No to display the contents of the cart
without showing the total.

Items Selected by Default

Check to have the contents of the cart selected for check


out by default.

Display Clear Cart Button

Check to enable the Clear Cart button which allows users


to remove all cart items at once.

Clear Cart Button Label

Be default, Clear Cart will be displayed on this button.


However, this can be edited to your preference.

Hide Cart Button Label

By default, Hide will be displayed on this button.


However, this can be edited to your preference.

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:

18.2: ENABLE SHOPPING CART

Sample of a Configured Shopping Cart

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

The description field is mapped to the Model Name for a


model and a Part Number for a part. The user cannot edit
this field.

Price

The price field contains the Total Price for a configured


Model. If the user adds a part and price books are not
available, then the Price field contains the price associated
with that part. The user cannot edit this field.

Quantity

For recommended items and for items chosen in the


Multiple Parts Buy page, this field is populated by the
recommended or user-specified quantity. You can choose
to make this field editable, however, the user cant modify
the mandatory items.

334

CONFIDENTIAL

Lets go ahead and edit the layout of the Shopping Cart.

To Edit Shopping Cart Columns


Step 1:
Determine the order you would like display the columns and then drag & drop them into
place. Change the label of the columns (if necessary).
Step 2:
Check to make the Quantity field editable to the user.

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

18.3: INVOKE THE SHOPPING CART

18.3: INVOKE THE SHOPPING CART

We recommend opening Quick Links before you begin.


Add to Cart buttons are process invocations, just like the commerce process itself. You must create
this invocation. The Shopping Cart can be added to any of the following pages:

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.

Create Cart Invocation Action


Step 1:
From the Admin Home page, click on Process Invocation.
Step 2:
Click on the link to Model Configuration (under Page Title heading).
Step 3:
Click Add to add a new action.
Step 4:
Name the action: Add to Cart.

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.

Create Cart Invocation Rule


Step 1:
Click Add to open the Create/Edit Process Invocation Rule page.
Step 2:
Enter the name Add to Cart. It is Best Practice to keep this name similar to the name of
your Action.
Step 3:
Select the Rule Type (Simple or Advanced).
Step 4:
Select the commerce process you would like to invoke from the Shopping Cart.

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.

18.3: INVOKE THE SHOPPING CART

Deployment of Pages and Processes


Step 1:
Navigate back to Page List.
Step 2:
Select the pages that you have created invocation actions and rules on.
Step 3:
Click Deploy.

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

18.4 - NAVIGATION MENU


When a commerce process contains an enabled Shopping Cart and it is deployed for a commerce
process, a new User-Defined Commerce navigation link is automatically created. This link
behaves as View Cart. In order to configure this link, you will need to navigate to the Navigation
Menus area found on the Home Page.

Configuring Navigation Menus for Shopping Carts:


Step 1:
Determine where you would like to display your View Cart button, either in Top-Side or the
Side Bar.
Step 2:
Click List Links next to Commerce under the Navigation Menus header.
Step 3:
Click on the tab labeled User Defined.
Step 4:
Click on Edit next to your Shopping Cart Link to open the Link Editor.

Step 6:
Click Update to save changes and return to the main page.

Make sure to deploy your changes on the Navigation Menus page.


CONFIDENTIAL

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.

18.5 - USER-SIDE FUNCTIONALITY

18.5 - USER-SIDE FUNCTIONALITY


Now that you have configured your Shopping Cart and deployed it, the users will now have access to
it. All user-side pages will have the View Cart navigation link available and it will be available for all
configuration flows.

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

This will expand and collapse a model to show or hide all


recommended and mandatory items.

Quantity

This will set the line item quantity in a commerce


transaction. Non-mandatory items can be edited. The
default quantity is 1.

Description

Shows the Model Name or Part Number of an item.

Price

List price of the item.

Delete Icon

Removes the item from the cart.

Clear Cart

Removes all items from the cart.

Hide Cart

Hides the cart panel. To view again, click on View Cart


navigation link.

Check Out

This will begin a new commerce transaction. There must


be at least one item in the cart.

Check-box to Select Items

If this box is checked, that means the item is selected for


Check Out.

SHOPPING CARTS

CONFIDENTIAL

341

342

CONFIDENTIAL

18.5 - USER-SIDE FUNCTIONALITY

19
REPORTING
In This Chapter:
Report Manager Overview
Report Builder - Filters
Report Builder - Display Columns
Charts
Run Reports
Schedule Reports
Calculated Columns

BigMachines provides the ability to generate and store


reports.You can generate reports on commerce main
document and line item attribute data. Reporting will
return results based on user permissions. The user can
store, edit, run and manage reports in the Reporting
Manager. Folders are made available for organizing
reports within the Reporting Manager.
FullAccess users can choose to share their reports
with other users. The other users can run the report
on the transaction data that is available to them
depending on their user rights. Reports can be built
from scratch or from saved views. When a report is
run, the results generated are displayed on the UI.
These results can also be downloaded to Microsoft
Excel. The results can also be sent as an email
attachment.
IMPORTANT: Reporting is an add-on module.

CONFIDENTIAL

343

19.1: REPORT MANAGER OVERVIEW

19.1: REPORT MANAGER OVERVIEW

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.

To Create a Folder to Store Reports:


Step 1:
Click Edit under the Folders section within the Report Manager.

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.

To Create a Folder to Store Reports:


Step 1:
Click Add from the Report Manager to open the Create Report pop-up.

CONFIDENTIAL

345

19.2: REPORT BUILDER - FILTERS

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.

19.2: REPORT BUILDER - FILTERS


You can specify filter attributes to generate report results. For example, you can create and run a
report that will give you all the Closed quotes that have been created in the last 60 days. In this
example, you specify the Quote Status, the Date Created and the Duration (Last 60 days) as the
filters to generate the report.
There are two types of filter criteria available for reporting - Standard and Advanced. The report
results must satisfy both standard and advanced criteria values. You must also select at least one
display column, which will be covered in Recipe 19.3.
To create report filters, you can do one of the following:
Create a new report and add filters after you have completed the steps in Recipe 19.1
Click the Pencil icon under the Edit Header in the Report Manager
Click Run and then click on the Report Builder Tab.

To Create a Report Filters


Step 1:
Click the Pencil icon under the Edit header within the Report Manager.

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.

19.2: REPORT BUILDER - FILTERS

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

19.3: REPORT BUILDER - DISPLAY COLUMNS


Once you have created your standard and advanced filters, you will need to define at least one
display column in order to run your report. Failure to do so will result in an error message.

You can select from three columns:


Calculated Columns: This opens a BML-Like editor that allows you to write a script to
define the output of the calculated columns. (See Recipe 19.7)
Quote Attributes: These are the same attributes available in Advanced Filters. The
attributes are those that are mapped to Data Columns, as discussed in Chapter 16.
Line Item Attributes: These are the line(sub-doc) attributes that are mapped to Data
Columns, as discussed in Chapter 16.

Calculated Columns are immovable and placed at the right-end of the


Display Columns panel, in the order in which they were created.

CONFIDENTIAL

349

REPORTING

ADDING A DISPLAY COLUMN TO A REPORT


To add a display column to the report, select the attribute and drag & drop it into the Display
Columns panel on the right. The order in which you place your columns is how they will display
in the report. A green arrow next to the attribute name means that the attribute can be placed in
the position youve selected. A red NO sign will appear next to the attribute if it is not allowed.

19.3: REPORT BUILDER - DISPLAY COLUMNS

DISPLAY COLUMN OPTIONS


Calculated Columns, as well as Quote and Line Attributes, have additional options that can be
selected from the Display Columns panel. To access these options, click the blue arrow next to the
column name. If you need to remove a Quote or Line Attribute from the Display Columns panel,
you will do so by accessing these options.
Calculated Column Options

Format: Switch between the Number and


Currency formats. If the Number format is
selected, another option will appear allowing you
to set the number of decimal points.
Display On: Specify at which Group Level it
should be displayed.
Edit: Make changes to the calculated column.

Non-Numeric Quote and Line Attribute Options


All quote and line item attributes that are not numeric have these three options:
Display as Link: Displays the attribute as a
link that when clicked, takes you to the quote.
Group: Determine if this attribute should be
used to group the rows. Doing so will remove
the attribute as a Display Column. For example,
you can group quotes by their Submitted Date or
by Selected Currency.
Remove: Click to remove the column from
the Display Columns panel.
Numeric Quote and Line Attribute Options.
All numeric quote and line attributes that numeric have the ability to be displayed as aggregates.
Aggregates are used in conjunction with Groups to provide data on the x-axis of charts. In this
example, you will see the options for the attribute Quote Total.
Sum: Reflect the sum of the aggregate for
an attribute. I.e., Quote Totals.
Average: Reflect the average for an
attribute.
Minimum: Reflects the minimum value of all
Quote Totals for a group. If there are three
quotes ($145,694.23, $34.56, and $355, 434),
the minimum will find $34.56.
Maximum: Reflects the maximum value of
all Quote Totals for a group. If there are three
quotes ($145,694.23, $34.56, and $355, 434),
the maximum will find $145,694.23.

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.

VERTICAL BAR, HORIZONTAL BAR AND LINE CHARTS

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

Click the check box to include a chart with your report.

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

Enter the chart title in the Title text field.


Select the font youd like the title to be displayed in from the drop-down menu:
Courier, Helvetica, Times New Roman or Arial Unicode MS.

[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.

Chart Builder Option


Include Chart

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

Set the minimum value for the attribute.

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

19.5: RUN REPORTS

19.5: RUN REPORTS

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

Click from Report Builder, Chart Builder or Run Report


tab to save changes to your report.

Email

Click to open a pop-up window and email your report to


multiple contacts. See below for details.

Export to Excel
Back

Click to create a downloadable Excel version of your


report and chart.
Click to return to the Report Manager.

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

19.6: SCHEDULE REPORTS


As mentioned in Recipe 19.1, you have the ability to schedule the time your reports will run. To do
so, refer back to the Report Manager.

19.6: SCHEDULE REPORTS

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

19.7: CREATING CALCULATED COLUMNS

19.7: CREATING CALCULATED COLUMNS

To Create a Calculated Column


Step 1:
Enter a Label name on the Calculated Column Editor.
Step 2:
Determine if the calculation should be displayed next to a particular group, All Groups or
Group Totals.
Step 3:
Determine the Format of the column: Number or Currency. If you choose number, make
sure to select between 0-4 allowed decimal places.

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.

Calculated columns will be displayed on the right-edge of the displayed


columns in the order in which they are created.

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

Whats Not Included

Process Attributes

Accounts

Process Actions

Users

Process Column Mappings

Configuration Rules

Attributes

Configuration Attributes

Actions

Configuration Rules

Library Functions

Parts

Printer Friendly XSLs (including all Doc Engine files)

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

Process Definition Export


Step 1:
On the Test site, navigate to the Admin Home Page > Commerce and Documents >
Process Definition.
Step 2:
Select your Commerce Process and make any necessary changes.
Step 3:
Navigate to the Deployment Center to Deploy the Commerce Process
Step 4:
Click on Export Process after the process has been deployed.

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

Process Definition Import

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.

COMMON ERRORS AND WARNINGS


[ERROR] Software version must be the same on both test and production servers to
upload/download commerce process information.
This error message is to prevent users from uploading a commerce process from the test site that
is on a different version than the production site. The error message will appear in the upload
error log and the status will read Failed.
[WARNING] Production process has been deployed since test sit was refreshed. Do
you want to overwrite the changes that were made to the production process? Yes or
No.
This warning will occur on the upload page. The check will be done before the upload begins.
Compare the date of when the test site was refreshed to the date of the last deployment. If the
date of deployment is greater than the test site refresh date, then the warning will be displayed.
Click Yes to proceed with the upload or No to cancel it.

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]

[WARNING] Group Ids are not correct


This warning will require you to manually fix the groups in the approval sequences after the upload.
The warning doesnt cause the upload to fail, but the commerce process may not work correctly
until you fix the groups. There is not way to delete groups that already exist, so if you get this error,
you will have to fix them after every migration.

Test To Production

TIPS,TRICKS AND BEST PRACTICES


If you have a BML function in production and you need to change the parameters, it is best that
you deprecate the function and create a new one with a different variable name. Do not delete
then add the function with the same variable name.
If you have an attribute in production and you need to change the data type, it is best that you
deprecate the attribute and create a new one with a different variable name. Do not delete
then add an attribute with the same variable name.
If you have an attribute with menu items that need to be changed, modify the label name only.
Do not delete then add menu item with the same variable name.
Library functions must be migrated prior to and independent of the Process Definition
migration.
Do not change anything on the production site you are migrating to. Any changes to this
environment after you last refreshed/migrated have the potential of causing the migration to
hang.
Do not delete the association between data columns and attributes.
You should start from test with a current copy of the production site. The test-to-production
migrations were built to be non-incremental, in that you cannot update from test to production
more than once without refreshing the test site with a copy of the production site.
After every successful migration, there should be a test site refresh.

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

A basic definition of computer programming is that


it creates a sequence of instructions to enable a
computer to perform a certain action. In order to
enable the computer to perform the desired action,
you must determine the instructions that must be
performed, the order in which they are executed, and
the fixed data that is required. These instructions or
statements are written in a particular programming
language that makes up the source code.
There are thousands of programming languages, but
we only refer to the most common and how BML
compares to them. BML is language that wasnt really
based off of one specific language. Which language it
is most similar to is often debated in the BigMachines
home office, but nobody really has a good answer. The
answer is simple: there isnt one

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





JavaTM Based High Performance Environment for Speed and Scalability


Infrastructural Changes do not affect Business Logic
Leverages same syntax as prior version of BigMachines scripts
Written through a user friendly administration tool
Enhanced Debugger
Additional functions such as direct data table calls and arrays

CONFIDENTIAL

371

20.1: PROGRAMMING LANGUAGE

20.1: PROGRAMMING LANGUAGE


A programming language is an artificial language that is used to write instructions that a computer
can understand. Programming languages can be broken down into two groups Compiled and
Interpretive. Compiled programming language is a language which must be converted into machine
language, after its been written by the programmer, so that a computer can understand and execute
the instructions. These languages require the use of special software called a compiler prior to
being executed.

Language
C
C++
JAVA

Source Code
Write general
instructions

Compiler
Compiles
instructions into
machine language.

Computer executes
machine language

Many programming languages are considered Interpretive. Interpretive programming languages


do not have to be compiled. The computer understands and executes the instructions while the
program is running. See examples below:
BML has characteristics of both. Its a Java based mark-up language, so it does need to be compiled,
but that is done within the application.

Language
Visual Basic
Perl

Source Code
Write general
instructions

Computer executes
instructions as its
running.

20.2: PROGRAMMING STRUCTURE


There are two separate models for computer programming: Structured and Object-Oriented
programming.
Structured programming uses blocks of code that are executed one after the other. They include
control statements which dictate the flow, or when these statements are executed.
Almost all structured programming, including BML, share a similar overall structure. They include:



Statements to establish the start of the program


Variable declarations
Source code (blocks of programming statements)
In BML, a return statement is always required

BML follows a Structured programming model, so object-oriented programming will not be


introduced.

372

CONFIDENTIAL

20.3: BASIC DATA TYPES


Almost all programming languages include the use of data types. A data type determines the values
that a variable can contain and how it is executed. A data type also represents a constraint placed
upon the interpretation of data. There are four basic types that you should know



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.

20.4: COMMON ELEMENTS OF STATEMENTS


Element
;

print

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

20.5: WHAT IS A FUNCTION?


A function is usually defined as a rule that relates one variable value to another. In programming, it
also represents a series of commands that perform an action or calculates a value depending upon
certain parameters. Parameters are the values that the function uses. Not all functions require
parameters, as you will see throughout this cookbook.

20.5: WHAT IS A FUNCTION?

20.6: BASIC SYNTAX OF BML


In Recipe 20.2 we discussed the structure of programming language. To review, the basic structure
includes statements that make up the source code and finish with a return statement.
The example below shows a comment, a variable and a return statement.

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

Integer Data Type


We are going to try to determine the average of three people using the integer data type.

PROGRAMMING CONCEPTS

CONFIDENTIAL

375

20.4: COMMON ELEMENTS OF STATEMENTS

Float Data Type


Now we will perform a similar formula but with numbers that contain decimals. Again, we are
performing a simple equation , but this time it returns a float.

Boolean Data Type


In this last example, we are going to ask the computer a true or false question.

376

CONFIDENTIAL

20.8: STRING VS. NUMBER


As was explained in the Recipe 20.3, string, integer and float are three separate data types. Lets
go into a little more detail as to the difference between strings and numbers.
Lets say you put the following variable into BML:

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

20.8: STRING VS. NUMBER

21
BML FUNCTION EDITOR
In This Chapter:





Script Definition Area


Attributes
Function Wizard
Debugger
Library Functions
BML Library

The BML scripting language is used to define


advanced functions in the BigMachines application.
Basically anywhere you see a button that is labeled
define function, you will open the BML function
editor. The Function Editor is basically the same
throughout the software, however there are slight
differences based on the section of BigMachines
you are in (ie Commerce, Configuration, Items
etc). Editors are customized for each component of
BigMachines to provide the best functionality for the
selected section.
We are using the function editor from Configuration
throughout this chapter.
In addition, the Function Editor allows you to compile
your BML code and check the syntax by running it
through the Debugger.

BML FUNCTION EDITOR USED IN CONFIGURATION

CONFIDENTIAL

379

21.1: FUNCTION EDITOR BASICS


While there are notable differences between the function editors that are found throughout the
BigMachines application, there are some common characteristics as well.

21.1: FUNCTION EDITOR BASICS

Definition of Button
You will run across a few buttons located at the bottom of the editor pane:


The Validate or Check button checks your code for errors.


The Save button allows you to save your code and continue editing.
The Save and Close button saves your code and closes the function editor.

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

21.2: SCRIPT DEFINITION AREA


BML can be directly typed into the Script Definition Area. You will want to save the changes you
make after writing/editing the script.
EXAMPLE

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.

You can also click on

will call a search and replace pop-up if you need to find and/or replace part of

in order to jump to a specific line in the script.

CONFIDENTIAL

381

BML FUNCTION EDITOR

Clicking on the
the script.

21.3: ATTRIBUTES AND ACTIONS

21.3: ATTRIBUTES AND ACTIONS

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.

To add an attribute or attribute values as an input


1. Click Add Attributes in the Attributes tab. This adds an editable row to the Attributes list.
In the first column, click the drop-down list and navigate through the attribute list to find
the desired attribute, or click and start typing and the attribute list will be filtered for you.
The proper Variable Name will automatically populate. You can click on the blue arrow
to insert the variable name into the code.
2. Click the drop-down list and navigate to find the desired value for the attribute you
selected.
3. Click on the blue arrow in order to insert your selected attribute value into the script
definition area below.
4. The return type of the your code will be displayed in between the section with header
tabs and the script definition area. The action attribute values you select will determine
the return type of your code.

21.4: FUNCTION WIZARD


The Function Wizard contains a list of pre-defined functions that are available for use in advanced
scripting. We will be covering these functions in the chapters that follow. There are some
variations in the Function Editor depending on where you are within the application, Commerce,
Configuration, Commerce Library or the Util Library.

382

CONFIDENTIAL

Configuration/Util Library Function Editor


Note The only difference between the Configuration Function Editor and that of the Util Library is that
the latter doesnt have a tab labeled Library Functions. This is because your library functions are created
in the Util Library. This will be covered in more depth in Chapter 28.
To use the Function Wizard in Configuration, first click on the Function Wizard tab, then
1. Select a Function Category and a Function Name. You will see some help with syntax
appear just below the tool bar.

2. To insert the function in your BML function Script Definition Area, click Insert into BML.

BML FUNCTION EDITOR

3. As you can see, the function populates in the script definition area.

CONFIDENTIAL

383

21.3: ATTRIBUTES AND ACTIONS

Commerce Library Function Editor


The Commerce Library looks similar to the one in Configuration, however you will notice that the
Attributes section is quite different. It allows you to select attributes for the main document, subdocument as well as system attributes.

Commerce Function Editor


You may also come across a BML Editor in Commerce that looks like this
Using this editor, you will have select your attributes on a previous screen. Your operators are all
located on a tool bar across the top and you can select your functions from a drop-down menu on
the right side of the editor.

384

CONFIDENTIAL

21.5:VARIATIONS OF THE DEBUGGER


The Debugger tab allows the users to debug the advanced function. You can test the code by
providing different values of the attributes/parameters as inputs in the debugger. The Debugger
varies quite a bit depending on where you are in the application.
Configuration

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

BML FUNCTION EDITOR

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.

21.5:VARIATIONS 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.

Where to find the transaction ID


In order to use the Debugger in Commerce, you will have to reference a quote.
1.
2.
3.
4.
5.

Go to the Quote Manager.


Choose a pending quote and click on its quote number.
Click View>Source in under your address bar
Click CTR+F to open a Find box.
You will want to search for id and you will find the transaction ID.

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).

BML FUNCTION EDITOR

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.

21.6 : LIBRARY FUNCTIONS

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.

21.6 : LIBRARY FUNCTIONS


This section allows the users to input Library Functions to the script. Library functions can be
created if there isnt a pre-defined function for what youre trying to accomplish. Keep in mind that
library functions need to be created before they can be added.

To add a library function:


1. Click Add Functions.
2. In the Function column, click the drop-down list and navigate through the list to find the
desired function.
3. Click on
to preview the function in the pane to the right.
4. Click the blue arrow to insert the function in the Script Definition Area.

388

CONFIDENTIAL

21.7: BEFORE YOU BEGIN


There are some things to note before you begin reading the rest of this book and attempting to
write BML code.
SHORTCUTS
If you click on the question mark in the tool bar above the script definition area, you will see the
following menu of commands
Shortcut
Tab
Shift+Tab
CTRL+F
CTRL+R
CTRL+H
CTRL+G
CTRL+Z
CTRL+Y
CTRL+E
CTRL+Q
Access Key E

What does it do?


Add tabulation to text
Remove tabulation from text
Search next/open search area
Replace/open search area
Toggle syntax highlight on/off
Go to line
Undo
Redo
About
Close popup
Toggle Editor

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

BML FUNCTION EDITOR

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>

21.6 : LIBRARY FUNCTIONS

equals

not equal

less than

greater than

less than or equal to

greater than or equal to


and
not
or
NUMERIC OPERATORS

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

Floating point number

Numeric

String

String

True
False

Boolean
Boolean

Examples
12345
123.45
12345
.345
volume
23 psi
100
True
False

BML FUNCTION EDITOR

CONFIDENTIAL

391

392

CONFIDENTIAL

21.6 : LIBRARY FUNCTIONS

22
STRING FUNCTIONS
In This Chapter:











find()
isnumber()
substring()
replace()
len()
atof()
lower ()
atoi()
upper ()
startwith()
trim()
endswith()

Now that you have a basic understanding of


programming language, BML structure and using the
function editor, its time to start scripting.
In this chapter, you will be learning how to use string
functions in BML. As was introduced in Chapter 20,
string data types allow any type of text character to
be returned. However, be aware that not all string
functions have return values of string type.
At the end of this chapter you will find a sample use
case. Try to practice creating the code on your own
and check it against the solution provided.

CONFIDENTIAL

393

22.1: UPPER(str) AND LOWER(str)


These functions convert all characters in the text into either all lowercase or all uppercase letters.

22.1: UPPER(str) AND LOWER(str)

Example Use Cases:




Used in table comparison to make sure you have clean data


Ignore case for searching
Correcting mistakes made from not following Best Practices during Implementation.

Parameters:
#
1

Parameter
str

Data Type
String

Description
Given input string that must be converted
to uppercase

Return Type: String


Notes:

If the string is empty, then the function will return an empty string
This function is case-sensitive.

Example of upper(str) or lower(str)


The code above will print three different examples. The first is applying the upper() function to
at typical input string. The second is applying the same function to an empty string. The third
one applies the lower() function to the same string. You will notice a blank space in between the
upper() and lower() functions. This represents the return that will occur if you use an empty
string.

394

CONFIDENTIAL

22.2: ATOF(str) AND ATOI(str)


The atof and atoi functions convert text that represents a number into either a float (atof) or an
integer (atoi). The syntax is exactly the same.
Example Use Case:

Create a string table value into a float/integer value

Parameters:
#
1

Parameters
str

Data Type
String

Description
Given input string that is to be parsed
into a float or an integer

Return Type: Integer


Notes:
An empty string will throw an exception error.
You can not parse a string with a decimal point into an integer.

Example of atof (str)/atoi(str) error messages


If you attempt to pass an empty string or a string with letters into either atoi() or atof(), you will
see:

CONFIDENTIAL

395

STRING FUNCTIONS

22.3: STARTSWITH(str, substring)

If you try to pass a string with a decimal point (like 123.456) through the atoi() function, you will
see

Example of atof(str) and atoi(str)

22.3: STARTSWITH(str, substring)


This function, as well as endswith(str, substring) checks whether a string starts or ends with a
particular substring. For example, if you wanted to see if the value abc starts with a or if that
same string ends in c, you would use these functions.
Example Use Cases:

Determine if a part number starts with a certain text or,


Determine if a part number contains a specific suffix

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.

Return Type: Boolean (True or False)


Notes:

These functions are case-sensitive.


An empty string will return as true.

Example of startswith(str, substring)/endwith(str, substring)

22.4: LEN(str)
The len() function will return the length of a string.
Example Use Case:

To constrain the length of an input text field

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.

Return Type: Integer


Notes:

If str is an empty string, then the function returns a 0.


If a string with spaces is passed as an input, then the spaces are counted in the length of
the string. For example, len (The cat in the hat) returns 18.

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

Return Type: Boolean


Notes:

If str is an empty string, then the function returns false.


If no string is passed into the function, then a compile time error is thrown.

Example of isnumber(str)

STRING FUNCTIONS

22.6 :TRIM(str)
This function removes white space from both edges of strings.
Example Use Case:

Compare strings with leading or trailing white space


CONFIDENTIAL

399

Parameters:
#
1

Parameter
str

Data Type
String

Description
Represents the given input string

Return Type: String


Notes:

This function is case sensitive


If str is empty, then the function returns an empty string.

22.4: LEN(str)

Example of trim(str)

You should notice that the string variable contains white space on both ends.

400

CONFIDENTIAL

22.7: REPLACE(str, old, new, [n])


You will use this function if you want to return a copy of a string, with all occurances of the old
parameter replaced with the new parameter. All occurrences of the old substring are replaced by
new. If the optional integer argument n is given, only the first n occurrences are replaced.
Example Use Cases:

You must replace multiple subsets of a string.

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

Return Type: Copy of String with replacements made


Notes:



This function is case-sensitive.


Replace(, , ) throws an exception.
Replace(abc, , ) throws an exception.
Replace(abc, , 1) throws an exception.

Example of replace(str, old, new, [n])

STRING FUNCTIONS

CONFIDENTIAL

401

22.8: FIND(str, substring, [start], [end])

22.8: FIND(str, substring, [start], [end])


The find() function returns the position of a substring within a string.
Example Use Cases:


Multi-select menu checking


Find a value or where a value exists within a string
Powerful when used with a substring function

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.

Return Type: Integer


Notes:



This function is case-sensitive.


If not specified, start is 0 and end is length(Str).
Find(, ) or find(,, num>0) returns 0.
Find(str, substring, start>length(str)) returns -1

402

CONFIDENTIAL

Example of find(str, substring, [start], [end])


You will notice that in the example we are performing four different variations of the find()
function.
emptyTest: We are trying to see what will be returned if we pass two empty strings
through the find() function.
test_2: what will happen if you try to pass the same two empty strings but also define
the optional start index for the substring.
longTest: shows what is returned when we pass through a string and substring but
begin searching for the substring at an index that is outside of the length of the string.
result: shows what happens if find() is looking for a substring and contains both a
start and end index.

STRING FUNCTIONS

CONFIDENTIAL

403

22.9: SUBSTRING(str, start, [end])


This function is used to pull a subset of string.

22.9: SUBSTRING(str, start, [end])

Example Use Cases :




Break a large string down into smaller strings


Test characters of dynamic part numbers
Determine which characters are at what index

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.

Return Type: String


Notes:


This function is case-sensitive.


If start is given an index value that is greater than the length of the string, an empty string
will be returned.
Start and End can be negative index value.

Example of substring(str, start, [end])


Once again, we are performing a number of actions with the substring() function.
subStr: The first thing you should notice is that substring is being populated by using
the str, start index and optional [end] index.
test_1: This is using the find function with the substring we just defined.
negIndResults Here we are giving you and example of what happens when you use a
negative start :and [end] index.
longStartInd: Finally, this last example shows you what to expect if start is given an
index value that is greater than the length of the string,.

404

CONFIDENTIAL

STRING FUNCTIONS

CONFIDENTIAL

405

406

CONFIDENTIAL

22.9: SUBSTRING(str, start, [end])

23
NUMERIC FUNCTIONS
In This Chapter:
















integer()
round()
ceil()
fabs()
pow()
exp()
fmod()
log()
ln()
sqrt()
hypot()
sin()
cos()
tan()
asin()
acos()
atan()

Numeric functions serve many purposes throughout


the BigMachines application. Many of them represent
some basic mathematical and trigonometric functions.
Time to brush up on your junior high math skills! You
will find some refreshers throughout this chapter if
you find yourself getting stuck on how to find the
arcsine of an angle.

CONFIDENTIAL

407

23.1: INTEGER (x)


This function returns the integer portion of a float number. For example, this function would
return 14 for the number 14.3345324.
Example Use Case:

Returning an attribute as an integer, without rounding.

Parameters:

23.1: INTEGER (x)

#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Integer


Example of integer(x)

23.2: ROUND(x)
This function returns the rounded value of a number up to a certain decimal point.
Example Use Case:

For returning float values that represent currency.

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.

Return Type: Float


Example of round(x)

NUMERIC FUNCTIONS

23.3: CEIL(x)
This function converts a float into the next highest whole number.
Example Use Case:

Rounding up to the next highest whole number.

CONFIDENTIAL

409

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Notes:

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:

Finding the distance of the quantity from zero.

410

CONFIDENTIAL

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Example of fabs(x)

23.5: POWER FUNCTIONS POW (x,y) AND EXP (x)

Example Use Case:


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

Return Type: 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)

The results in the console will read 1024.0.


exp(x)
This function returns Eulers number e raised to the power of the number passed through the
function, also known as the exponential function.

23.6: FMOD(x,y)

Example Use Case:


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

Return Type: Float


Example of exp(x)
Since we are asking to return e1, Eulers number is returned 2.7182818284590455

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

Return Type: Float


Example of fmod(x,y)

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

23.7: LOG(x) AND LN(x)

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Notes:

23.7: LOG(x) AND LN(x)

log(0) or log(-0) is negative infinity.


log(infinity) is infinity.

Example of log(x)
ln(x)
This function returns the natural logarithm (base e) of the number.

Remember: if e3=x, then ln(x)=3.


Special rules:
ln(1.0)=0

ln(0) or ln(-0)=infinity

414

ln(infinity)=infinity

CONFIDENTIAL

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Notes:

ln(0) or ln(-0) is infinity.


ln(infinity) is infinity.

Example of ln(x)

NUMERIC FUNCTIONS

23.8: SQRT(x) AND HYPOT(x,y)


sqrt(x)
This function returns the positive square root of a number.

CONFIDENTIAL

415

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

23.8: SQRT(x) AND HYPOT(x,y)

Return Type: Float


Example of sqrt(x)
In this example, we will look for the square root of 49, which we already know to be 7.

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)

Return Type: Float


Notes:

Negative numbers can be passed as parameters to this function.

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.

23.9: SIN(x), COS(x) AND TAN(x)


Remember

sin A = opposite/hypotenuse = a/h

cos A = adjacent/hypotenuse = b/h


tan A = opposite/adjacent = a/b
h

(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

Return Type: Float

23.9: SIN(x), COS(x) AND TAN(x)

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

Return Type: Float


Example of cos(x)

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

Return Type: Float


Example of tan(x)
The result of the function above is -1.995200412208242

CONFIDENTIAL

419

NUMERIC FUNCTIONS

#
1

23.10: ASIN(x), ACOS(x), AND ATAN(x)

23.10: ASIN(x), ACOS(x), AND ATAN(x)

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:

Find the inverse function of the sine of an angle.

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Notes:

Float variable > 1 will return NaN

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:

Find the inverse function of the cosine of an angle.

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Notes:

Float variable > 1 returns NaN

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

23.10: ASIN(x), ACOS(x), AND ATAN(x)

-/2 y /2
Example Use Case:

Find the inverse function of the tangent of an angle.

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Example of atan(x)

422

CONFIDENTIAL

23.11: SINH(x), COSH(x),TANH(x)


sinh x = 1/2 (ex - e-x)
cosh x = 1/2 (ex + e-x)
tanh x = (e2x - 1) / (e2x + 1)

sinh(x)
This function returns the hyperbolic sine of the number or angle.
Example Use Case:

Find the hyperbolic sine of a number/angle.

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Example of sinh(x)

NUMERIC FUNCTIONS

CONFIDENTIAL

423

cosh(x)
This function returns the hyperbolic cosine of the number or angle.
Example Use Case:

Find the hyperbolic cosine of a number/angle.

23.11: SINH(x), COSH(x),TANH(x)

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Example of cosh(x)

tanh(x)
This function returns the hyperbolic tangent of the number or angle.
Example Use Case:

Find the hyperbolic tangent of a number/angle

424

CONFIDENTIAL

Parameters:
#
1

Parameter
x

Data Type
Float

Description
Represents a given float parameter

Return Type: Float


Example of tanh(x)

NUMERIC FUNCTIONS

CONFIDENTIAL

425

426

CONFIDENTIAL

23.11: SINH(x), COSH(x),TANH(x)

24
DATE FUNCTIONS
In This Chapter:








getdate()
isweekend()
isleap()
datetostr()
strtodate()
strtojavadate()
minusdays()
adddays()
getdiffindate()

Date functions are often used when evaluating and


calculating quotes in Commerce. As an example, they
are used to set quote expiration dates.
Dates are always saved as strings in commerce, but can
be converted to dates using the functions included in
this chapter.
Remember: dates always need to be returned as
strings to commerce as well.

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.

Return Type: Date (String if using getstrdate())


Example of getdate()

24.2: ISWEEKEND(date)
This will determine whether a date falls within a weekend.
Example Use Case:

Can also determine if the date entered by a user is a valid date..

Parameters:
#
1

Parameter
date

Data Type
Date

Return: Boolean

428

CONFIDENTIAL

Description
Mandatory date parameter

Example of isweekend (date)

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:

Can determine if the date entered by a user is a vaild date.


Can be used when trying to calculate the total number of days in a given year.

Parameters:
Parameter
year_num

Data Type
Integer

Description
4-digit Integer that represents the year in
question.

Return Type: Boolean


Example of isleap(year_num)

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

Return Type: String


Example of datetostr(date)
In this example, you will need to take a function of a function. So, you will first be determining the
current date with the getdate() function, and then using datetostr() to convert the date format to a
string data type.

The format of the return text is MM/DD/YYYY HH:MM:SS.

24.5: STRTOJAVADATE(str, format)


The function converts a string to a date and replicates Java behavior.

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

Return Type: Date


Notes:

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.

Example of strtojavadate(str, format)

24.6: MINUSDAYS(date, num_of_days)


This function returns a date that is x days before the base date.
Example Use Case:

Can be used to set an expiration date of a quote.


CONFIDENTIAL

431

DATE FUNCTIONS

The format of the return text is YYYY-MM-DD HH:MM:SS, the same as the strtodate() function.

Parameters:

24.7: ADDDAYS (date, num_of_days)

#
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.

Return Type: Date


Example of minusdays(date, num_of_days)

24.7: ADDDAYS (date, num_of_days)


This function returns the date which is obtained after adding x number of days to a particular date.
Example Use Case:

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

Return Type: Date


Example of addDays(date, num_of_days)
For this example, we are going to use multiple functions that will accomplish the following


Add 60 days to the current date


Convert that date to a string format
Remove the hours:minutes:seconds from the return

DATE FUNCTIONS

24.8: GETDIFFINDAYS(date 1, date 2)


This function calculates the number of days between two different dates.
Example Use Case:

Check to see if a quote is expired.

Parameters:
#
1
2

Parameter
date 1
date 2

Data Type
Date
Date
CONFIDENTIAL

Description
Mandatory Date Parameter
Mandatory Date Parameter

433

Return Type: Integer or Float

24.8: GETDIFFINDAYS(date 1, date 2)

Example of getdiffindays(date 1, date 2)


Note the inputs must be in Date format.
TIP: You must use strtojavadate()to change otherDate from a string format to date format.

434

CONFIDENTIAL

DATE FUNCTIONS

CONFIDENTIAL

435

436

CONFIDENTIAL

24.8: GETDIFFINDAYS(date 1, date 2)

25
CONDITIONAL FUNCTIONS
In This Chapter:




if
ifelse
forloop
break
continue

Conditional functions are commands that run only


when specific criteria is met. Each conditional
statement requires a boolean expression that may
or may not be visible to you. To put it more plainly, a
conditional function must evaluate a true or false.

CONFIDENTIAL

437

25.1: USING AN IF...STATEMENT


An if...statement is the most basic conditional function in programming. The basic syntax is:
if (condition){
statement;
}

25.1: USING AN IF...STATEMENT

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.

25.2: USING AN IF...ELSE STATEMENT


An if...else statement as essentially the same as an if...statement, except that instead of doing
nothing if the condition isnt met, a different statement is run. The basic syntax is:


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).

A for...loop is a popular function that is used in programming. A for...loop statement is meant to


loop through a block of code until a specific condition is met. The basic syntax is:
for (variable) in (system_array){
statement(s)
}

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

Now, lets use the basic for...loop syntax:


for (row element) in Table_Array{

print row element;
)
So, what we are really saying is:
For Row 1 in Table_Array, print each element in the row
Example of for...loop in a 1-D Array
In the following example, we are setting up a 1-D integer array. What this code is saying is, for
whatever array element is in myArray, print that array element. We will cover arrays in Chapter 7.

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.

Example of for...loop in a 2-D Array


Now, lets say we had a table that had more than one row

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

BigMachines provides the ability to declare, initialize,


populate and manipulate arrays using BML. An array
is an ordered collection of values referenced by a
single variable name. You could think of an array as a
table. With values in rows and columns. Another way
to think of arrays is in relation to an x-y axis. If you
recall, data sets are formatted as (x,y). Data in arrays
is similar
row, column
x, y
color, shape

The index indicates the position of the value within


the array. So, if we were looking for Value 7 within
the array, its location is Index 6. Indexes are zerobased in BML, meaning that the first element will
always have an index of zero. The maximum size of a
1-D array is 1000.

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

26.1: ARRAY ATTRIBUTES


What are array attributes?
Array attributes are used to allow users to easily group multiple, scalar attributes using a single
data structure, and are available both for the selection and configuration process. Similar to other
configurable attributes, you can create array attributes at all levels in the configuration hierarchy, but
can delete them only at the level of the hierarchy in which they were created. You can create Array
attributes for all the available data types (Float, Integer, String).

26.1: ARRAY ATTRIBUTES

Example of an array attribute (Users View)

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

Before You Begin


Here is some general information regarding arrays that you should know before you get started.
As we introduced, another way to think of an array is as a 1-D or 2-D table.
A one-dimensional table of the above array would like this:
Elevator #
Door_Type

1
Stone

2
Blue

3
Red

A two-dimensional table representing this array should look pretty familiar:


Elevator #
Door_Type
Door Trim
Buttons

1
Stone
Painted
Shiny

2
Blue
White
Easy

3
Red
Stained
Plastic

BML syntax used with arrays


Element
[]
[n]
{x,y}

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

ARRAYS AND ARRAY FUNCTIONS

26.2: 1-D ARRAYS


These functions initialize arrays without specifying the size. At a later time, when they values
are assigned in different array indexes, the system expands the array into the appropriate size
automatically.
string[n]
Parameters:

26.2: 1-D ARRAYS

#
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.

Return Typ:e String Array


Notes:



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

well as initialize the fields.

CONFIDENTIAL

449

ARRAYS AND ARRAY FUNCTIONS

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.

Return Type: Integer Array

26.2: 1-D ARRAYS

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

will see 0 instead of null.

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.

Return Type: Float Array


Example of float[n]

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

ARRAYS AND ARRAY FUNCTIONS

26.3: 2-D ARRAYS

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.

Return Type: String[][]


Notes:

26.3: 2-D ARRAYS

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.

Example of string [n][n]


integer[n][n]

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.

Return Type: Integer[][]


Notes:



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.

ARRAYS AND ARRAY FUNCTIONS

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.

Return Type: Float[][]

26.3: 2-D ARRAYS

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

Denotes the size of the integer array

Return Type: Integer[]


Notes:


This function is case-sensitive.


If x is 0, then the function returns an integer[0].
Example intArray = range(2) returns an integer array of size 2 where, intArray [0] = 0,
intArray [1] = 1

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

ARRAYS AND ARRAY FUNCTIONS

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.

26.5: POPULATING ARRAYS


Examples of how to populate 1-D and 2-D arrays using a for...loop.

26.5: POPULATING ARRAYS

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.

ARRAYS AND ARRAY FUNCTIONS

CONFIDENTIAL

457

26.6: APPEND(arrayID, newArrayElem)

26.6: APPEND(arrayID, newArrayElem)

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[]

Return Type: Integer (denotes the size of the new array)


Notes:

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.

Example of append(arrayIdentifier, newArrayElem)

458

CONFIDENTIAL

26.7: REMOVE(arrayidentifier, removePos)

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.

Return Type: Integer (denotes the size of the new array)


Notes:
If the array is empty, the remove will fail.
Only integers are allowed to be passed in for the index of the element to be removed.

Example of remove(arrayIdentifier, removePos)

CONFIDENTIAL

459

ARRAYS AND ARRAY FUNCTIONS

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

Takes in the string values


desc or asc. If it is not
specified, the default is asc or
ascending. It also can not be
a variable containing the string
value; this will throw an error.
Takes in the sting values as
text or numeric

Return Type: String Array newly sorted

Example of sort(arrayIdentifier, [sortOrder], [sortType])


What we will find returned in the debugger is the values in this array rearranged into descending
order by value.
460

CONFIDENTIAL

26.9: MAX(arrayIdentifier) AND MIN(arrayIdentifier)


max(arrayIdentifier)
Returns the largest element of an integer or float array. This function can only be used with a
1-D array.
Parameters:
#
1

Parameter
arrayIdentifier

Data Type
integer[], float[]

Description
This is the given array you will use
to find the max value

Return Type: Returns an Integer or Float depending on the type of array.


Example of max(arrayIdentifier)

ARRAYS AND ARRAY FUNCTIONS

CONFIDENTIAL

461

min(arrayIdentifier)
Returns the smallest element of an integer or float array. Min() can only be used with a 1-D array.

26.10: FINDINARRAY(arrayID, element)

Using the same example as above, 123 would be returned in the Console.

26.10: FINDINARRAY(arrayID, element)


This function is used to check whether a certain element exists in an array. If it does, the index is
returned, otherwise a -1 is returned. Findinarray() can only be used with 1-D arrays.
Parameters:
#
1
2

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.

Return Type: Boolean (True if array is empty and False if it is not)

CONFIDENTIAL

463

ARRAYS AND ARRAY FUNCTIONS

26.12 ISEMPTY(arrayIdentifier)

26.13: SIZEOFARRAY(arrayIdentifier)

Example of isempty(arrayIdentifier)

The string array above is empty, therefore TRUE is returned.

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.

Return Type: Integer


Example of sizeofarray() for a 1-D array

Because there are seven separate elements in the integer array, the Console returns 7.

464

CONFIDENTIAL

Example of sizeOfArray(arrayIdentifier) for a 2-D array

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.

26.14: SPLIT(str, separator)

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.

Return Type: String [] (1-D string array)

CONFIDENTIAL

465

ARRAYS AND ARRAY FUNCTIONS

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:

26.14: SPLIT(str, separator)

This function is case-sensitive.


If str is empty string then function returns empty array of size 1.
If both str and separator is empty, then function returns empty array of size 1.
If separator is empty, then every character in the passed string str is split.
Example strArray = split(a.b.c, ); will return an array with every character split, that is
sa will be [a,., b, ., c] with size 5.

Example of split(str, separator)


This example is going to show you what happens when you try to pass through an empty string
or separator as well as what happens when you try to split a string that contains values with the
separator that is being used.

466

CONFIDENTIAL

26.15: JOIN(str_Array, delimiter)


Concatenates a string array into a string with a specified identifier.
Parameters:
#
1
2

Parameter
str_Array
delimiter

Data Type
string[]
String

Description
This is the given array.
Represents a delimiter to use when
concatenating string elements.

Return Type: String


Notes:




This function is case-sensitive.


If str array is empty, then function returns empty string.
If both str and delimiter are empty, then function returns empty string.
If delimiter is empty, then function returns all the array entries concatenated.
Example strArr1 = string[]{1, 2, 3}; strArr2 = join(strArr1, ); will set the value of
strArr2 to 123.

Example of join(str_Array, delimiter)


The following example will be similar to what we saw with split(). You will see what happens
when either the str_Array or delimiter are empty or if one is and one is not. The last example
shows what happens when both the st_Array and delimiter have values.

ARRAYS AND ARRAY FUNCTIONS

CONFIDENTIAL

467

ARRAY FUNCTIONS USE CASE

ARRAY FUNCTIONS USE CASE


In this example, you are given User Information that contains a users name, e-mail address
and regional revenue. This was set-up as a Util Library Function. It is recommended that you
do the same in order to test this. Make sure to create the parameters listed below and select
the proper return type. For information on how to create a Util Library Function, please see
Chapter 9.
arrayFunctionTest(UserInfo, SortDirection, MaxValue, MinValue, UseZero)
Parameters:
#
1

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

ARRAYS AND ARRAY FUNCTIONS

1. Setup initial arrays of data:


Given
UserName = string[];
QueriedInfo = dict(string[]);
2. Loop through User Info. Within the loop:
Find and split region revenue
Remove spaces from string
Split the data on comma, creating an array of revenues
If zero is not allowed in the min constraint
Create an integer array the same size as the array you created with the split.
Find the location in the array of zero revenue values
Declare a 1-D array
Check if each is a number and append to the array you just created.
Compare min and max values with acceptable min and max values
Add user info to a dictionary value
Using the username as the key
Append the username to a separate array. These will be used as our list of keys to
use in the return value
3. Sort data accordingly
4. Retrieve data from dictionary for output
5. Create an index array to build the number of rows of output
6. Create an index array for number of columns of output
7. In this example it is fixed so no need for a variable size
8. Get info from the dictionary
9. Loop through and assign to the output

ARRAY FUNCTIONS USE CASE

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

Example of Test Script


Enter the following code into your Test Script:
UserInfo = string[][]{{Mick Guyfur, McGuy@quickonfeet.com, 0,1200, 450, 100},
{Clark Kent, SuperGuy@quickonfeet.com, 75.5, -100},
{Bruce Wayne, BatGuy@quickonfeet.com, None, 40, 100000}};
SortDirection = 0;
MinValues = 0;
MaxValues = 9999999;
AllowZero = true;
print util.arrayFunctionsTest(UserInfo, SortDirection, MinValues, MaxValues, AllowZero);
return util.arrayFunctionsTest(UserInfo, SortDirection, MinValues, MaxValues, AllowZero);

ARRAYS AND ARRAY FUNCTIONS

The following should be returned to you in the console

CONFIDENTIAL

471

472

CONFIDENTIAL

ARRAY FUNCTIONS USE CASE

27
ADVANCED FUNCTIONS
In This Chapter:










dict()
put()
get()
makeurlparam()
urldatabyget()
urldatabypost
gettabledata()
getpartsdata()
invoke()
getarrayattrstr()
getconfigattrvalue()

Now that we have mastered many of the standard


functions use in BML, its time to introduce some
advanced functions. We will start by introducing
dictionaries and their purpose and move into pulling
external information from other resources, using data
tables and a couple of functions that are specific to
either configuration or commerce.
Dictionaries are a useful tool to store key value pairs.
They serve a purpose similar to that of an array or a
data table. A dictionary key is what you use to look
up a value.
Dictionaries make it very quick to store and retrieve
data. You can make them on the fly and append to
them as well. After you have created a dictionary, you
store values in it using a key. You can attach a value
with any data type to a dictionary (except dictionary).
When you declare a dictionary you need to make sure
to declare what data type you need.

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)

Return Type: Dictionary


Example of dict()

27.2: PUT(dictIdentifier, key, value)


Once your dictionary has been created, you can define keys and values to put into the dictionary.
Example of put(dictIdentifier, key, value)
When you return the dictionary, your key is set equal to your value.
Parameters:
#

Data Type

Description

Parameter
dictIdentifier

Dictionary

key

String, Integer or Float

value

String, Integer or Float

Identifies the dictionary you are


adding values to
Unique identifier for the value
parameter
Data value that relates to the
unique key identifier

474

CONFIDENTIAL

27.3: GET(dictIdentifier, key), GETINT, GETFLOAT


This function will retrieve from the dictionary, the value of the key provided.
Parameters:
#
1

Parameters
dictIdentifier

Data Type
Dictionary

key

String, Integer, Float

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.

27.4: CONTAINSKEY(dictIdentifier, key)

27.4: CONTAINSKEY(dictIdentifier, key)


This is a Dictionary lookup function that checks to see if the key is found in the dictionary.
Parameters:
#
1

Parameter
dictIdentifier

Data Type
Dictionary

key

String, Integer, Float

Description
Identifies the Dictionary you are
looking through to find if it contains
the key you have identified
Unique identifier for the value
parameter

Return Type: Boolean


Example of containskey(dictIdentifier, key)
In this example we are going to try to see if the dictionary contains two different keys auto color
and purple.

476

CONFIDENTIAL

27.5: MAKEURLPARAM({name 1:value 1})


It is equivalent to creating an ampersand delimited string. URL Functions can be used to extract
real-time data from an external system. To build a URL that returns relevant data, use a URL
variable to define the parameters the URL expects. The makeurlparam() function constructs the
parameters which are used by other URL access functions.
Parameters:
#
1
2

Parameter
name
value

Data Type
String
String

Description

Return Type: Dictionary


Example of makeurlparam()

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

Return Type: String


Example of urldatabypost(URL, url_param, default_value)

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

Return Type: String


Example of urldatabypost(URL, url_param, default_value)

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);

bmql(SELECT part_number FROM _parts);

bmql(SELECT DISTINCT price FROM _parts);

bmql(SELECT price FROM _parts ORDER BY


desc);

ADVANCED FUNCTIONS

Parameters:

When using BMQL, your WHERE clause will be your parameters. For example:

CONFIDENTIAL

481

When using the WHERE clause:


BML Variables can be used in the WHERE clause conditions.
The $ symbol must be prepended to the BML variable name when used in the query string.
See image under Parameters on page 423.
The variable data types that can be used are: string, integer and float.
For the IN condition, the variables should be of data type: string[], integer[], or float[].
Line item variables cannot be used directly in the query string. However, you can assign line
item variables to variables in BML and then use them in the query string.

WHERE Condition

The condition is field operation <field|value>.

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

This is used to mean contains.

SELECT part_number FROM _parts


WHERE part_number LIKE $var_1

NOT LIKE

This is used as does not contain.

SELECT part_number FROM _parts


WHERE part_number IS NOT LIKE
$var_1

IN

Used to find a value within an array.

SELECT part_number FROM _parts


WHERE part_number LIKE $var_1 IN
$lead_time.

NOT IN

EXAMPLE

Used to find values outside of an array. SELECT part_number FROM _parts


WHERE part_number LIKE $var_1
NOT IN $lead_time.

IS NULL

Used to find null values in a field or


array.

SELECT part_number FROM _parts


WHERE part_number LIKE $var_1
IS NULL.

IS NOT NULL

Used to find values that are not null


within a field or an array.

SELECT part_number FROM _parts


WHERE part_number LIKE $var_1 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.

SAMPLE USE CASES


For all of the use cases below, well be using a user created data table named sammie. Click on a
Sample Use Case below to see an example.

27.8: BMQL()

Sample Use Case 1: Using the BMQL Function


In this example, lets say youd like to run a query to return the Price and Type from the sammie
table shown above.
Step 1:
Using the information from the sammie data table,, we can create a new script using BMQL that
will return Price and Type. Remember that you use select to choose your columns and from to
choose your database object.

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()

Sample Use Case 3: Using a WHERE condition


In this example, we are going to add a condition. So, the first screen show well say that if the
condition is true, that the predicate will query for the part number HS001. Remember that
when adding a where condition, the syntax is $eval AND field = value. In this case, we are
searching for part number HS001 when the condition is true.

In the console, youll notice that when the part number is HS001, the price and type have been
returned.

486

CONFIDENTIAL

Next well evaluate what happens if the condition is FALSE.

In the console, youll notice that when the condition is false, the predicate (Part = HS001) is
ignored and all other results are returned.

Sample Use Case 4: Errors


The user can retrieve errors or warnings using the new getMessage function.

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

Return Type: String


Example of invoke()
Product
Line

Model

Appication

QR-25
QR-25
QR-25

210
210
210

Industrial
Industrial
Industrial

Lubrication
Method

Min Cut-In
PSIG

Max CutOut 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

Return Type: String


Example of getarraystr()

This function retrieves the values of configurable attributes in Commerce.


Parameters:
#
1

Parameter
documentNumber

Data Type
Integer

CONFIDENTIAL

Description
Represents the

489

ADVANCED FUNCTIONS

27.11: GETCONFIGATTRVALUE()

Return Type: String


Notes:


System attribute _config_attr_info has to be selected as rule input. If the _config_attr_


info is not selected as rule input, and getConfigAttrValue is used, a compile error should
be shown to the user.
In case of menu attributes, the returned value is the menu item variable name.
Always returns a String

Example of getconfigattrvalue()

ADVANCED FUNCTIONS

CONFIDENTIAL

490

28

LIBRARY FUNCTIONS
In This Chapter:



Overview of Library Functions


Adding a Util Library
Adding a Commerce Library
Use Case

The BML Function Library enables the user to write


efficient and reusable custom BML functions. The
user can write and store BML functions in a central
library and call these functions from different areas in
BigMachines.
In the Util BML Library, the functions can be accessed
and called throughout BigMachines. However, in
the commerce BML Library The functions in this
library are accessible only to a main document-sub
document pair. Each commerce BML library is a 1:1
relationship with a main document and sub-document
pair. There can be as many commerce BML libraries
as there are document pairs in commerce.

CONFIDENTIAL

491

28.1: ADD A UTIL LIBRARY F(X)

28.1: ADD A UTIL LIBRARY F(X)

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.

28.2: ADD A COMMERCE LIBRARY F(X)


Too add a commerce library function, you will need to navigate to:
Process Definition > select the Process you wish to modify > choose the appropriate
document>Library Functions>List.

492

CONFIDENTIAL

1. Click Add to create a new commerce library function.


2. Create a Name,Variable Name, Description, select a Return Type.
3. If the function takes parameters, click Add in the Parameter(s) section. Give a name for the
parameter and choose a data type of the parameter. You will be referencing the parameter in
the library function with the name that you specify here.
4. In the Main Document Attribute section, click Add to access the main document attributes.
5. Similarly, in the Sub-Document Attribute section and System Attributes section, click Add to
access the sub-document and the system attributes respectively.
Note:
The Main Document, Sub-Document, and System Attributes sections are only available in the
Commerce Library Editor. It is not available in Util Library Function.

LIBRARY FUNCTIONS

CONFIDENTIAL

493

28.3: USE CASE: FIND AN AVERAGE


Finding an Average

28.3: USE CASE: find an average

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.

Return Type: Integer


Example of average

494

CONFIDENTIAL

Dont forget to test your new function in the Debugger.


Here is what your test script should look like:

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

28.4: USE CASE: LINEAR INTERPOLATION

28.4: USE CASE: linear interpolation

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

28.4: USE CASE: linear interpolation

LIBRARY FUNCTIONS

CONFIDENTIAL

499

500

CONFIDENTIAL

28.4: USE CASE: linear interpolation

29
ADVANCED USE CASES
In This Chapter:
Recommended Items Rules
Looping Through Line Items
Soap Calls in BML

Included in this chapter are some of the more


common advanced use cases. You will see examples of
how to manipulate and populate arrays, loop through
line items in commerce and dynamically populate
dictionaries with parts data.

CONFIDENTIAL

501

29.1: LOOPING THROUGH LINE ITEMS

29.1: LOOPING THROUGH LINE ITEMS

This example is going to cover multiple use cases in one:




Looping over line items in commerce


Using a table call with getpartsdata()
Dynamically populating a dictionary

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

ADVANCED USE CASES

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.

29.2: SOAP CALLS IN BML

To breakdown what you see in the Console:






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.

29.2: SOAP CALLS IN BML


Please see code below for using SOAP calls in BML.
Along with the comments in the code, this is what is being accomplished:
1. Upload an XML template to the file manager, But first put in variables that can be replaced
using BML
2. Post the XML in BML using urldatabypost
3. Replace the variables in the XML with the ones required
4. Post the new XML to the BigMachines SOAP receiver XML
5. Receive the response and parse it as required

504

CONFIDENTIAL

ADVANCED USE CASES

CONFIDENTIAL

505

506

CONFIDENTIAL

29.2: SOAP CALLS IN BML

Here is a sample of the XML that is being used in the soap call.

ADVANCED USE CASES

CONFIDENTIAL

507

508

CONFIDENTIAL

29.2: SOAP CALLS IN BML

30
TROUBLESHOOTING BML
In This Chapter:
Common Error Messages
Tips and Reminders
Best Practices for BML

It takes time, patience and utilisation to become very


proficient in scripting with BML. You will only get
better with time. A very effective way to learn is to
start troubleshooting your own code. if you receive
the same error message a few times in a row, its likely
that you wont continue to make that mistake as you
move forward. This chapter illustrates some of the
most common error messages and provides tips for
BigMachines Best Practices when using BML.

CONFIDENTIAL

509

30.1: COMMON ERROR MESSAGES


There are number of error messages that you may come across while using BML. Here is a list of
the most common error message you may encounter and how to correct them.

30.1: COMMON ERROR MESSAGES

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.

30.2:TIPS AND REMINDERS


Here are some general tips and Best Practice pointers to help troubleshoot the most common
errors that they come across. Our world-class Customer Services technicians provided us with
some common errors and fixes that you may come across when working within BigMachines.

30.2:TIPS AND REMINDERS

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)

30.3: BEST PRACTICES FOR BML


General
Always put the name of the rule and location in the first line of code (say what it is and
where it is). This aids in global script searches.
For example

// Update Line Items Advanced Modify Function

// Commerce Quote Header Update Line Items action

Us if elif, else structures, not if, if,if

Keep variable name and attribute name similar.

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)

Line item looping always on the advanced modify / default


Return format [docNo]~variableName~variableValue|

Never use summation attributes

Never use _config_attributes or _config_attr_text, use _config_attr_info instead

Make sure to transition document out of start step

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:












The Document Panel


Creating a New Document
Adding a New Page
Saving and Deploying the Document
Copy a Page
Re-Order Pages
Add a Page for Each Line item
Create a Backup
Revert to a Backup Copy
Change The Units of the Page Rule
Preview the Outputs
Change the Output
Delete a Page

The BigMachines Document Engine enables users to


create professional and customer-friendly proposals,
submittals, and quotes, quickly and easily. This allows
users to customize and brand proposals for specific
products, channel partners or customers. It also
automates the generation of customized contracts
driven from approved and submitted quotes and
orders.
At the heart of the BigMachines Document Engine
technology lies the BigMachines Document Editor.
This WYSIWYG XSL editor makes it easy to
prepare customized and branded proposals without
having to resort to complicated coding.

The document customization capabilities include the ability to :


Populate proposals with customer data
Include detailed quotes as sub-documents or appended-documents
Add customized terms and conditions based on configuration
Add technical data sheets, pictures, and drawings
Add quality documentation or industry specifications
Generate proposals, quotes or contracts in MS Word or Adobe PDF

CONFIDENTIAL

517

31.1:THE DOCUMENT PANEL

31.1:THE DOCUMENT PANEL

The Document Panel consists of the following:

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)

31.2: CREATE A NEW DOCUMENT


You want to create a new dynamic PDF or RTF document using the Document Engine.

31.2: CREATE A NEW DOCUMENT

To Create a New Document:


Navigate to Commerce and Documents > Document Engine
Step 1:
On the Printer Friendly/ History XSL Views list page, click Add.

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

31.3: ADD A NEW PAGE

You want to add a new page to your document.

To Add a New Page:


Step 1:
From the Document Panel, select Add Page from the Add menu on the Flow tab.

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.

31.4: SAVE DOCUMENT & DEPLOY CHANGES

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.

31.4: SAVE DOCUMENT & DEPLOY CHANGES


There are 2 different types of saves that you can perform: a Document Save and a Page Save. The
Page Save only saves the changes you made to the page in editing mode. The Document Save
saves the current Page changes as well as any changes to the Document Flow Tree (such as order,
renaming, new pages, etc.). In addition, the Document Save also saves the Global Document XSL
Snippet and any other Document Engine data that is relevant to the entire document.

It is recommended you use Document Save exclusively since it saves your


Page in addition to any changes that you made at the document level. This
ensures that you save ALL changes that youve made.

To Save a Document and Deploy Changes


Step 1:
Click the disk icon in the Document Panel.
522

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.

31.5: COPY A PAGE


You can copy an existing Document Engine Page, and use it as a starting point for a new page in
your document. To do this, right-click on a Page in the Document Flow Tree and select Copy
from the menu. The page will be copied, and appended to the end of your Document Flow Tree.
Its important to note that a page will duplicate the page layout and content. After copying a page,
no references to the source page will remain. Any edits you make on your copied page will not
reflect on the source page, and vice versa

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.

31.6: RE-ORDER PAGES


There may be circumstances where you need to re-order the pages in your Document Flow to
change the output order.
CONFIDENTIAL

523

GETTING STARTED

To avoid any oops moments, it is recommended that you copy a Page as


a backup and save the document before making any risky edits. This way,
if anything happens to go wrong while you are editing your page, you can
always delete the broken Page and plug your backup into the Flow.

31.7: ADD A PAGE FOR EACH LINE ITEM

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.

31.7: ADD A PAGE FOR EACH LINE ITEM


You want a page to print out for each line item in your transaction, sorted by their sequence
number. This page will contain specific information about that line item, such as detailed
configuration information.

To Add a Page to Display for Each Line Item:


Step 1:
Select Add Loop from the Add menu in the Document Flow.

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

31.8: CREATE A BACKUP OF A DOCUMENT


It is recommended that you create a backup copy of a document, in case you experience any
problems in the editing process.
To avoid an oops moments, it is HIGHLY recommended that you backup
your document by creating a copy of it from this page, before opening it up
for editing.

To Create a Backup of a Document:


Step 1:
In BigMachines, navigate to Admin > Commerce and Documents > Document Engine
Step 2:
Find your document in the list, and check the select box on the left next to the name. Click
Copy. A copy will be automatically created and added to the list. If by some chance you
corrupt your document beyond repair, you can always change your commerce actions to
point to the backup (working) copy.

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

31.9: REVERTING TO A BACKUP COPY OF A DOCUMENT

31.10: CHANGE THE UNITS OF THE PAGE RULER

To Revert to a Backup of a Document:


Step 1:
Find all commerce actions or transition rules that use the corrupted document, and point
their XSL view to reference the backup document view.
Step 2:
Delete the corrupted document from the list of Printer Friendly / History XSL Views.
Step 3:
Deploy the commerce process to activate all changes.

31.10: CHANGE THE UNITS OF THE PAGE RULER


Lets say you want to switch the page ruler units from inches to centimeters. From the View/
Options tab, select cm from the Meas. Units menu. After selecting this, you will see the units of
the Page Rulers change.
Changing the Meas. Units field will also change the units used in the Edit Layout dialog window.
Your units will be saved for the next time you open this document in the Document Engine.

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.

31.11: PREVIEW THE OUTPUT AS PDF OR RTF


For each transaction/quote that is created in BigMachines, there is a unique transaction id
number which is automatically assigned to it. This number is typically 7-10 digits long, and you
need to find it to test your output with.
526

CONFIDENTIAL

To Preview a Document as PDF or RTF:


Step 1:
To find the id # of a transaction, navigate to the Transaction Manager.

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

31.12: CHANGE THE OUTPUT FROM PDF TO RTF

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.

31.13: DELETE A PAGE

For your convenience, the main differences are listed below:


Background images
Absolute Positioning
General Images

Background images are not supported in RTF


Absolute Positioning is not supported in RTF
Use content-width and content-height for images in RTF. Use
width and height for images in PDF.

PDF Merging

External PDF merging is only supported with the Advanced PDF


(Antenna House) processor.

31.13: DELETE A PAGE


If you need to delete a page from a document flow, right-click on the page name and select
Remove from the menu.

528

CONFIDENTIAL

GETTING STARTED

CONFIDENTIAL

529

31.13: DELETE A PAGE

530

CONFIDENTIAL

32
PAGE LAYOUTS
In This Chapter:






Change Page Orientation and Margins


Add/Remove a Header/Footer
Modify Body Margins
Multi-Column Pages
Define Custom Page Layouts
Use a Custom Layout for a Page
Find the Layout Name of a Page

A page layout determines the page size, margins, and


inclusion of any side regions such as a header or
footer. In the BigMachines Document Engine, each
Page is linked to a Page Layout.
It is important to note that each Design-Mode Page in
the Document Flow tree contains an auto-generated
page layout. XSL-Mode Pages (converted through
the Page Code option), will not have any layout
associated to it. So for all XSL-Mode pages, it is
VITAL to change the master-name of the <fo:pagesequence> tag to a page layout that does exist.

CONFIDENTIAL

531

32.1: CHANGE PAGE ORIENTATION AND MARGINS

32.1: CHANGE PAGE ORIENTATION AND MARGINS


You want to change the orientation of a page from portrait to landscape or from landscape to
portrait. It is also possible to change the size of the top, left, bottom or right page margins.

To Change Page Orientation and Margins:


Step 1:
Click on Edit Layout in the Home toolbar to open the Page Master Layout editor.

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

32.2: ADD/REMOVE A HEADER/FOOTER FROM A PAGE


From the Page Layout editor seen in Recipe 32.1, to make changes to the Header or Footer of a
page, click on the appropriate Header or Footer Tab.

To Change Headers and Footers:


Step 1:
Edit the height of a Header or Footer, by clicking on the Header or Footer tabs at the top.
The header/footer height is controlled by the value in the Height field. Precedence means
that the header/footer has precedence (takes shared space) from any left or right sidebars.
See the illustration below for an example:

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

32.3: MODIFYING THE BODY MARGINS

To Modify Body Margins:


Step 1:
From the Home toolbar, click Edit Layout to open the layout editor.

32.4: MULTI-COLUMN PAGE

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.

Additional details on this behavior:


By default, the body margin-top should be set to the header height, and body margin-bottom
should be set to the footer height. The same holds true for the margin-left and margin-right if
sidebars are included. Whenever the user changes a header, footer, left-bar, or right-bar size (by
drag/drop OR in the Edit Layout window), then the appropriate body margin should be reset to
the new size REGARDLESS of the current body margin value. After the margin value has been
reset, the user can adjust the body margin value again if desired.

32.4: MULTI-COLUMN PAGE


You can create a two-column page where content will flow from the first column into the second,
similar to legal terms & conditions pages.

534

CONFIDENTIAL

To Create a Multi-Columns Terms & Conditions Page:


Step 1:
Add a new page or open a page for editing.
Step 2:
From the Home toolbar, click Edit Layout to open the layout editor.
Step 3:
Click on the Body tab at the top, and change the Column Count property. This is the
number of columns that you want to display on the page. You can also change the Column
Gap property. Column Gap refers to the distance between columns.

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

32.5: DEFINING CUSTOM PAGE LAYOUTS

Page Editor:

Document Output (PDF Shown):

32.5: DEFINING CUSTOM PAGE LAYOUTS


This is an advanced feature, which requires XSL coding. The Document Engine provides a place
where you can edit XSL that will be inserted into the layout definitions on the output.
There is not a validation that runs on your XSL snippet so be sure to test
your changes.

536

CONFIDENTIAL

To Define a Custom Layout:


Step 1:
From the Document menu, select Edit Custom Master Layouts.
Step 2:
In the window that opens, add the XSL code for your custom page layouts. The code that
is displayed will be inserted as a direct child of <fo:layout-master-set> . As a result, to avoid
XSL errors, your code must ONLY CONTAIN named <fo:simple-page-master> or <fo:pagesequence-master> nodes that refer to existing fo:simple-page-master master-names. Also,
make sure that any master-names that you give to your custom <fo:simple-page-master>
nodes, MUST be unique within the entire document. This includes uniqueness from the
master-names that the Document Engine assigns to layouts for Page objects. To check for
this, you can click Edit Layout and see the layout name. Alternatively, you can select View
Document XSL from the Document menu, find the <fo:layout-master-set>, and check for
uniqueness.
Step 3:
Click Save to save your changes. Also be sure to save the document as well.

PAGE LAYOUTS

32.6: USING A CUSTOM LAYOUT FOR A PAGE


This is not a native feature of the Document Engine. Instead, you can use the Advanced
Workaround: Modify XSL Page Code but Retain Design Mode Recipe to do this. When you get
to step 6 of the workaround, replace the master-reference value of the page-sequence with the
master-name of the custom layout that you want to use.
CONFIDENTIAL

537

32.7: FIND THE LAYOUT NAME OF A PAGE

32.7: FIND THE LAYOUT NAME OF A PAGE


You MAY need to find the master-reference layout name that a Design-Mode page is using, most
likely because you ran into the Page Code XSL layout issue.
Open an existing DESIGN-MODE (non-code) Page that has the layout you want to use for your
XSL-Mode Page. From the Home toolbar tab, click Page Code to view the XSL for the page.
Note that you will not be saving the page as custom XSL. You are only going to view the layout
name.
In the example below, the layout name is Copy_of_standard_page22. This is the layout name.
Make a note of this, and enter it as the master-reference name of your XSL-Mode Page.

538

CONFIDENTIAL

PAGE LAYOUTS

CONFIDENTIAL

539

540

CONFIDENTIAL

32.7: FIND THE LAYOUT NAME OF A PAGE

33
GENERAL PAGE EDITING AND TEXT FORMATTING
In This Chapter:














The Home Toolbar


The Format Toolbar
The Bottom Selection Toolbar
Change the Font Family
Change the Font Size
Change the Font Color
Insert a Special Character/Symbol
Insert a Page Break
Apply a Margin or Padding Value
Display a Page Based on Conditions
Copy/Paste from External Source
Copy/Paste from within Doc Engine
Copy/Paste Non-Formatted Data
Copy/Paste Formatted Data
Change the Default Font Family

The Home Toolbar, Format Toolbar and Bottom


Selection Toolbar are considered the Default Tabs/
Toolbars.
The Home Toolbar stores the most commonly used
actions. You can save or edit your page, modify the
text, insert dynamic data or images and more from this
toolbar.
The Format Toolbar is primarily used for paragraph
formatting, like setting the padding and margins.
The Bottom Selection Toolbar allows you to quickly
change the formatting of an element that your cursor
is in. For example, if you are in a paragraph, you can
click on the component in this toolbar and make
changes.

CONFIDENTIAL

541

THE HOME TOOLBAR


The Home toolbar contains mostly features that are related to text formatting & object insertion.

Save Page Saves changes made to a page.


Note that it does NOT save changes made to
the document flow or document snippets.

The Home Toolbar

Edit Layout Page Layout editor

Conditions Set the page to display based on


certain conditions
Page Code Generates the XSL code for the
Page for viewing or editing
Undo Undo last editor operation
Redo Redo last undone operation
External Paste

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

Paragraph Alignment (Left, Center, Right, Full


Justify)
Details on alignment inside of table
cells
Paragraph Indent & Outdent
Open the File Manager Window

Insert a New Table


Create an un-ordered list
Create an ordered list
Insert an Image from an external URL
Insert a Hyperlink from external URL
Insert a special symbol
Insert a page break

CONFIDENTIAL

543

GENERAL PAGE EDITING AND TEXT FORMATTING

Open the Dynamic Data Window

Embed an new XSL Snippet


Insert an empty Paragraph at the Beginning of
the Active Page Region Editor
Insert an empty Paragraph at the cursor
location
Insert an empty Paragraph at the End of the
Active Page Region Editor

The Format Toolbar

THE FORMAT TOOLBAR


The Format toolbar is used primarily for paragraph formatting. To ensure that properties set on
this tab are applied to a paragraph, be sure to select the entire paragraph. To do so, you will click
on <Paragraph> on the bottom selection toolbar.

Margin Each text box applies the respective


left, top, right, and bottom margin values to
the paragraph.

Padding Each text box applies the


respective left, top, right, and bottom padding
values to the paragraph.
Background Color *NOTE: This
functionality does not always behave
correctly. If you need to set a background
color, it is best to put the paragraph inside
a table cell and use the background color
functionality in the table cells instead (table
tab).
Open File Manager Opens the file manager
window to apply a background image
to the paragraph or page body. *NOTE:
This functionality does not always behave
correctly.

544

CONFIDENTIAL

THE BOTTOM SELECTION TOOLBAR


The Bottom Selection Toolbar is a very helpful tool. The items inside of it change based on what
context the cursor is in. If the cursor is placed within text of a paragraph, which is inside of
a table cell, the selection toolbar will list each component of that path. You can click on each
component in the toolbar to select the entire component. This is very useful in selecting items
to apply formatting, margin, padding, or borders to. By using the bottom selection toolbar, instead
of highlighting the text directly, you ensure that the editor knows which component to apply the
formatting to.
The bottom selection tool bar is located at the bottom of the Document Engine page editor:

CONFIDENTIAL

545

GENERAL PAGE EDITING AND TEXT FORMATTING

Example:
The cursor is placed inside of a paragraph, which is inside a nested table cell. The Bottom
Selection Toolbar shows the following:

33.1: CHANGE THE FONT FAMILY

33.1: CHANGE THE FONT FAMILY

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:












Times New Roman (PDF & RTF)


Helvetica (PDF & RTF)
Courier (PDF & RTF)
Sans-serif (RTF)
MS Gothic (RTF)
Arial Unicode MS (RTF)
DejaVu Sans (RTF)
Verdana (RTF)
SimSum (Multi-byte font)
NSimSum (Multi-byte font)
SimHei (Multi-byte font)
MingLiU (Multi-byte font)
PMingLiU (Multi-byte font)

33.2: CHANGE THE FONT SIZE


You can apply a different font-size to selected text. To do this, select some text and select a fontsize using the drop-down menu on the Home Toolbar. You can also type in a custom font size. All
font sizes are defined in points (pt).

33.3: CHANGE THE FONT COLOR


You can apply a different font-color to selected text. To do this, select some text and select a fontsize using the drop-down menu on the Home Toolbar. You can also type in a custom HEX color.

546

CONFIDENTIAL

33.4: INSERT A SPECIAL CHARACTER/SYMBOL


You may need to insert a special character such as the symbol To do so, place your cursor at
a point in the Page editor, where you would like to insert the symbol and click the Insert Symbol
icon on the Home toolbar. Click on the symbol that you want to insert. You can also mouse-over
the symbol to display a larger preview.

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

GENERAL PAGE EDITING AND TEXT FORMATTING

33.5: INSERT A PAGE BREAK

33.6: APPLY A MARGIN OR PADDING VALUE

33.6: APPLY A MARGIN OR PADDING VALUE


You may want to add a margin or padding value to a paragraph in the document.
*NOTE:
There are some compatibility differences between PDF vs. RTF output regarding margin/padding.
RTF:


PDF:

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.

What is the difference between Margin & Padding?


Padding - defines space between border and element content.
Margin - defines space between border and other outer
elements.
When two elements need a space between them, it is better
to use margins. When text or an inner element needs space
between the parent box and itself use padding.
We highly recommend that you use the bottom selection toolbar to select
the entire element (paragraph or table cell) to apply the margin/padding to.
This ensures that the Document Engine knows where to apply the margin/
padding value.

To Apply a Margin or Padding Value:


Step 1:
From the Format-Paragraph tab, enter the desired margin or padding values. The values
entered should be in the format of a number followed by a two-letter abbreviation that
includes the unit (in, cm, mm, or pt).

Step 2:
Click the appropriate Apply button to apply your values uniqueness.
548

CONFIDENTIAL

Removing Margins or Padding Values


If you would like to remove a previously applied margin or padding value from a paragraph or
table cell, select the entire section using the bottom selection toolbar. On the Format-Paragraph
toolbar tab, remove all values from the Margin and/or Padding fields and click Apply.

33.7: DISPLAY A PAGE BASED ON CONDITIONS


Lets say you want to have an entire page (such as the Cover Page) show/hide based on a
BigMachines attribute value.

To Display a Page Based on a BigMachines Attribute Value:


Step 1:
Open the Page for editing and click Conditions from the Home toolbar.

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

GENERAL PAGE EDITING AND TEXT FORMATTING

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!

33.8: COPY/PASTE FROM EXTERNAL SOURCE

33.8: COPY/PASTE FROM EXTERNAL SOURCE


It is important to note that the Cut, Copy, & Paste buttons in the Home Toolbar (and likewise
the keyboard shortcuts CTRL + X/C/V - for those commands) will only work on content from
within the Document Engine. In order to copy & paste from other Windows applications such as
Word, please follow the following steps:

To Copy & Paste from Word, Notepad, Etc.


Step 1:
Copy the text in Word or Notepad.
Step 2:
Under the Home tab, click External Paste. You can also hit CTRL + E on your keyboard
instead.

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.

33.10: COPY/PASTE NON-FORMATTED DYNAMIC DATA


Dynamic elements are not copy & paste-able with the toolbar buttons or keyboard shortcuts.
Instead, simply open up the Dynamic Data Window. click Dynamic Data from the Home or
Dynamic toolbar tabs and insert the dynamic data again.

CONFIDENTIAL

551

GENERAL PAGE EDITING AND TEXT FORMATTING

33.9: COPY/PASTE FROM WITHIN THE DOC ENGINE

33.11: COPY/PASTE FORMATTED DYNAMIC DATA

33.11: COPY/PASTE FORMATTED DYNAMIC DATA


You may want to copy a formatted dynamic data object (such as a formatted net price) and paste it
into another location within the document
You cannot copy & paste dynamic elements with the toolbar buttons or keyboard shortcuts.
Instead, double-click on the heart icon to save the item to the Content Library. Recipes 35.1 and
35.2 contains detailed steps.

33.12: CHANGE THE DEFAULT PAGE FONT FAMILY


You may want to change the default font family for a page so that it isnt necessary to explicitly
specify the desired font family all text in the editor.

To Change the Default Page Font Family


Step 1:
From the Page Properties panel, click into the Family value field, and select a new font family.

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

GENERAL PAGE EDITING AND TEXT FORMATTING

553

CONFIDENTIAL

554

CONFIDENTIAL

33.11: COPY/PASTE FORMATTED DYNAMIC DATA

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

The Document Engine allows you to add dynamic


elements to your documents. For example, you can
add configurable attribute values, use for...loops, use
conditionals and more. This functionality allows you
to create one document that will dynamically populate
data based on a users configuration.

CONFIDENTIAL

555

34.1: ADD A BIGMACHINES ATTRIBUTE VALUE

34.1: ADD A BIGMACHINES ATTRIBUTE VALUE


You are able to add a BigMachines attribute display value (ex: Quote Number, Product attribute)
into your document.

To Change the Default Page Font Family


Step 1:
Click on Dynamic Data from either the Home or Dynamic toolbars > Click on the Data
tab.
Step 2:
Be sure that BM Transaction is the value of Select Source (it is by default). Find the
attribute you want to add, either by browsing the tree or by entering a search term in the
Search Filter field.
Step 3:
Place your cursor at a point in the Page editor, where you would like to insert the dynamic
data.
Step 4:
Double-click on the attribute in the tree, or click Insert Into Editor to insert it at the
cursor location.

556

CONFIDENTIAL

More About the Dynamic Data Tree


The Dynamic Data tree represents all the attribute names that you have added into BigMachines.
When you insert an item from the Dynamic Data tree, you are basically inserting an data place
holder in the document. When the document is generated on the user-side, the values for those
data place-holders will be filled in with the data specific to that transaction being displayed.
The data tree contains all of the attributes and folders which serve to organize. There are two
top-level folders:

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:

We highly recommend you use the bottom selection toolbar discussed in


Chapter 33 to select the entire element (paragraph or table cell) to apply
the margin/padding to. This ensures that the Doc Engine knows where to
apply the margin/padding value.

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.

34.2: INSERT A COMMERCE ATTRIBUTE

34.2: INSERT A COMMERCE ATTRIBUTE


You want to display a commerce rich text attribute value (ex: Proposal Notes) into your document.
You will need to find your Rich Text attribute in the Dynamic Data tree, and insert it into the editor.
Please see Recipe 34.1 for detailed instructions.

34.3: DELETE A DYNAMIC ELEMENT


If you want to delete a dynamic element that exists inside of a table cell, use the instructions in
Delete a Dynamic Data inside of a Table Cell (Recipe 37.17). Double-click on the X delete icon
to delete the dynamic element.

34.4: INSERT A REPEATING SECTION


You can define content that will be displayed repeatedly, depending on the conditions of the loop.

To Insert a Repeating Section:


Step 1:
Place your cursor at a point in the Page editor, where you would like to insert the repeating
section.
Step 2:
From the Dynamic toolbar tab, click the Repeating Section button.

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

All Line Items all line items


Model Line Items only configured line items (models)
Part Line Items only non-configured line items (parts)
Price Book Custom Attributes loop through the price book custom
attributes (fields 1 20)
Configurable Attributes all configurable attributes & values
Model Custom Attributes all custom model attributes
Model Product Line Custom Attributes all custom product line attributes
Serial Number Custom Attributes all serial number custom attributes
Sort By Select what attribute should be used to sort the results. Note that the
attribute that you select for Sort By needs to be a part of what data you are looping
over.
Sort Type Select the method that will be used to sort based on the selected Sort
By value
Ascending By Text - alphabetical for text attributes
Descending By Text reverse alphabetical for text attributes
Ascending By Number 0 through max for numeric attributes
Descending By Number max through 0 for numeric attributes
Filters? Check this box if you need to specify additional conditions to the
Loop Over data set. By default, it is unchecked. If this box is checked, additional
conditions can be specified in the Filters Grid. These conditions will be ANDed to
the Loop Over selection. For example, if you would like to loop over all Line Items
on the quote that have a price greater than 0, you would add a filter.

DYNAMIC ELEMENTS

Step 4:
Click Save and a new LOOP element will be inserted at the current cursor location.

CONFIDENTIAL

559

34.5: INSERT A CONDITIONAL SECTION

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.

34.5: INSERT A CONDITIONAL SECTION


You can define some content that will be displayed if a certain condition is met.

To Insert a Conditional Section:


Step 1:
Place your cursor at a point in the Page editor where you would like to insert the conditional
section.
Step 2:
From the Dynamic toolbar tab, click the Conditional button.

Step 3:
The Conditional Expression Editor will open. This allows you to define the conditions for the
section. Details on the various fields:



Select Source: This should always be BM Transaction.


Name: A descriptive name for this conditional. Leaving it as the default value is OK.
Filters Grid: Use Add Row to add rows to this grid. Each row becomes a
statement that will be tested as part of the conditions you define. You can add as
many rows as you need.
Row Grouping: Define the order of operations for the condition. It is made up of
that represent each row #, OR, AND, and parenthesis ( ). The AND ALL will set
the row grouping to AND all of the existing rows together, and OR ALL does
the same except ORs all of the rows together. You can further customize the row
grouping by mixing up ANDs and ORs, and also by placing parenthesis to group
statements even further.

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

34.6: ADD AN ELSE CLAUSE

34.7: FORMAT DYNAMIC DATA AS CURRENCY

To Insert an Else Clause in a Conditional Section


Step 1:
In the conditional IF icons, double click on the + icon.

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.

Removing an ELSE Clause from a Conditional Section


Double-click on the X icon next to the ELSE label. Note that this will also remove all content
inside of the ELSE block.

34.7: FORMAT DYNAMIC DATA AS CURRENCY


You can format currencies within the Doc Engine. For example, you can format the floating point
commerce attribute, Total, into USD currency.

To Format Dynamic Data as Currency:


Step 1:
Insert the attribute as dynamic data using Recipe 34.1 for directions.

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

34.8: SORT LINE ITEMS TO MATCH QUOTE SCREEN

34.9: INSERT LINE ITEM OR CONFIG ATTRIBUTE

34.9: INSERT LINE ITEM OR CONFIG ATTRIBUTE


You CAN insert a line item or configurable attribute into the editor. The steps to insert a line
item or configurable attribute value are the same as Inserting a BigMachines attribute value (Recipe
34.1). Line Item attributes are found in the Line Item folder of Quote. Configurable attributes
are found in the Configurable Attributes folder. If you do not see an attribute in the tree, try
refreshing the document data source (Appendix B.1).
The other important note is to make sure you only insert a line-item level attribute (line item,
configurable, part, etc.) into a page or a repeating section that loops over line items of some sort.
It can also loop over models or parts, since those are types of line items.
In the example below, videoCard is a configurable attribute. The page it is inserted into is Line
Detail Page, which is inside of a line item loop, Product Pages Loop.

564

CONFIDENTIAL

DYNAMIC ELEMENTS

CONFIDENTIAL

565

566

CONFIDENTIAL

34.9: INSERT LINE ITEM OR CONFIG ATTRIBUTE

35
CONTENT LIBRARY
In This Chapter:
Add an Item to the Content Library
Insert or Remove Content

The following content can be saved to the Content


Library. These elements can then be inserted
anywhere within the current document as well as
other documents in the commerce process:



Loop Conditions & Content


If/Else Conditional Blocks & Content
Formatted Dynamic Data Expressions
XSL Code Snippets

CONFIDENTIAL

567

35.1: ADD AN ITEM TO THE CONTENT LIBRARY

35.1: ADD AN ITEM TO THE CONTENT LIBRARY


You can save a conditional section of terms & conditions so it can be used by other documents in
the commerce process.
Any content that is inserted by the Content Library does not contain any
references to the source item. Any changes that you make to the content
that is inserted will NOT updated the item in the Content Library or any
other insertions of the same content.

To Format Dynamic Data as Currency:


Step 1:
Create your Conditional section using the Conditional button the Dynamic toolbar tab.
Step 2:
Double-click on the heart icon, to add the Conditional to the Content Library.

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.

35.2: INSERT OR REMOVE CONTENT


Insert Content
From the Home toolbar, click on Dynamic Data to open the Dynamic Content Window. Place
your cursor at the place in the editor where you would like to insert content. Find the desired
item in the Content Library and click Insert Into Editor.
Remove Content
From the Content Library tree, right click on the item to delete. Select Delete from the menu.
This will remove the item from the tree, but will NOT remove any inserted content in the editor.
568

CONFIDENTIAL

CONTENT LIBRARY

CONFIDENTIAL

569

570

CONFIDENTIAL

35.2: INSERT OR REMOVE CONTENT

36
COMPLEX CONDITIONALS
In This Chapter:
Complex Conditional Library
Insert a Complex Conditional
Add a Complex Conditional

Complex Conditionals functionality provides the


ability to insert complex condition statements with
multiple if...else clauses in-line within the content of a
document using the Document Editor without having
to resort to custom XSL snippets.
Highlights
You can create complex conditionals within the
Complex Conditional Expression Editor.
The <if...then> conditional statements can be set
up using simple filters.
The content within a conditional can be created
in a WYSIWYG editor. All editor functionality
such as formatting, text, hyper-links, images, tables,
dynamic data, repeating sections and conditionals
are available within this editor. However, the user
is not allowed to insert a complex conditional
within a complex conditional.

Clauses within a complex conditional can be reordered after creation.


Saved Complex Conditionals can be used in all documents within a commerce process.
Points to Remember:
Dynamic Data, Repeating Sections and Rows in the Content Editor - The content has to be
saved once before the user is able to use dynamic data, repeating sections and rows in the
Content Editor.
An Always True Complex Conditional cannot be changed to one with multiple conditions after
creation - A complex conditional with one or more conditionals can be changed into an Always
True type complex conditional. However, a complex conditional that has once been saved as
Always True cannot be changed to one with one or more conditional blocks. It is therefore
recommended that you only use the Always True option when certain that no Page Number
within a Complex Conditional - Page numbers can be dynamically inserted into the content of
a complex conditional. The value of the page number within a complex conditional reflect the
page number of the current page of the document.

CONFIDENTIAL

571

36.1: COMPLEX CONDITIONAL LIBRARY

36.1: COMPLEX CONDITIONAL LIBRARY


The Complex Conditionals functionality provides the ability to insert complex condition
statements with multiple if...else clauses inl-ine within the content of a document using the
Document Editor without having to resort to custom XSL snippets. Once you have created a
complex conditional, it is then stored in the Complex Conditional Library which is found when
you navigate to Dynamic Data.

To Navigate the Complex Conditional Library:


Step 1:
From any page in the Document Engine, click on the Dynamic Tab.
Step 2:
Click on the Dynamic Data icon. You can also access this from the Home Toolbar.
Step 3:
When the Dynamic Content window pops up, click on the Complex Conditionals tab.

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

36.2: INSERT A COMPLEX CONDITIONAL


Once you have added a Complex Conditional, you can insert it into your document.

CONFIDENTIAL

573

36.3: ADD A COMPLEX CONDITIONAL

To Insert a Complex Conditional:


Step 1:
Place your cursor on the page, where you want to insert the complex conditional.
Step 2:
Navigate to the Complex Conditionals library and insert a complex conditional into your
page by clicking the blue Insert arrow.
You will notice that the complex conditional is shown in green. You can edit this by clicking
the pencil or delete it from your page by clicking the red x.

36.3: ADD A COMPLEX CONDITIONAL


You can create complex conditional statements within the Complex Conditional Expression Editor.
The <if...else> statements can be Always True or they can be set-up using simple filters.

To Add a Complex Conditional:


Step 1:
Double-click on the page you wish to edit.
Step 2:
Click on the Dynamic tab in the toolbar.
Step 3:
Click on Complex Conditionals to open the Complex Conditional Expression Editor.

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

36.3: ADD A COMPLEX CONDITIONAL

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

POINTS TO REMEMBER (Cont)


Clauses within a complex conditionals can be reordered after creation.
It is Best Practice to store headers, footer, terms and conditions in complex
conditionals.
Conditional sections that contain a lot of data or that are nested tables/loops/
conditions should be replaced with complex conditionals.

COMPLEX CONDITIONALS

CONFIDENTIAL

577

578

CONFIDENTIAL

36.3: ADD A COMPLEX CONDITIONAL

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

The Table toolbar contains functionality that can be


performed when the cursor is inside of a table cell.
For example, you can add or delete a table, add or
delete rows or columns, add conditionals, repeat
rows and more.

CONFIDENTIAL

579

THE TABLE TOOLBAR


Edit Table Properties
Add Column
Table Cell Border Operations

the table toolbar

Table Cell Background Color Operations7)

Merge Table Cells


Split Table Cell
Instantly add a single table row BEFORE the current cell

Instantly add a single table row AFTER the current cell


Add multiple table rows before or after the current cell
Add a loop around the current table row
Edit the existing table row loop
Delete the table row loop
Add a condition around the current table row
Edit the existing table row condition
Delete the table row condition
Delete the entire table
Delete the current row
Delete the current column

580

CONFIDENTIAL

37.1: INSERT A TABLE


You can use tables throughout your document to group data.

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

37.2: REMOVE A TABLE

37.2: REMOVE A TABLE

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.

37.3: INSERT OR DELETE A COLUMN


You can use the buttons in the Table Toolbar to add or remove columns.

To Insert a New Column:


Step 1:
Move the cursor to a cell within the table that you want to insert the new column into. The
cell that you click in should be within a column that is going to be next to the new column
you insert.
Step 2:
Click + Column from the Table 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.

37.4: EDIT COLUMN WIDTHS


You want to change the width of an existing column.

To Edit of Column Widths:


Step 1:
Move the cursor to any cell within the table that contains the column you want to change.
Step 2:
Click Properties from the Table toolbar tab to open the Table Properties window.

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

37.5: INSERT/DELETE TABLE ROWS


You can use the buttons in the Table Toolbar to add or remove columns.

37.5: INSERT/DELETE TABLE ROWS

To Insert a New Row:


Step 1:
Move the cursor to any cell within a table row that you want to add a new row before or
after.
Step 2:
Depending on your need, you can add new rows in multiple ways:
Instantly add a new row BEFORE the cursor row: Click + Before from the
Table Row group in the Table toolbar tab.
Instantly add a new row AFTER the cursor row: Click + After from the
Table Row group in the Table toolbar tab.
Add multiple table rows to a table: Click + Multiple from the Table Row
group in the Table toolbar tab, and fill out the following fields. Click Insert Rows
to insert them into the table.
Rows to Insert: The number of new rows you want to add
Insert Before? Checked to insert the new rows BEFORE the cursor row.
Defaulted to inserting new rows AFTER the cursor row.

Delete a Table Row


Move the cursor to any cell within a table row that you want to delete. From the Table toolbar
tab, click - Row from the Delete group. The cursor row will be instantly deleted.

584

CONFIDENTIAL

37.6: ADD/REMOVE A HEADER ROW


You can add or remove header rows from a table.

To Add/Remove a Header Row:


Step 1:
Move the cursor to any cell within the table from which you want to remove the header.
Step 2:
Click Properties from the Table toolbar tab to open the Table Properties window.

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

37.7: MERGE SEVERAL TABLE CELLS

37.7: MERGE SEVERAL TABLE CELLS

You have the ability to merge several table cells together.

To Merge Table Cells:


Step 1:
Select the cells that you want to merge together. If you are having trouble doing this, see
Recipe 37.7 . It is important to note that you can only perform a merge on a group of cells
that meet the following criteria:
No cells in the selection already contain a column or row span.
The cell selection must be rectangular (grid). You cannot select non-adjacent cells to be
merged.
Step 2:
Click Merge from the Table toolbar tab to merge the cells together.

37.8: SPLIT A TABLE CELL


You have the ability to split previously merged table cells.

To Split Table Cells:


Step 1:
Move the cursor to the cell that you want to split. It is important to note that you cannot
split a cell that hasnt been merged. If you want to insert a column or row, see Recipe 37.3 &
Recipe 37.5 respectively.
Step 2:
Click Split from the Table toolbar tab to merge the cells together.

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.

37.9: DISPLAY A TABLE ROW FOR EACH LINE ITEM


You can display a table row for each line in a transaction. To do this, you will need to create a Table
Row and a Repeat Row

586

CONFIDENTIAL

To Create a Table Row for Each Line Item:


Step 1:
Place the cursor inside of any table cell within the row that you want to repeat. The table
row must not already be a repeating row or have an existing condition on it.
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.

Step 3:
The Loop Expression Editor should appear, and you can define the loop to display on the
output.

37.10: DISPLAY A ROW BASED ON CONDITIONS


You can set conditions to make sure that a table row only displays if a BigMachines attribute is a
certain value. To do this, you will place a condition on a table row.

To Create a Table Row for Each Line Item:

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.

37.11: CENTER ALIGN A TABLE

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.

37.11: CENTER ALIGN A TABLE


You can align a table so that the entire table is center-aligned on the page. This is actually not
possible as it is a limitation of the XSL:FO language. Please see below for steps to work around
this.

To Center Align a Table:


Step 1:
Add a left-most and a right-most column to your table.
Step 2:
Adjust all of your Table column widths (click Properties on the Table toolbar), so that they
total to the editable width of the page (for example, an 8.5 wide page, with .5 left & right
page margins, will have a 7 editable region). The left-most & right-most buffer columns
that you added in Step 1 should have the same width as each other. This way the cells in the
middle (that contain actual content), will appear centered on the output.

37.12: CENTER ALIGN CONTENT IN A CELL


You can align a the content within a table. To align multiple paragraph WITHIN the same table cell,
select the paragraphs with the mouse.

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

37.13: INSERT DYNAMIC DATA INTO A CELL


You want to insert a dynamic data value (from the dynamic data tree) into a table cell.
There are sometimes some unexpected results that can happen if you insert a Dynamic Data item
(from the Dynamic Data Window tree) into a table cell, if the table cell doesnt contain only applies
to table cells

To Insert Dynamic Data Into a Cell:


Step 1:
Paragraph-ify the table cell first. Detailed instructions located in the recipe Paragraph-ify a
Table Cell to Avoid Potential Issues (See Recipe 37.18)
Step 2:
After moving the cursor to the location of insertion again, you now see <Paragraph>
appear in the bottom toolbar. Press the spacebar several times, to insert multiple
whitespaces in the cell. Move your cursor in between the spaces, as the spaces provide
padding so you can safely apply alignment to the Dynamic Data element. If you are not going
to align the Dynamic Data, then you dont need to add empty spaces.
Step 3:
Select and Insert the desired Dynamic Data attribute from the Dynamic Data Window tree.

37.14: APPLY BORDERS TO TABLE CELLS


In order to apply borders to table cells, first select the cells that you want to merge together.
From the Border menu in the Table Toolbar, select the type of border you want to apply.
If you try to apply a border to multiple cells AND one of the cells is
merged, the border may not be applied. As a workaround, select merged
cells individually and apply the border again.

37.15: APPLY A BACKGROUND COLOR TO CELLS


You can apply a background color to one or more table cells.

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.

37.16: SWITCH THE UNITS FOR A TABLE

To Apply a Background Color to a Table Cell:


Step 1:
Select the cells that you want to apply a background color.
Step 2:
From the Background menu in the Table toolbar tab, select Set Cell Background.

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.

37.16: SWITCH THE UNITS FOR A TABLE


You can define a table columns width in different units than inches. To do so, click Properties
from the Table Toolbar to open the Table Properties window. Change the desired units. Note that
the column widths will need to be adjusted as well. Click Update Table to apply the new units.

590

CONFIDENTIAL

37.17: SELECTING TABLE CELLS


Depending on your browser, this is done in different ways.
In Firefox there are two ways:
Use your mouse to click & drag as you might expect.
Hold down the CTRL key and left-click on each cell to select.

37.18: DELETING DYNAMIC DATA FROM A TABLE


You may encounter unexpected results if you delete a dynamic element from a table cell, especially
in Firefox. To avoid any issues we recommend inserting dynamic elements in the following way.
Note that this only applies to elements within table cells.
To delete dynamic data from a table cell, click on the Dynamic Data element label and press
Spacebar to insert sever spaces after it. Then, you will double-click the X icon to delete the
element.
If you do not follow the instructions above, you may run into the issue described in the
troubleshooting section: A.9.

37.19: PARAGRAPH-IFY A TABLE CELL


We highly recommend that you paragraph-ify any new table cells before inserting dynamic
elements or content. in doing this first, you will reduce the risk of potential issues when you go
to perform functions, such as alignment, later on.
Step 1:
Move the cursor to the location in the table cell into which you want to insert
the Dynamic Data.

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

37.17: SELECTING TABLE CELLS

38
IMAGES & HYPERLINKS
In This Chapter:

The Document Engine provides an interface for


you to be able to insert images or documents (as
hyperlinks) into the document. While you can insert
items into the editor, you are not able to directly
upload or modify the files into the File Manager itself.

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

38.1: INSERT AN IMAGE


You have the ability to add, replace or delete files in the File Manager Window.

To Insert an Image from the File Manager:

38.1: INSERT AN IMAGE

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.

38.2: INSERT A HYPERLINK


In order to insert a hyperlink into your document, follow steps 1-3 found in Recipe 38.1. When
you get to Step 4, you will select the Pencil icon to insert a hyperlink.

38.3: EDIT IMAGE DIMENSIONS


There may be an instance where you need to change the height and/or width of an image that has
already been inserted into the document. There are two ways to edit the dimensions of an image.
The image can be resized through clicking & dragging the image boundaries in the editor like
below:

CONFIDENTIAL

595

IMAGES & HYPERLINKS

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.

38.4: INSERT AN IMAGE FROM AN EXTERNAL URL

38.4: INSERT AN IMAGE FROM AN EXTERNAL URL


The Document Engine provides the ability to insert an image that is not located within the
BigMachines File Manager.

To Insert an Image from an External URL:


Step 1:
Click your cursor on the location in the editor where you want to insert your image into.
Step 2:
Click the Insert Image from External URL icon from the Home toolbar tab.

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.

38.5: DISPLAY A PAGE BACKGROUND IMAGE


This is a recipe for displaying a static page background. If you want to display a conditional
background image (ex. For a DRAFT watermark), see Recipe 42.1 Display a Conditional
Watermark as a Page Background

To Display a Page Background Image:


Step 1:
Click on Edit Layout in the Home toolbar to open the layout editor.
Step 2:
Click on the Body tab, and enter a valid image URL into to Image field.

IMAGES & HYPERLINKS

Step 3:
Click Apply Layout and be sure to save your document afterwards.

CONFIDENTIAL

597

38.6: INSERT A LINK FROM AN EXTERNAL URL

38.6: INSERT A LINK FROM AN EXTERNAL URL


The Document Engine provides the ability to insert a hyperlink that is not located within the
BigMachines File Manager.

To Insert a Hyperlink from an External URL:


Step 1:
Click your cursor on the location in the editor where you want to insert your link into.
Step 2:
Click the Insert External Hyperlink icon from the Home toolbar tab.
Step 3:
Enter the link text (Text to Display) and the URL (Link) in the dialog window that appears,

Step 4:
Click Insert.

598

CONFIDENTIAL

38.7: EDIT A HYPERLINK


You can change the text or URL of a hyperlink that has already been inserted into the document.
To do so, click on the hyperlink in the document editor. Click on the Hyperlink tab that appears
in the toolbar and click Edit Hyperlink. Note that this tab is only visible when you have selected a
hyperlink in the editor. Edit the link text & URL as explained in Recipe 38.6, Steps 3-4.

IMAGES & HYPERLINKS

CONFIDENTIAL

599

600

CONFIDENTIAL

38.7: EDIT A HYPERLINK

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

Bookmarks are internal links inside of your document.


You can insert Bookmarks anywhere in your content,
and create dynamic hyperlinks & page numbers that
reference them. This allows you to create a basic
Table of Contents.
In addition to bookmarks, you can also insert a
Page Number Object that will display the current
page number or the total number of pages in the
document on the user-side.

CONFIDENTIAL

601

39.1: CREATE A BOOKMARK


You can create and insert a bookmark into your document.

39.1: CREATE A BOOKMARK

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

39.2: DELETE A BOOKMARK


Double-click on the X icon next to the bookmark label. This will remove the bookmark
from the document, and render any references to the bookmark (links & page numbers) to not
function anymore. Because of this, it is recommended that you also delete any bookmark links or
page numbers along with the bookmark

39.3: INSERT A LINK TO AN EXISTING BOOKMARK


You can add some text that will link to a bookmark location when the user clicks on it.

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.

PAGINATION & BOOKMARKS

Step 4:
Click Save.

CONFIDENTIAL

603

39.4: DELETE A BOOKMARK LINK

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.

39.4: DELETE A BOOKMARK LINK


In order to delete a bookmark link, double-click on the X icon of the bookmark link label.

39.5: INSERT A PAGE NUMBER


You can display page numbers within the document.

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

PAGINATION & BOOKMARKS

You should NEVER use a bookmark in a Header or a Footer. The reason


for this is that they can cause the XSL to break if that page is broken into
several pages

606

CONFIDENTIAL

39.4: DELETE A BOOKMARK LINK

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

Documents created by the Document Engine can


be extended with custom functionality through the
use of XSL snippets in various areas. Below are the
following places where XSL Snippets can be edited or
inserted:




Global XSL Snippet


Custom Master Layout XSL Snippet
Document Flow XSL Snippets
XSL Mode for Pages in the Document Flow
Embedded XSL Snippets in Page Regions

CONFIDENTIAL

607

40.1: CUSTOM GLOBAL XSL TEMPLATES

There is no validation that runs on any XSL snippet, so be sure to test your
changes afterward

40.1: CUSTOM GLOBAL XSL TEMPLATES


You want to define or create custom XSL templates that you can call from embedded XSL snippets
in your Pages. This is an advanced feature, which requires XSL coding. The Global XSL Snippet
will be ultimately inserted in the global scope of the document, as a direct child of the root
<xsl:stylesheet> node, and OUTSIDE of the main template <xsl:template match="/"> ). You can
use this snippet to define global variables, templates and so on. This snippet is empty by default.

To Define a Custom Global XSL Template:


Step 1:
Select Global XSL Snippet from the Document menu on the Document Panel.
Step 2:
Enter XSL code in the window that is opened and click Save.
While the global XSL snippet is blank by default, we recommend inserting the following
code for all your documents. Defining the $main_doc XSL variable is a good idea for
performance benefits. This allows you to refer to header attributes, without needing to
pre-pend the absolute path to the variable name. BMI_Common.xsl contains a lot of useful
formatting templates that are specific to BigMachines, but generic enough to be used for your
application.
<!-- global declaration of main_doc for use in your XSL snippets -->
<xsl:variable name=main_doc select=/transaction/data_xml/document[@
data_type=0]/>
<!-- BMI_COMMON.XSL for the Doc Engine. Contains some generic & useful
templates -->
<xsl:include href=/xsl/documenteditor/BMI_Common.xsl/>

40.2: CUSTOM XSL:FO PAGE SEQUENCES


You can add custom functionality such as external PDF merging or use a custom page layout. To
do so, select XSL Snippet from the Add menu in the Document Flow tree. A window will open,
where you can write your XSL code.

40.3: EMBEDDED XSL SNIPPETS


The Document Engine allows you to inject custom XSL code into page content. This
608

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:


Displaying the results of a math calculation that involves a BigMachines attribute


Calling a custom XSL template
Displaying an inline conditional statement

To Embed an XSL Snippet:


Step 1:
Place your cursor at a point in the Page editor, where you would like to insert the XSL
Snippet.
Step 2:
Click the Insert XSL Snippet icon from the Home Toolbar.

Step 3:
Enter XSL code into the window that opens.

CONFIDENTIAL

609

ADVANCED: XSL SNIPPETS

Step 4:
Click Save and an XSL object will be inserted at the current location of the cursor.

40.4: CONVERt A PAGE INTO CUSTOM XSL CODE

There is no validation that runs on any XSL snippet, so be sure to test your
changes afterwards.

40.4: CONVERT A PAGE INTO CUSTOM XSL CODE


Follow these steps if you want to view or edit the XSL code that is generated by a Page object.

To Convert a Page into Custom XSL Code:


Step 1:
Open the page for editing by double-clicking on it.
Step 2:
Click Page Code from the Home toolbar tab.
*NOTE: If no code appears after clicking Page Code, or you just see a blank blue page,
re-open the Document Engine and try again.
Step 3:
The code that appears is the XSL being generated for that Page object. Note that it starts
with <fo:page-sequence>
*NOTE: XSL code-mode Pages contain non-existing Page layouts which cause
the output to crash. This only affects any Page that is converted to Custom XSL using
the Page Code button. As a workaround, replace the master-reference name in the
<fo:page-sequence> tag with an existing layout name. Find an existing layout from an
existing Page that is in Design Mode (by viewing Page Code, without saving the XSL) or a
Custom Global XSL layout.
Because of the issue above, MAKE SURE TO CHANGE the master-reference to an existing
layout. We recommended using the layout of an existing Design-Mode page that you want to
mimic. Follow this recipe on how to Find the Layout Name of a Design-Mode page.
Step 4:
Make your edits (including CHANGING THE MASTER REFERENCE layout name) and click
Save as Custom XSL at the bottom of the page. Save the document aftewards.
*NOTE: Once you save the page as a Custom XSL, you will NOT be able to open it in
Design Mode anymore.

610

CONFIDENTIAL

40.5: PREVIEW THE OUTPUT XSL CODE


You can preview the XSL code that is generated by the Document Engine in order to debug and
to see if you can spot the source of an error that you are receiving.
Select View Document XSL from the Document menu. The XSL code that is read-only, but
you can copy and paste it into any text/XSL editor if you like. Any changes that you make locally
can be uploaded back to BigMachines as a custom XSL only.
We recommend that you use this feature for debugging only and NOT as
a starting point for creating good coding standard XSLs. The XSL that
the Document Enging creates will not be as good as an XSL that you
develop on your own (assuming that you know XSL).

40.6: USING CUSTOM XSL FOR LOOP EXPRESSIONS


You want to customize the conditions of a loop in a repeating table row or a repeating section,
while still retaining design-mode for the content. you can customize the XSL code for a loop
expression in a Repeating Section or a Repeating Table Row. Note that this functionality is not
yet available for Doc Flow Loops.
Why would you want to use custom XSL for loops? Here are a few use cases:




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

To Use Custom XSL for Loop Expressions:


Step 1:
Open up a page for editing in your document, and insert a table with a Repeating Row.
Step 2:
Set up your basic loop condition using the grid and/or filters. This will be converted this into
custom XSL in the next step,.
Step 3:
Save the loop by clicking the Save button. The View XSL button will not appear for new
loops. You need to open the loop again for editing,
CONFIDENTIAL

611

ADVANCED: XSL SNIPPETS

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.

40.7: USING CUSTOM XSL FOR CONDITIONS

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.

40.7: USING CUSTOM XSL FOR CONDITIONS


you can customize the XSL code for a Conditional Section as well as a Table Row. Why would
you want to use custom XSL for conditions? Here are a few use cases:


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

To Use Custom XSL for If/Table Row Conditions:


Step 1:
Open up a page for editing, and insert a conditional section by clicking the Conditional
button on the Dynamic tab.
Step 2:
Set up your basic conditions using the grid and/or filters. This will be converted this into
custom XSL in the next step,
Step 3:
Save the condition by clicking the Save button. The View XSL button will not appear for new
conditionals. You need to open it up again for editing,
Step 4:
Open the conditional again for editing, and click on the View XSL button at the bottom of
the window
Step 5:
You should see your condition converted into XSL:

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

ADVANCED: XSL SNIPPETS

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

40.7: USING CUSTOM XSL FOR CONDITIONS

41
USEFUL TECHNIQUES
In This Chapter:
Use Impossible Page Conditions
Modify XSL but Keep Design Mode

This chapter provides a couple of useful techniques.


For example, you can set impossible conditions so
that a page never shows up.

CONFIDENTIAL

615

41.1: USE IMPOSSIBLE PAGE CONDITIONS

41.1: USE IMPOSSIBLE PAGE CONDITIONS


Lets say youd like to have a page that NEVER shows up in the document. First of all, in what
circumstances would you like a page to NEVER show up? There are many reasons:


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.

To Set Impossible Conditions:


Step 1:
Open your page for editing by double-clicking on it from the Document Flow tree.
Step 2:
Click on Conditions from the Home toolbar tab.
Step 3:
In the Filters grid, make it something impossible that will never evaluate to true. A good way
to do this is to select System Data Type from the Quote folder, operator of =, and a value
of -1. This condition will never be met. Hit Save to save the condition. Be sure to save
your page afterwards.

41.2: MODIFY XSL BUT KEEP DESIGN MODE


Lets say you need to modify the XSL code for a page as a workaround for issues such as displaying
recommended items that belong to a model line item. However, while you can modify & save the
page as an XSL Snippet, you do not want to be stuck maintaining the content/text changes for this
page in XSL indefinitely.

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.

To Modify XSL Page Code and Retain Design Mode:


Step 1:
Open your page for editing and add a Condition to the page by clicking Conditions from the
Home toolbar tab.

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.

41.2: MODIFY XSL BUT KEEP DESIGN MODE

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.

Save the document!


Now if you want to make content changes to this page, you can repeat the steps above by
doing the following:
1. Make your edits to the DESIGN page & save.
2. Delete the old LIVE/Code page.
3. Make a copy the DESIGN page, and rename it as the new Live/Code page. Save the
Document.
4. Re-order pages if need be & save the document
5. Remove the impossible conditions on the new Live/Code page.
6. Convert the Live/Code page to Page Code mode.
7. Make code edits & save.

USEFUL TECHNIQUES

CONFIDENTIAL

619

620

CONFIDENTIAL

41.2: MODIFY XSL BUT KEEP DESIGN MODE

42
EXAMPLE USE CASES
In This Chapter:

This chapter provides some advanced use cases and


examples.

Display a Conditional Watermark


Define a Multi-Column Terms &
Conditions Page
Table Columns Based on Conditions
Show Model Accessories
Create a Simple Table of Contents

CONFIDENTIAL

621

42.1: DISPLAY A CONDITIONAL WATERMARK

42.1: DISPLAY A CONDITIONAL WATERMARK


For example, you need to display a background DRAFT image for quotes that are in a pending
state.
We recommend that you define a global main_doc variable to point to your header attributes.
Note that you can only define it once in the document, so if main_doc is already defined, dont
define it again.

To Display a Conditional Watermark as a Background


Step 1:
Upload an image to use as the watermark to the BigMachines File Manager. You will need to
do this first in the BigMachines application, since you cant upload files through the Document
Engine. Make sure that the image that you use is a valid image that the FO processor can
read.
Step 2:
Add the following to define a watermark image. Make the following changes to customize:


Replace the image URL to point to your watermark image.


Change the logic of the test to one that you need for your application. In the
example below, we are checking for the main document commerce attribute w/
variable name quoteStatus_q, and seeing if it equals the text Pending. Your
implementation will probably be different. You can add more xsl:when statements
if you need to. An <xsl:choose> statement is basically an IF/ELSE IF/ELSE block.
The processor will retrieve the value of the first <xsl:when> condition statement
that is true. In this case, we are returning the URL if the watermark image if the
watermark should be displayed.

<xsl:variable name=main_doc select=/transaction/data_xml/document[@data_


type=0]/>
<xsl:variable name=watermark>
<xsl:choose>
<xsl:when test=$main_doc/quoteStatus_q = Pending >/bmfsweb/pm/image/
Proposal/watermark.jpg</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
Step 3:
Save your Global Snipped AND save the document.
Step 4:
Open the page you where you want to place the watermark. Click Edit Layout from the
Home Toolbar to open the layout editor.

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

EXAMPLE USE CASES

Step 7:
Save the document, and test your new watermark!

623

42.2: DEFINE A MULTI-COLUMN T&c PAGE

Note that the watermark image will only appear on the document output when printed, and will
not be displayed inside of the page editor.

42.2: DEFINE A MULTI-COLUMN T&C PAGE


You want to display a terms & conditions page with a two-column flowing layout. This process
assumes that you already have created a page to use for your terms & conditions.

To Define a Multi-Column Terms & Conditions Page:


Step 1:
Select Edit Custom Master Layouts (See Recipe 32.5) from the Document menu, and add
the following page layout definition. This will be the layout that we will use for the terms &
conditions page. Make the following customizations to it:


Adjust the page size, margins, header/footer, etc


The number of columns you want to have is in the column-count property of
<fo:region-body>
The column spacing you want to have is in the column-gap property of <fo:regionbody>

<!-- page layout for Ts & Cs-->


<fo:simple-page-master master-name=terms2ColumnPage page-height=11in pagewidth=8.5in margin-top=.2in margin-bottom=0.2in margin-left=0.5in marginright=0.4in>

<fo:region-before extent=.5in/>

<fo:region-body margin-top=.5in margin-bottom=.1in column-count=2
column-gap=.2in/>

<fo:region-after extent=.2in/>
</fo:simple-page-master>
Step 2:
Tell a page to use this layout instead of the default. The recommended approach is to do
the follow the steps in the recipe, Tell a Page to Use a Custom Layout with your terms &
conditions page using the master-name above (example: terms2ColumnPage).

42.3: TABLE COLUMNS BASED ON CONDITIONS


You want to display the Discount column in a summary table if the Show Discount commerce
attribute is true. Conditional columns are not supported natively by the Document Engine. As
a workaround, you can each create separate versions of the table and insert each into an IF
conditional statement.

624

CONFIDENTIAL

To Define a Multi-Column Terms & Conditions Page:


Step 1:
Create a new Conditional, by clicking on the Conditional on the Dynamic toolbar. Set the
conditions to Show Discount is equal to true.
Step 2:
Inside of the IF content, insert a new table and populate the table as it would appear if the
discount column is shown.

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

EXAMPLE USE CASES

42.4: SHOW MODEL ACCESSORIES

42.4: SHOW MODEL ACCESSORIES

To Display Recommended Accessories for a Model Line Item:


Step 1:
Create a new Document Flow Loop that will loop over all model line items, and create a
new Page inside of the loop. This ensures that only models will have a detail page. Do not
save the document yet until you perform Step 2 below.
Step 2:
Rename the page to Model Detail, and the loop to Model Loop and Save the document.
The Flow should look like this at the moment. Model Detail is the page that will repeat
based on how many models are in this transaction. Model Loop (the pages parent) is the
Flow Loop that tells the Doc Engine to loop over all Model Line Items:

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!


Insert a Dynamic Element into a Table Cell (the recommended way)


Delete a Dynamic Element in a Table Cell (the recommended way)
Formatting a Dynamic Data as Currency

EXAMPLE USE CASES

You may now have something that looks similar to this:

CONFIDENTIAL

627

42.4: SHOW MODEL ACCESSORIES

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

EXAMPLE USE CASES

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.

42.4: SHOW MODEL ACCESSORIES

Step 9:
In the text area, find the piece that says:
normalize-space(./_parent_doc_number)=

REPLACE the pair of single quote marks with:


$model_line/_document_number
What this will do is to loop through all part line items (@data_type=3) where the models
document number matches the parts parent document number. _parent_document_number
is a system variable that contains the document number of the model line item (if any) the
part was added with.

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

42.5: CREATE A SIMPLE TABLE OF CONTENTS


You want to have a table of contents page, which has links and page numbers to different pages
in the document. Using a combination of Bookmarks, Bookmark Links, and Bookmark Page
Numbers, you can create a simple Table of Contents in the document.
First, set up your bookmark locations by creating new Bookmarks throughout the document. Be
sure to name them appropriately. Save the document afterwards. Then, on your table of contents
page, insert Bookmark Links and Bookmark Page Numbers.

EXAMPLE USE CASES

CONFIDENTIAL

631

APPENDIX A
WORKAROUNDS & TROUBLESHOOTING
A.1 - BigMachines attributes are not included in the Dynamic Data Tree

Workarounds & Troubleshooting

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

Workarounds & Troubleshooting

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.

A.7 - You cant add a Condition or Loop to a table row


Problem:
Youre trying to add a Condition or Loop to a table row, and the Add Loop and Add Condition
button are disabled on the Table toolbar.
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:
If you have a Repeating row, you cannot add a condition to it as well, nor can you add a repeating
row to a condition.
Solution #3:
See Solution #2 from A.6 above.

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).

A.11 - Table cell selection isnt working in Firefox

Workarounds & Troubleshooting

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.

A.13 - XSL error when previewing output


Problem:
You receive a generic Error in processing data. Please modify XSL file. error when you try to
preview the output document.
Solution:
There are many things that could be causing this error. Try the following:
1. Make sure you are using proper images (jpg or non-transparent gif images only).
2. Make sure you are entering valid parameter values for any dynamic data formatting
functions (See Appendix B).
3. If you have added or modified any XSL Snippets, please verify that each snippet is valid
XSL code, and is not trying to access any undefined $ variables.
4. 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.
5. If you have any XSL-Mode Pages (pages converted with Page Code option), check
the document output XSL to make sure that the master-reference in the <fo:pagesequence> tag exists as a valid page master layout. See the recipe on Converting a Page
into Custom XSL through Page Code for a fix.

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.

A.17 - Table cell selection is not working in Internet Explorer


Problem:
You are no longer able to select table cells with the mouse in Internet Explorer.
Solution:
Internet Explorer does not support table cell selection with the mouse. Instead use CTRL + Left
Mouse Click on each cell to select them for table operations.
CONFIDENTIAL

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

Formatting Expression Editor Parameters

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:

start-index : {number} : starting position to take the substring from


length : {number} : length of string to take

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:

search-characters : {text} : starting position to take the substring from


replace-characters : {text} : length of string to take

concat
The concat function returns the concatenation of its arguments.
Parameters:

param1 : {text} : string to concatenate to the end of the data value

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

Formatting Expression Editor Parameters

, (The group separator for thousands. Example: ###,###.##)


% (Displays the number as a percentage. Example: ##%)
; (Pattern separator. The first pattern will be used for positive numbers and the
second for negative numbers)
decimal-format: {text} : Optional

currency
Formats a number into a currency string.
Parameters:

Currency-code : {text} : Required. The following is a complete list of valid currency-code


values:
USD US Dollars
EUR - Euros
GBP Great Britain Pounds
CAD Canadian dollars
AUD Australian dollars
NZD New Zealand dollar
CHF Swiss Franc
BRL Brazilian Real
CNY Chinese Yuan Renminbi
RS - Rupee
JPY Japanese Yen
KRW South Korean Won
MXN Mexican Peso
ARS Argentinian Peso
RMB China Renminbi

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:

separator : {text} : Required. The delimiter to use, / in the example above

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

Keyboard & Mouse Shortcuts

Key

Description

CTRL + X

Performs a Cut from the Doc Engine clipboard.

CTRL + C

Performs a Copy from the Doc Engine clipboard.

CTRL + V

Performs a Paste from the Doc Engine clipboard.

CTRL + E

Performs an External Paste from Word or another


outside application.

CTRL + Q

Refreshes the content in the active page region,


WITHOUT performing a page save. Refreshing
your content this way allows you to see the
cleaned-up editor contents that would typically be
done on a Page Save.

CTRL + B

Bolds selected text.

CTRL + I

Italicizes selected text.

CTRL + U

Underlines selected text.

CTRL + Z

Undo

CTRL + Y

Redo

C.2 - Dynamic Elements


For the following shortcuts, the cursor must be placed on a dynamic element label.
Key

Description

CTRL + SpaceBar

Inserts a single whitespace character directly


BEFORE the current dynamic element. This
prevents you from getting stuck.

SpaceBar

Inserts a single whitespace character directly


AFTER the current dynamic element. This
prevents you from getting stuck.

C.3 - TABLES
Key
TAB

CTRL + left mouse-click

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

Before You Begin 447


BigMachines Product Hierarchy
Checking Upload Status 91

109

Color of Syntax 380


Commerce
513
Commerce Debugger
386
Commerce Function Editor
384
Commerce Library Debugger
386
Commerce Library Function Editor 384
Commission (%) 496
644

CONFIDENTIAL

468

Commission (%) 496


Compilation Errors
510
Condition
164
Configurable Attributes (User-Side):
119
Configuration 385
Configuration Rules
162
Configuration/Util Library Function Editor 383
Configuring Navigation Menus for Shopping Carts:
Control Attribute 446
cos(x) 418
Create Cart Invocation Action
336
Create Cart Invocation Rule
337
Creating an Array Set:
138
Creating a Rule-Based Destination 236

339

Data Stored in BigMachines


81
Data Stored in Excel (CSV File) 81
Default data
126
Defining Process/Profile Views
291
Defining Simple Conditions
165
Defining the Group Layout
155
Defining the Tab Layout 153
Definition of Button
380
Deployment of Pages and Processes

338

Editing a Line Item Grid 275


Editing an Action Strip
271
Editing an Input Column 265
Editing a Spacer 268
Example:
178
EXAMPLE
381
Example of a Configuration Flow with Tabs 144
Example of acos(x)
421
Example of addDays(date, num_of_days) 433
Example of an Array Attribute (User-Side) 136
Example of an array attribute (Users View) 446
Example of append(arrayIdentifier, newArrayElem)
Example of asin(x)
420
Example of atan(x)
422
Example of atof(str) and atoi(str) 396
Example of atof (str)/atoi(str) error messages
Example of average
494
Example of break 441
Example of ceil(x)
410
Example of Column Layout (user-side)
263

458

395

CONFIDENTIAL

645

Example of Columns Layout (user-side)


263
Example of containskey(dictIdentifier, key) 476
Example of continue
442
Example of cosh(x)
424
Example of cos(x)
418
Example of datetostr(date)
430
Example of dict() 474
Example of exp(x)
412
Example of fabs(x)
411
Example of Filter Attributes
319
Example of findinarray(arrayIdentifier, element)
Example of find(str, substring, [start], [end]) 403
Example of float[n]
451
Example of float[n][n]
454
Example of fmod(x,y)
413
Example of for...loop in a 1-D Array 440
Example of for...loop in a 2-D Array 440
Example of getarraystr() 489
Example of getconfigattrvalue() 490
Example of getdate()
428
Example of get(dictIdentifier, key) 475
Example of getdiffindays(date 1, date 2)
434
Example of hypot(x,y)
416
Example of if... 438
Example of if...else
439
Example of integer[n]
450
Example of integer[n][n] 453
Example of integer(x)
408
Example of invoke()
488
Example of isempty(arrayIdentifier) 464
Example of isleap(year_num)
429
Example of isnumber(str) 399
Example of isweekend (date)
429
Example of join(str_Array, delimiter)
467
Example of len(str)
398
Example of Line Item Grid (User-Side)
274
Example of ln(x) 415
Example of log(x) 414
Example of makeurlparam()
477
Example of max(arrayIdentifier) 461
Example of minusdays(date, num_of_days) 432
Example of pow(x,y)
412
Example of put(dictIdentifier, key, value)
474
Example of range(x)
455
Example of remove(arrayIdentifier, removePos)
Example of replace(str, old, new, [n])
401
Example of reverse(arrayIdentifier) 463
646

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

Highlights of BML 371


hypot(x.y)
416

Image Menu Properties 133


Importing a Data Table (.CSV)

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

Managing Views 318


Manually Populate Table Data
max(arrayIdentifier)
461
Menu Population 133
min(arrayIdentifier)
462

86

NUMERIC OPERATORS 390

Overview of BigMachines:
28
Overview of Configuration Flow (User-Side) 143

Parts Search for Admin Page:


65
Pending Approval 296
pow(x, y)
411
Preparing your .CSV File for Import
Process Definition Export 363
Process Definition Import 364
Properties
124, 127, 132, 163

Rejection

88

297

Sales ($) 496


Sample of a Configured Shopping Cart
334
Sample Scenario 176
Sample Use Case 1: Using the BMQL Function
484
Sample Use Case 2: Using the get() function and WHERE clause
Sample Use Case 3: Using a WHERE condition
486
Sample Use Case 4: Errors
487
Sample XML
99
Search Feature 33
648

CONFIDENTIAL

485

Searching Across Data Tables


93
Searching by Letter or Number 34
Searching Within a Data Table
92
Setting Access Rights for New Transaction Action: 317
Setting Tabs in Flows
149
Setting Up Mobile Device Approvals
301
SHORTCUTS 389
Since the year 2008 was a leap year, the function returns True. 429
sinh(x) 423
sqrt(x) 415
STANDARD SYNTAX 389
string[n] 448
string[n][n]
451
STRING OPERATORS 391

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

To Create a Custom Price Book 74


To Create a Custom Price Book 75
To Create a Folder to Store Reports:
344
To Create a Folder to Store Reports:
345
To Create a Multi-Columns Terms & Conditions Page:
535
To Create a New Document:
520
To Create a Partner Organization 44
To Create a Part or Price Book Filter
72
To Create a Parts Association
69
To Create a Report Filters 346
To Create a Table Row for Each Line Item: 587
To Create a Table Row for Each Line Item: 587
To Create BigMachines User Groups
43
To Define a Custom Global XSL Template: 608
To Define a Custom Layout:
537
To Define a Multi-Column Terms & Conditions Page: 624
To Define a Multi-Column Terms & Conditions Page: 625
To Delete an Attribute 209
To Delete a Part 67
To Display a Conditional Watermark as a Background 622
To Display a Page Background Image:
597
To Display a Page Based on a BigMachines Attribute Value:
549
To Display Recommended Accessories for a Model Line Item: 626
To Edit a Part 67
To Edit Commerce Attributes
207
To Edit Host Company Information 38
To Edit of Column Widths:
583
To Edit or Delete a Part Assocation
70
To Edit Shopping Cart Columns 335
To Embed an XSL Snippet: 609
To Format Dynamic Data as Currency:
562
To Format Dynamic Data as Currency:
568
To Insert a Complex Conditional: 574
To Insert a Conditional Section: 560
To Insert a Hyperlink from an External URL: 598
To Insert an Else Clause in a Conditional Section
562
To Insert a New Column: 582
To Insert a New Row: 584
To Insert an Image from an External URL: 596
To Insert an Image from the File Manager: 594
To Insert a Repeating Section:
558
To Insert a Table: 581
To Insert Dynamic Data Into a Cell: 589
To Manually Add a Part 66
To Manually Set-Up BigMachines Users
39
To Merge Table Cells:
586
To Modify Body Margins: 534
650

CONFIDENTIAL

To Modify XSL Page Code and Retain Design Mode: 617


To Navigate the Complex Conditional Library:
572
To Open the Shopping Cart Editor: 333
To Populate a Menu:
129
To Preview a Document as PDF or RTF: 527
To Revert to a Backup of a Document: 526
To Save a Document and Deploy Changes 522
To Schedule a Report
358
To Search For a Part
68
To Set Admin Permissions 42
To Set Data Table Schema 85
To Set Impossible Conditions:
616
To Set-Up a Navigation Menu
53
To Split Table Cells:
586
To Use Custom XSL for If/Table Row Conditions: 613
To Use Custom XSL for Loop Expressions: 611

139

Translatable Fields in Commerce 99


Un-itialized arrays
449
User-Side Examples of Array Attribute and Sets
User-Side Tabs
Using Quick Links
29
Util Library
388

What are array attributes? 446


What are Array Attributes?
135
What is a Set? 136
Where to find the transaction ID 386

Your Role as the Administrator: 29


You will be able to access this section any time you select Define Function within a rule
condition.
165

CONFIDENTIAL

651


652

CONFIDENTIAL

CONFIDENTIAL

653

S-ar putea să vă placă și